Hallo WarChild,
mit dieser Timer-Einstellung kannst du einen Interrupt 200kHz (5us) erreichen:
Code:
// Timer 1 - creates an interupt every 5us (is free for your application!)
TCCR1A = (0 << COM1A1)
| (0 << COM1A0)
| (0 << COM1B1)
| (0 << COM1B0)
| (0 << FOC1A)
| (0 << FOC1B)
| (0 << WGM11)
| (0 << WGM10);
TCCR1B = (0 << ICNC1)
| (0 << ICES1)
| (0 << WGM13)
| (1 << WGM12)
| (0 << CS12)
| (1 << CS11)
| (0 << CS10);
OCR1A = 9; // about 200kHz (5us)
// Enable output compare A match interrupts:
TIMSK |= (1 << OCIE1A);
Die ISR sieht dann z.B. so aus:
Code:
ISR (TIMER1_COMPA_vect)
{
fast_timer++;
}
Erwarte aber nicht zu viel von dem Code! Da du eine 16-Bit-Variable genommen hast, läuft die schon nach 1/3 Sekunde über!
Zusätzlich belastet der Interrupt ordentlich: Der M32 hat gerade 80 Takte bis er schon wieder in die ISR gezwungen wird!
Was willst du mit einem so schnellen Zähler machen?
Gruß Dirk
Lesezeichen