Hallo, ich habe hier irgendwo einen Denkfehler. Ich möchte dass Timer0 jede Millisekunde aktiviert wird. Externer Takt: 8 MHz. Ich möchte den Comparemodus nutzen. Bei einem Prescaler von 64 sollte das den Vergleichswert von 125(-1) ergeben. Den Timer habe ich an sich am laufen. Ich toggle jedesmal 2 Ausgänge. Wenn ich nun aber das Oszi dranhänge, dann togglet der Ausgang nur alle 2 ms. Wo ist mein Denkfehler ? volatile uint16_t counter; int main() { int i; counter = 0; InitBoard(); while (1) { if (counter == 1) { counter = 0; PORTB ^= (1<<PB0); } } return 0; } void InitBoard(void) { // Timer0: Aufloesung 1 ms TCCR0 = (1<<WGM01); // CTC-Modus OCR0 = 125-1; // CompareValue // Prescaler: 64, Compare Value: 125 ==> 1 ms TCCR0 = ((1<<CS01) | (1<<CS00)); // Zaehlregister zuruecksetzen TCNT0 = 0; // Compare Interrupt aktivieren TIMSK |= (1<<OCIE0); sei(); PORTB = 0x01; DDRB = 0xff; } ISR (TIMER0_COMP_vect) { counter++; PORTB ^= (1<<PB1); }
TCCR0 = (1<<WGM01); // CTC-Modus TCCR0 = ((1<<CS01) | (1<<CS00)); merkst du was ?
Hau. 1000Dank. So was kann auch nur einem Blindfuchs wie mir passieren :-) Funzt
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.