-
Thread
Schieberegistersachen
Controller Zeit dazu findet, bis der Lesepointer den Schreibpointer erreicht hat. Dann wird ein "Jobflag" gelöscht, welches in der LCD_DATA-Routine gesetzt wurde, worauf die Zeichenausgabe eingestellt wird. Auch die Cursor-Positionierung erfolgt über den Ringbuffer. Dazu wurden Steuerzeichen im unteren
-
Thread
LCD + SD-Karte an SPI- Pins ?
Bildschirmspeicher übrig, dann prüfe ich im LCD-Wait (Warten auf ein vom Timer gesetztes Flag) die Jobflags und arbeite darin die Jobs der Mainloop ab. Das ist effizienter als Warteschleifen. ...
-
Thread
Kann man über USART Werte vom EEProm auslesen und schreiben
empfangenen Bytes auswerten kann. Hat man im Puffer eine gültige Kommando-Sequenz, so kann man ein Jobflag setzen, worauf die Mainloop den Job erledigt (Byte in EEP schreiben, oder Byte aus EEP holen und an UART übergeben). Da das EEP beim Schreiben nicht unendlich schnell ist, solltest du schon am PC
-
Thread
Drehimpulsgeber von Pollin
vorgesehen. [pre] drehgeber: ;Drehgeber-Entprellung und -Abfrage cbr flags,1<<neu_ms ;Jobflag löschen in wl,dgp ;Drehgeber einlesen andi wl,dgmsk ;nur Drehgeber-Bits (Bit 3:2) swap wl ;nach oben (Bit 7:6) or drg,wl ;neuen Zustand uebernehmen
-
Thread
uart interrupt geziehlt ausschalten
wird. Der UART-Interrupt legt das ankommende Byte in einen Puffer und meldet es per Merker (Jobflag) dem Hauptprogramm. Dieses pollt in der Mainloop die Merker und reagiert darauf. Taster werden zyklisch abgefragt und dabeinebenher Entprellt. Siehe [[Entprellung]]. ...
-
Thread
Interrupt Funktionsaufruf
Funktionsaufrufe diesen Umfangs legt man eigentlich immer ins Hauptprogramm. Setze in der ISR ein Jobflag und bearbeite den Rest im Hauptprogramm.
-
Thread
Programmier Stil für Mikrocontroller
Die zentrale Mainloop hat sich bewährt. In der mainloop werden alle möglichen Aktionen über Jobflags ausgelöst. Wenn ein anderer Codeteil was will, 'startet er den Job' in dem er das zugehörige Jobflag setzt.
-
Thread
Timer aus den AVR Tutorial
nebenbei, also neben der normalen Aufgabe eines Timers) durch einen Timer-Interrupt (direkt oder über Jobflag) hoch oder runter gezählt werden und beim Erreichen des vorgesehenen Wertes ein Ereignis auslösen. Ein Timer kann oftmals mehrere zyklische Jobs verwalten, indem man im Timer die Aufgaben anhand
-
Thread
Frequenz anders als mit externer Taktquelle regeln?
Spiel kommt, denn dann müssen ISRs möglichst kurz sein. Dann setzt man in der ISR einen Merker (Jobflag, Semaphore, Bitvariable, Boolean...). In der Mainloop fragt man alle Merker ab und verzweigt bei gesetztem Merker zur entsprechenden Routine. Diese löscht den Merker und arbeitet den Job ab, springt
-
Thread
Datenverwaltungsprogramm für Atmel-Mikrocontroller (Ankündigung)
ist es auch nicht erforderlich, jede Änderung in den Variablen mitzubekommen. Oft reicht es, die Jobflags zu untersuchen, um herauszufinden, warum das Ergebnis vom Erwarteten so unterschiedlich ist. Für mich hat OpenEye gute Dienste geleistet. Sicher kann einiges verbessert werden, aber ich hab auch nicht
-
Thread
Problem mit Interrupt-Funktion
als gültige Signale abgelegt. Nun kann man entscheiden, ob eine weitere Eventsteuerung mittels Jobflags aufgesetzt werden soll, sprich Flankenauswertung. Z.B. Du hast ene VAriable namens Ablage. In jedem Durchlauf prüfst du mit einer ExclusivOder, ob neue Signaleingänge zu den abgelegten unterschiedlich
-
Thread
problem mit peter fleurys uart lib und interrupts
überwechseln: In der ISR gar nicht ausgeben. Zumindest nicht derartige Mengen. Setzt dir in der ISR ein Jobflag und atbeite das im Hauptprogramm ab und mach von dort die Ausgaben. In einer ISR möchtest du normalerweise sowieso nicht ausgeben, da dir dieser Interrupt jederzeit überall reinknallen kann, zb
-
Thread
Sleepmodus? Mit "SBI MCUSR,SE" oder mit "SLEEP?
neuimp") enden mit "rjmp mainloop", damit vor dem Schlafen erst alle Jobs abgearbeitet werden. Die Jobflags werden natürlich von der Jobroutine gelöscht. ...
-
Thread
TWI: Clock leitung auf low halten
Der "klassische" Ansatz ist ein Jobflag+Puffer: die ISR empfängt ein ganzes Paket und setzt, sobald eins da ist, eine Variable/ein Bit (Flag), die Main loop fragt das Bit regelmäßig ab, und ruft die Funktion auf, wenn das flag gesetzt
-
Thread
Polling oder Interrupt?
vereinbarte End-eines-Befehls Zeichen (dafür würde ich Return benutzen), dann setzt die ISR ein Jobflag, dass eine Zeile komplett empfangen wurde. Das Polling geschieht in der üblichen main-Schleife. Diese pollt unter anderem das Eine-Zeile-empfangen Job Flag und wenn dieses signalisiert, dass
-
Thread
Schleife mit interrupt beenden.
sondern in der Timeout Zeit andere Aufgaben ausführen. Und dann wären wir wieder in der Nähe der Jobflags. Aber als Idee auf jeden Fall anerkennenswert. mfg
-
Thread
Timerproblem
Prinzip her ist diese Lösung in dieser konkreten Situation besser, als erst mal umständlich ein Jobflag Variable zu bemühen, in der Hoffnung, dass in der Hauptschleife so zeitnah darauf reagiert werden kann, so dass keinem die manchmal zeitweilige Verkürzung des Intervalls auffällt. Diese LED hier
-
Thread
ATmega8 und Sleep
die Mainloop so gestaltet, dass sie nach jedem Interrupt solange durchlaufen wird, bis alle (per Jobflags verwalteten) Jobs und noch anstehenden (bereits entprellten) Tastendrücke abgearbeitet wurden. Danach geht die Mainloop in den Sleep-Zustand, aus dem ein Interrupt (meist der Timer) den AVR wieder
-
Thread
Programmstruktur/Codeaufteilung in verschiedene Dateien
Einziger Punkt den man überlegen kann: Steckt man alles in die ISR oder macht man sich die Arbeit Jobflags zu benutzen so dass die Hauptschleife in main() die Arbeit macht. Da es aber nur auf das Umschalten von Portpins zu geeigneten Zählerständen rausläuft, würde ich der Einfachheit halber alles in der
-
Thread
CTC Timer - immer 2s zuviel
Millisekunde eine ISR aufgerufen wird. Und den Rest leitet man dann mit entsprechenden Zählern und Jobflags von diesen 1 Millisekunden her. Aber der Timer tickt durch. Ständig. Der Zeitfehler ist dann nicht größer als diese 1 Millisekunden, was angesichts diverser Ausgaben völlig ausreichend ist.
-
Thread
ATMEGA32 Programmierung einer Windkraftanlage
Zustandsmaschinen aufbaut zb dass ein Systemtakt in Form einer ISR nicht schlecht ist zb dass ein Aufbau mit Jobflags seine Vorteile hat zb wie das mit Timern funktioniert zb wie man Drehzahlen vernünftig misst zb das man Datentypen nicht unnötig groß wählt zb was atomarer Zugriff ist etc. etc.
-
Thread
mit kurzen Impulsen schalten / gegenseitig entriegeln / Attiny2313
fertig... job_neues_byte: ;es ist ein neues Byte eingetroffen cbr flags,1<<neubyte ;Jobflag entwerten ldi yl,low(toz-1) ;Pointer vor Timeout-Zähler ldi yh,high(toz-1) ;im SRAM ldi zl,low(bimu*2-5) ;Pointer 5 vor Bitmustertabelle ldi zh,high(bimu*2-5) ;
[avrasm] job_neues_byte: ;es ist ein neues Byte eingetroffen cbr flags,1<<neubyte ;Jobflag entwerten ldi yl,low(toz-1) ;Pointer vor Timeout-Zähler ldi yh,high(toz-1) ;im SRAM ldi zl,low(bimu*2-5) ;Pointer 5 vor Bitmust ... [/avrasm] und auch da verschaffen
-
Thread
Drehegeber und 8051, ich bekomme es nicht hin!
;Drehgeber-Entprellung und -Abfrage rcall lcd_update ;Zeichen ausgeben u. Jobflag loeschen... in wl,dgp ;Drehgeber einlesen andi wl,dgmsk ;nur Drehgeber-Bits (Bit 3:2) swap wl ;nach oben (Bit 7:6) or drg,wl
-
Thread
Makro überspringen
Menüpunktnummer (als Index) ausgibt. Von da aus geht es dann zur Mainloop, wo nach dem Prüfen aller Jobflags und ggf. Aufrufen von Jobs in den Sleep (Idle) gefallen wird und bis zum nächsten Interrupt (meist Timer) gepennt wird. Dient das Menü hauptsächlich zum Einstellen von Parametern, so lassen sich
-
Thread
UART-Senden und LED-Blinken gleichzeitig
mehrere Variablen hochgezählt werden. Erreichen diese Variablen bestimmte Werte, dann setzen sei Jobflags, als Zeichen für die Hauptschleife: Jetzt gibt es etwas zu tun. Die Hauptschleife sieht dann so aus [C] ... while( 1 ) { if( needToSampleADC == 1 ) { uart_puti(adc(i));
-
Thread
Multiplexing und Taster Routine
benachrichtigt' die Hauptschleife in main, dass es am Display etwas zu tun gibt. Sowas nennt man Jobflags: Ist das Flag gesetzt, gibt es einen Job abzuarbeiten.
-
Thread
Zweipunktregler mit uC programmieren: Anfänger
das ein Standardaufsatz: Timer erzeugt einen Basistakt, in der ISR wird die Zeit runtergeteilt, Jobflag gesetzt dass es wieder an der Zeit ist einen Korrekturzyklus einzulegen, der dann auch durchgeführt wird.
-
Thread
Probleme mit Counter auf Atmega8
z.B. mit einer ISR zu arbeiten. Schau mal über die Suchmaschine, ob du irgend welche Beiträge zu Jobflags findest. Dann wird dir vermutlich auch deutlich, welche Struktur du beim Programmieren, grad in Assembler, dir angewöhnen solltest. Ansonsten schau mal zur Konkurenz AVR-Praxis.de. Dort ist in der
-
Thread
messen einer Periodendauer
Hauptprogramm ab. Die Berechnung des Ergebnisses in Deinem Beispiel ist eigentlich auch ein Fall für ein Jobflag und eine Bearbeitung im HP, aber da sie in diesem Fall noch überschaubar ist, kann man die auch in der ISR lassen. Mit Deiner Methode machst Du im Prinzip alles falsch, was man falsch machen kann
-
Thread
Am Input Capture Pin (ICP) Frequenz messen
Berechnung löschen. Ansonsten schließe ich mich Karl Heinz an: Warte zwei Flanken ab, setze ein Jobflag in der Capture-ISR und werte dieses Flag im Hauptprogramm aus. BTW: SIGNAL ist veraltet. Installiere Dir bei Gelegenheit mal eine aktuelle WINAVR-Version bzw. wenn Du das schon getan haben solltest
-
Thread
Programmablauf / Modellauto Steuerung
diese 1000 erreicht hat (oder von 1000 auf 0 runtergezählt hat), dann setzt du eine Variable (das Jobflag) auf 1. In der Hauptschleife wird natürlich unter anderem geprüft, ob das Flag auf 1 steht und wenn ja wird die LED umgeschaltet und das Flag wieder zurückgesetzt. Gewartet wird nicht mehr. Auf
-
Thread
abweichung beim zeitmessungsprogramm
sei gekapselt werden) und die global Variable selbst muss volatile sein. Mit dem Suchbegriff "Jobflag" müsstest du eigentlich hier im Forum fündig werden.
-
Thread
Tiny45 PLL und Power Down
beendet, das Programm fällt in die Mainloop, da ist noch nix zu tun, weil noch keine Semaphores (Jobflags) gesetzt wurden und fällt in den Sleep. Nun ist aber Sleep-Mode Idle aktiv, worauf alle Takte außer MCU-Takt aktiv sind und deren Interrupts in der Lage sind, Ereignisse der Peripherie zu
-
Thread
ATMega8 Timer0 verliert Interrupts
vielleicht ginge auch der Timer2, der kann das. im Übrigen bin ich auch der Meinung, das vieles mit Jobflags besser gelöst ist. Ein SEI ist die ungünstigste Variante. Zu schnell findet man sich in einer unnötigen Fehlersuche wieder. Mag ja sein, das es Briefe gibt, die man direkt im Beisein des Briefträgers
-
Thread
Comparator mit Timer/Counter1
Zählerstand im RAM sichern (st/std/sts) - Zählerstand mit Referenz vergleichen (cp, cpc, brne) - Jobflag für erfolgreichen Vergleich setzen (sbr) - Register wiederherstellen (pop) - SREG wiederherstellen (out) - Rücksprung (reti) In der Mainloop kann sich der Controller um andere Dinge kümmern.
-
Thread
Hilfe zur Tastenentprellung von P.Dannegger
eigenen Variablennamen benutze: [pre] entprellung: ; cbr flags,1<<entprell ;Jobflag löschen Tastenabfrage: ;Entprellroutine (Algorithmus geklaut bei Peter Dannegger...) in temp,tap ;Tastenport einlesen (gedrückt=L) com temp ;invertieren (gedrückt=H) eor temp,tas
-
Thread
Problem bei Drehgeber auswertung
zum Zuge kommen, ehe der ;Controller am Ende der Mainloop in den Sleep fällt. Das zugehörige ;Jobflag (Synchronisation mittels Timer) wird in der Routine 'lcd_update' ;gelöscht. rcall lcd_update ;ein Zeichen aus Bildscirmspeicher an LCD ausgeben in wl,dgp ;Drehgeber
-
Thread
Drehimpulsgeber (wiedereinmal.)
Togglebits drehgeber: ;Drehgeber-Entprellung und -Abfrage cbr flags,1<<dgentprell ;Jobflag löschen in wl,dgp ;Drehgeber einlesen andi wl,dgmsk ;nur Drehgeber-Bits (Bit 3:2) swap wl ;nach oben (Bit 7:6) or drg,wl ;
-
Thread
AVR-Studio - Code Größe anzeigen
Compiler erstmal die halbe CPU sichern muss. Daher ist es des öfteren besser, in der ISR nur ein Jobflag zu setzen und die eigentliche Arbeit in der Hauptschleife zu machen.
-
Thread
Problem mit Temperaturmesssystem
die Zeitbehandlung machen. Wenn es an der Zeit ist eine neue Messung anzustossen, dann wird ein Jobflag gesetzt, welches in loop() ausgewertet wird. Damit hast du die Messung von der Erfassung und Zählung der Zeitintervalle entkoppelt. Jetzt muss nur noch das Intervall der Messungen länger sein, als