Hallo erstmal, ich habe da folgendes Problem ich möchte 2 Timer gleichzeitig auf einem ATmega128L laufen lassen. einen Timer0 8Bit Timer und Timer1 16 Bit Timer. Mein Problem ist nun das sich der Timer den ich zuerst initiallisiere immer aufhängt bzw nicht läuft. Programmiert habe ich das ganze so. Timer0: void hwclockRestart () { TCCR0 = (1 << CS02) | (1 << CS01)| (1 << CS00); TIMSK = (1 << TOIE0); TCNT0 = 256 - 72; } Timer1: void hwclockRestart16 () { TCCR1A = 0; TCCR1B = (1 << CS12) | (1 << CS10); TIMSK = (1 << TOIE1); TCNT1H = 0xEF; TCNT1L = 0x20; } SObald ich nun in meiner init Funktion die beiden Timer aufrufe hängt sich immer der auf den ich zuerst aufrufe. Bei hwclockRestart(); hwclockRestart16(); Halt der 8 Bit bei gedrehtem Aufruf der andere. Hat einer von euch eine Idee woran es liegen könnte vieleicht an den Interrupts das die sich Ineinader aufrufen wovon ich nicht ausgehe. ISR(TIMER0_OVF_vect) { cli(); TCNT0 = 256 - 72; sei(); } ISR(TIMER1_OVF_vect) { cli(); TCNT1H = 0xEF; TCNT1L = 0x20; sei(); } Danke im Vorraus Gruß Losti
Hans Klemer wrote: > ich habe da folgendes Problem ich möchte 2 Timer gleichzeitig auf einem > ATmega128L laufen lassen. einen Timer0 8Bit Timer und Timer1 16 Bit > Timer. Mein Problem ist nun das sich der Timer den ich zuerst > initiallisiere immer aufhängt bzw nicht läuft. Sie laufen schon beide, aber Du disablest immer den Interrupt des ersten:
1 | > TIMSK = (1 << TOIE0); |
2 | > .... |
3 | > TIMSK = (1 << TOIE1); |
Peter
Damit will dir Peter sagen du solltest besser schreiben: > TIMSK |= (1 << TOIE0); > .... > TIMSK |= (1 << TOIE1); Gruß
Super danke für eure Hilfe :). So ein dummer Fehler manchmal übersieht man einfach was :). Jetzt läuft es natürlich. Gruß Losti
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.