Hallo, ich versuche jetzt mit einer Aufgaben-Lösung klar zu kommen, die mir nicht ganz logisch erscheint. Es geht um Signal Erzeugung mit Timer0 in CTC Mode mit Atmega AVR. Die Lösung ist als jpg Bild angehängt. Was mir dabei nicht klar ist, warum wird OCF0-Flag durch 1 setzen gelöscht? wenn als erstes die Warteschleife durchgeht: while(!(TIFR&(1<<OCF0))); wird sie ja schon abgebrochen wenn OCF0=1. danach kommt aber die Zeile: TIFR = (1 << OCF0); wozu, wenn der Flag schon sowieso 1 ist? sollte es nicht ehe heißen: TIFR &= ~(1 << OCF0);// Flag 0 setzen? wo liegt das Denkfehler bei mir? würde mich sehr über ein Tipp freuen.
Alex S. schrieb: > wo liegt das Denkfehler bei mir? Solche Flags werden durch Beschreiben mit einer 1 gelöscht
Ingo L. schrieb: > Alex S. schrieb: >> wo liegt das Denkfehler bei mir? > Solche Flags werden durch Beschreiben mit einer 1 gelöscht achso.. habe ich mir gedacht. Danke schön!
Alex S. schrieb: > warum wird OCF0-Flag durch 1 setzen gelöscht? "OCF0A is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, OCF0B is cleared by writing a logic one to the flag."
1 | while((TIFR&(1<<OCF0))==0); |
Das Programm bleibt solange an dieser Stelle bis das OCF0-Flag gesetzt wurde. Ist dies der Fall, wird ein Pin an PORTC getoggelt, das Flag zurückgesetzt und das ganze wiederholt. Vermutlich wird in einem bestimmten Intervall eine LED ein-/ausgeschaltet.
Alex S. schrieb: > warum wird OCF0-Flag durch 1 setzen gelöscht? Weil die AVR-Entwickler sich das eben so ausgedacht haben. Ist eine beliebte Fallgrube.
Dominik B. schrieb: > Das Programm bleibt solange an dieser Stelle bis das OCF0-Flag gesetzt > wurde. Ist dies der Fall, wird ein Pin an PORTC getoggelt, das Flag > zurückgesetzt und das ganze wiederholt. > Vermutlich wird in einem bestimmten Intervall eine LED > ein-/ausgeschaltet. genau so ist das
Peter D. schrieb: > Weil die AVR-Entwickler sich das eben so ausgedacht haben. > Ist eine beliebte Fallgrube. ok, das ist wirklich sehr gut zu wissen, vor der Klausur)) vielen Dank noch mal))
Im Datenblatt unter Registerbeschreibung steht das für die entsprechenden Bits drin. Meistens sind das die Interruptflags, aber nicht immer.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.