Gast
#408213
Hallo zusammen, wie ihr der Überschrift schon entnehmen konntet, versuche ich mit meinem ATMega16 eine LED im Sekundentakt blinken zu lassen. Also 1sec. LED aus und 1sec. LED an. Soweit ich das richtig verstanden habe, müsste mein Programm folgendermaßen aufgebaut werden: Hauptschleife: 1 Timerfunktion läuft genau 1 Sekunde 2 dann wird ein Interrupt ausgelöst 3 In der Interrupt-Routine wird ein Flag gesetzt 4 Zurück im Hauptprogramm wird geprüft ob das Flag gesetzt ist: Ja: Um eine Sekunde Inkrementieren LED entweder an oder ausschalten, je nachdem was grad ist Flag wieder löschen Nein: Programm wieder von vorne los Als erstes muss ich das mit dem Timer hinbekommen, habe heute den ganzen morgen schon im Datenblatt rumgelesen . Mein ATMega16 ist auf 8MHz getrimmt und ich habe bereits folgendes herausgefunden: Timer / Counter0 8-bit von bottom -> top also von 0x00 -> 255 Ich muss also TCCR0 auf folgenden Wert setzen: 01111xxx Bit 7 ist FOC0 und wird nur auf 1 gesetzt im Non-PWM Mode, also hier eine 0 Bit 6 ist WGM00 auf 1 für Mode 3 (Fast PWM, Top 0xFF, Update of OCR0 at Top, TOV0 Flagset at MAX) Bit 5 ist COM01 auf 1 (Set OC0 on compare match, clear OC0 at top) Bit 4 ist COM00 auf 1 (Set OC0 on compare match, clear OC0 at top) Bit 3 ist WGM01 auf 1 für Mode 3 (Fast PWM, Top 0xFF, Update of OCR0 at Top, TOV0 Flagset at MAX) Bit 2 ist vom Prescaler, keine Ahnung ! Bit 1 ist vom Prescaler, keine Ahnung ! Bit 0 ist vom Prescaler, keine Ahnung ! So zu den Bits 0 bis 2 habe ich keine Ahnung, auf welchen Prescaler ich diese setzen muss, um ganz genau später auf eine Sekunde zu kommen .. da müsst ihr mir ein wenig mit der Berechnung helfen :)