Forum: Compiler & IDEs Timer richtig einstellen


von Jochen (Gast)


Lesenswert?

Hallo,

ich nutze einen 14,745600MHz Clock und möchte mit einem 16 Bit Timer 
einen Interrupt JEDE MILLISEKUNDE auslösen. Wie muss ich den Prescaler 
und das Compare-Register richtig einstellen?!!

Ich glaub ich hab nen dicken Knoten in meinem Gehirn, da ich einfach 
nicht drauf komme, wie ich den Timer einstellen muss.
Ich tu nun schon fast 2 Stunden rum und habe auch schon den AVR Timer 
Calculator 
(http://frank.circleofcurrent.com/cache/avrtimercalc.htm)angeschaut, 
aber ich komm einfach nicht drauf.

Darum bitte ich euch, helft mir weiter!!!

von Jan M. (mueschel)


Lesenswert?

Der Oszillator hat genau 14745,6 Takte pro Millisekunde.

Stellst du den Timer also auf Prescaler 1 und Compare auf 14745, dann 
erhälst du alle 14745+1 Takte einen Interrupt - also alle 0,9997 ms 
einen Interrupt.

Allgemein: Rechne aus, wieviele Takte von einem zum nächsten Interrupt 
vergehen sollen. Diese Zahl teilst du dann durch die möglichen 
Prescaler-Einstellungen, ziehst 1 ab und erhälst so den Wert für das 
Compare-Register für jede mögliche Prescaler-Einstellung. Natürlich wird 
nicht jede Einstellung funktionieren, weil z.B. der Wert für das 
Compare-Register nicht in 16bit passt oder das Ergebnis der Berechnung 
keine ganze Zahl (und Rundung vielleicht einen zu großen Fehler 
verursacht) ist.

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.