Hi und hallo,
ich versuche gerade einen 16 Bit Timer ans Laufen zu bekommen. Dabei
soll eben ein Interrupt kommen, wenn der Timer abgelaufen ist. Das
passiert aber leider nicht.
Den 8 Bit Timer habe ich am Laufen. Bei dem 16 Bit Timer hänge ich eben.
Die Interrupt-Routine sollte die richtige sein. Vielleicht kan mir da ja
jemand auf die Sprünge helfen.
Vielen Dank schon einmal!
Uwe
Die Initialisierung für den Timer sieht wie folgt aus:
1 | void initTimer1(void)
|
2 | {
|
3 | OCR1AH= (unsigned char)(OCR_ONE>>8);
|
4 | OCR1AL= (unsigned char)(OCR_ONE);
|
5 |
|
6 | TIMSK1= 1<<OCIE1A;
|
7 | }
|
Die ISR folgt hier:
1 | ISR (TIMER1_COMPA_vect)
|
2 | {
|
3 | TCNT1H = (unsigned char)(TCNT_ONE>>8);
|
4 | TCNT1L = (unsigned char)(TCNT_ONE);
|
5 |
|
6 | ...mach was....
|
7 | }
|
In der main.c will ich den Timer dann wie folgt starten:
1 | TCNT1H = (unsigned char)(TCNT_ONE>>8);
|
2 | TCNT1L = (unsigned char)(TCNT_ONE);
|
3 | TCCR1B = (1<<CS12)|(1<<CS10);
|
Hier noch die Zählerwerte:
1 | #define OCR_ONE 0x3D08
|
2 | #define TCNT_ONE 0xC2F7
|