ATmega Timer im CTC Mode

OP #2179555
Lesenswert?

Hallo,

ich benutze einen ATmega1284P und lasse den Counter3 mit CPU-Takt/8 im 
CTC Mode laufen, der mir dann bei erreichen von OCR3A einen Interrupt 
auslöst.

Ich benutze einen externen 20MHz-Quartz und möchte den Interrupt im 
1kHz-Betrieb laufen lassen.

Meine Frage:

Muss ich jetzt OCR3A auf 2499 oder auf 2500 stellen?

Im Datenblatt steht, dass der Counter bei Erreichen von OCR3A auf 0 
gesetzt wird. Ich habe das jetzt so verstanden, dass ich OCR3A auf 2500 
stelle, damit der counter von 0 bis 2499 zählt und dann wieder bei 0 
beginnt, und ich somit einen Teiler von 8 * 2500 = 20000 erhalte, 
richtig?

Gruß
#2179588
Lesenswert?

> Im Datenblatt steht, dass der Counter bei Erreichen von OCR3A
> auf 0 gesetzt wird.

Ja, aber das ist ein eigenr Timerzyklus.

Du willst dass dein Timer für einmal rundherum zählen 2500 Timerzyklen 
braucht. Also musst du ihn von 0 bis 2499 zählen lassen.

An kleineren Zahlen wirds deutlicher.

Du willst den Timer 4 mal 'erhöhen' lassen, bis er einmal rum sein soll. 
Bei welchem Vergleichswert muss er dann auf 0 zurückgesetzt werden?
Bei 3, denn dann zählt der Timer

0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3

das macht 4 Erhöhungen, bis man einmal von 2 ausgehend wieder bei 2 
landet.

0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3

      |  |
      ----
       1
         |  |
         ----
          2
            |  |
            ----
             3
               |  |
               ----
                4


d.h. den Wert, den du als Vergleichswert vorgibst, den erreicht der 
Timer auch tatsächlich und erst im nächsten Zählzyklus wird der Timer 
dann auf 0 gesetzt. Die Prüfung auf Compare Match findet also vor dem 
Erhöhen statt.

Dein Vergleichsert muss 2499 sein.

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