Hio.
Halt, stop, retour: Ich bin überhaupt am falschen Dampfer (--> Matschbirne).
Du machst ja keinen klassischen Timer, sondern Compare-Match .
Da ist erstens das mit dem Nachladen zu vergessen.
Aber auch das Rechnen stimmt dann so nicht. (das ist für counter-overflow)
Der Wert 141 heißt ja, von dort zählt er rauf bis 255 und dann schnackelt der TIMER
Beim Counter match zählt er von 0 -> OCR0 und löst dann aus.
d.h. statt 141 gelten bei dir 256 - 141 ---> also 115.
und nachladen brauchst du nix.
Das erkärt aber nicht einen Differenz 1 sek <--> 40 sekunden
da muß ich mal im DS nachlesen.
'Tschuldige nochmals.. Ich hab da auch net immer drangedacht. Hab dann am Schluss beides getestet und bin jetzt wieder beim klassischem Timer (Overflow)
.
Hier mein neuer Code
ISR:
Und die Initialisierung:Code:SIGNAL(SIG_OVERFLOW0) { TCNT0 = 141; countTimer0++; tmpCountTimer0++; }
Jetzt hab ich ein doch ziemlich komisches Testergebnis. Lasse ich den Mikrocontroller 15 Sekunden schalfen geht das sehr genau. D. h. der µC schläft exact 15 Sekunden! Lasse ich ihn dagegen nur eine oder zwei Sekunden schlafen dauert das teilweise über 20 Sekunden. Komisch: Wenn er zwei Sekunden schläft ist er schneller fertig (ca. 20 Sekunden) als wenn ich ihn nur eine Sekunde schlafen lass (ca. 25 Sekunden). Woran kann das liegen??Code:// Initializes the timer Timer0 TCCR0 |= (1<<CS00) | (1<<CS01); TCNT0 = 141; TIMSK |= (1<<TOIE0);
Gruß
Lutz
Lesezeichen