Hallo WarChild,
mit dieser Timer-Einstellung kannst du einen Interrupt 200kHz (5us) erreichen:
Die ISR sieht dann z.B. so aus: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);
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!Code:ISR (TIMER1_COMPA_vect) { fast_timer++; }
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







Zitieren

Lesezeichen