Timer ATMEGA8

Gast #1055613
Lesenswert?

Hallo,
Habe eine Taktfrequenz von 8 MHz am ATMega 8 liegen. Ich möchte nun eine 
Funktion schreiben, der ich als Parameter einen Zeitwert ( ms) übergebe.

Ich möchte dieses mit dem Timer machen, da es eine ziemlich korrekte 
Zeit sein muss.

Ich habe nun gedacht für den Timer0:

TCCR0 |=(1<<CS00);        // Prescaler von 256

Somit habe ich ja 8 Mhz = 8000000 / 256 = 31250

D.h. ja, dass ich eigentlich nur noch bis 31250 zählen muss und dann 
einen Interrup auslösen kann ...
Gehe ich richtig vor?
Gast #1055710
Lesenswert?

Hi

Wenn du beim 8-Bit-Timer den Vorteiler 32 nimmst. bekommst du einen 
Overflow bei 1,024ms. Die 8MHz hören sich wie interner RC-Oszillator an. 
Der ist sowieso nicht so genau. Wenn du im Overflow-Interrupt eine 
Variable herunterzählst kannst du definierte Zeiten erzeugen.

MfG Spess
#1055714
Lesenswert?

Also wenn du z.B. eine Funktion "wait_ms(int ms)" schreiben willst würde 
ich das so machen.
Wenn du 8 MHz Takt hast würde ich erstmal gucken welcher Prescaler sich 
eignet um wirklich exakt auf 1 ms zu kommen. (1*10^-3)*(8*10^6) = 8000. 
Nun guckst du mit welchen Prescaler du das ganzzahlig teile kannst. Da 
würde ein Prescaler von 64 passen (8000/64 = 125). Somit reicht ein 8 
Bit Timer aus.

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