Irgendwie kriege ich es nicht hin ein den Timer0 Overflow richtig zu benutzen mit einen Atmega8 funktionierte es. Mit mega16 nicht mehr. Ich habe jetzt das Programm auf den Timer0 reduziert und sehe den Fehler immer noch nicht. Der Timer zählt hoch bis 255 und fängt wieder von vorne an aber ISR(TIMER0_OVF_vect) wird nicht ausgeführt. Die Variablen lass ich am Display anzeigen. Am PB0 liegt ein Rechtecksignal von ca. 60 kHz an den der Timer auch zählt. Kann jemand bitte kurz drüberschauen. STK500, Quarz intern 8MHz schein alles in Ordnung eingestellt zu sein.
1 | #include <avr/io.h> |
2 | #include "lcd.h" |
3 | #include <avr/interrupt.h> |
4 | #include <stdlib.h> |
5 | |
6 | char Buffer[20]; |
7 | volatile unsigned char x = 0; |
8 | |
9 | ISR(TIMER0_OVF_vect) //Timer0 Interrupt |
10 | {
|
11 | x++; |
12 | }
|
13 | |
14 | int main(void) |
15 | {
|
16 | lcd_init(LCD_DISP_ON); |
17 | lcd_clrscr(); |
18 | |
19 | TCCR0 |= (1<<CS00 | 1<<CS01 | 1<<CS02); |
20 | TCNT0 = 0; |
21 | TIMSK |= (1 << TOIE0); |
22 | sei(); |
23 | |
24 | while(1) |
25 | {
|
26 | itoa( TCNT0, Buffer, 10 ); |
27 | lcd_gotoxy(0,0); |
28 | lcd_puts(Buffer); |
29 | |
30 | itoa( x, Buffer, 10 ); |
31 | lcd_gotoxy(0,2); |
32 | lcd_puts(Buffer); |
33 | }
|
34 | }
|