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?
Ist denn das prinzip richtig? Will wie gesagt eine zeitfunktion haben. Damit ich nachher genau steuern kann, zb. displayschaltzeiten einhalten kann oder so
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
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.
TCCR0 |=(1<<CS00) | (1<<CS00); OCR1 = 125; wie scxhreib ich nun, dass bei dem vergleichswert ein interrupt ausgelöst wird?
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.