-
-
Erfahrener Benutzer
Robotik Einstein
Sollte der Begriff if(TIFR0 == 1) nicht if((TIFR0&0b00000001)==1) lauten ?
Es wird vor dem Timer Interrupt ja der Comparematch Interrupt ausgelöst.
Somit hat das TIFR0 Register beim Comparematch den Wert 3.
Also nicht den Wert 1 und deshalb wird deine Ausgabe nicht aktiv.
Wenn Du mit Interrupts arbeiten willst musst Du auch das "I" Flag im Statusregister setzen.
#asm ("sei");
Der Timer läuft in Deiner konfiguration schon an, hast Du auch wirklich 1024 Takte simuliert damit der Timer wenigstens mal bis Zählerstand 1 kommt ?
Mit dem 8 Bit Timer musst Du schon mit der Quarzfrequenz und dem Teilungsfaktor ein wenig rumprobieren bis Du genau auf 1 Sekunde kommst.
Einfacher geht das mit einem 16Bit Timer und dem Comparematch Interrupt, in dem dann eine Variable hochgezählt wird.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen