Forum: Mikrocontroller und Digitale Elektronik Timer neu starten, atmega328p


von Johannes (Gast)


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

von spess53 (Gast)


Lesenswert?

hI

>Aber bei welchem Zählwert startet dieser?

Bei dem du ihn gestoppt hast.

MfG Spess

von Devil-Elec (Gast)


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.

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
Noch kein Account? Hier anmelden.