Timer neu starten, atmega328p

Gast #4573564
Lesenswert?
• ▲
▼
Hallo,
ich habe eine Frage zum Timer0 des Atmega328p.
1
void TIMER_Init(void){
2
// Timer 0 konfigurieren
3
  TCCR0A = (1<<WGM01); // CTC Modus
4
  TCCR0B |= (1<<CS00)|(1<<CS01); // Prescaler 64
5
  OCR0A = 250-1;  // ((16000000/64)/1000) = 250
6
  TIMSK0 |= (1<<OCIE0A);  // Compare Interrupt erlauben
7
}
8

9
ISR (TIMER0_COMPA_vect){
10
...
11
}

Sobald der Zählwert 250 erreicht hat, wird der Interrupt ausgelöst. Wenn 
ich jetzt zwischendurch TCCR0B=0x00 setze, hört der Timer auf zu zählen. 
durch erneutes starten des Timers (TCCR0B |= (1<<CS00)|(1<<CS01) ) fängt 
dieser wieder an zu arbeiten. Aber bei welchem Zählwert startet dieser? 
Fängt der wieder bei 0 an zu zählen? Oder bei dem Wert, wo ich den Timer 
gestoppt habe?

Johannes
Gast #4573569
Lesenswert?
• ▲
▼
Hallo,

er stoppt wo du ihn gestoppt hast. Wenn er wieder bei 0 Null starten 
soll, dann mußte den Timercounter mit nullen.

Wenn du ihn im CTC Modus betreibst, dann kannste ihm auch den aktuellen 
Wert + 249 übergeben im ISR ohne zu nullen.

Zum stoppen reicht übrigens aus, wenn man die CS Bits nullt und wieder 
setzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren