Gast
#1309943
Hallo Leute,
bin ein GCC noob und ich habe ein Problem, wenn ich Timer 0 und Timer 2
simultan initialisiere.
Ich moechte Timer 0 und 2 simultan etwas rechnen lassen und konfiguriere
sie als compare interrupts:
//Timer 0 und Timer 2 konfigurieren
TCCR0 = (1<<WGM01) | (1<<CS01);
OCR0 = 2;
TCCR2 = (1<<WGM21) | (1<<CS21);
OCR2 = 2;
//Compare Interrupts 0 und 2 aktivieren
TIMSK = (1<<OCIE0) | (1 << OCIE2);
Die Interrupt-Routinen inkrementeiren lediglich jeweils einen Integer:
ISR(TIMER0_COMP_vect)
{
i++;
}
ISR(TIMER2_COMP_vect)
{
j++;
}
In meiner main gebe ich in einer Schleife die Werte von i und j auf
meinem LCD aus:
for(;;) {
set_cursor(0, 2);
itoa(i,LcdBuffer,10);
lcd_string(LcdBuffer);//lcd_string(" ");
set_cursor(0, 3);
itoa(j,LcdBuffer,10);
lcd_string(LcdBuffer);//lcd_string(" ");
}
Das Merkwuerdige ist, dass j staendig inkrementiert wird, aber i nicht;
i hat permanent den Wert 0.
Und jetzt kommt's: wenn ich die Kommentare lcd_string(" "); nach der
Ausgabe von i und j wieder in den Quellcode reinnehme, wird die
Interrupt-Routine des Timers 0 EINMAL ausgefuehrt, denn i nimmt ab dann
konstant den Wert 1 an.
Kann mir jemand erklaeren, womit das zu tun hat? Warum wird Timer0 nicht
korrekt ausgefuehrt? Die main.c befindet sich im Anhang.
Vielen Dank im Voraus und schoene Gruesse,
Thomas