Hallo nochmal,
dein Timer stimmt leider noch nicht.
Jens K. schrieb:
> uint16_t timerCNT = 0;
volatile fehlt, sonst kriegt der Compiler das ändern in der ISR nicht
mit, bzw. er optimiert es, da er denkt, dass die Variable nie geändert
wird.
Jens K. schrieb:
> // Setup timer 1
> TCNT1 = 65478; // Preload
> TCCR1B |= (1<<CS11); // Prescaler 8
> TIMSK1 |= (1<<TOIE1); // Enable overflow interrupt
der Preload ist zwar gut gemeint, gilt aber leider nur bis zum ersten
Overflow, ab da zählt der Timer wieder schön von 0 hoch.
Jens K. schrieb:
> //Interrupt every 58µs
> ISR(TIMER1_OVF_vect)
> {
> timerCNT++;
> }
Du müsstest dann hier auch einen Preload machen.
Aber warum das? Setze dich mal mit dem CTC mode auseinander.
Dieser setzt den Timer beim erreichen der ISR automatisch auf 0 zurück.
Ein Beispiel:1 | TIMSK5 = (1 << OCIE5A);
|
2 | TCCR5B = (1 << CS51) | (1 << WGM52); //prescaler 8, CTC
|
3 | OCR5A = 58 * 2; //58us@16MHz
|
Aber eigentlich sollte mit einem richtigen Timer der Code klappen