Forum: Mikrocontroller und Digitale Elektronik Compare Value Berechnung


von Andreas M. (andy999mueller)


Lesenswert?

Hallo,

ich stehe vor dem Problem, dass ich immernoch nicht verstehe, wie ich 
den Compare-Wert(OCRnX) berechne und wie ich dabei den Prescaler 
verwende, um z.B eine Zeitschleife für 1 Sekunde zu schreiben.
Ich habe einen ATMega128 mit 16Mhz.
Es wäre echt super wenn ihr mir ein Rechenbeispielt geben könntet.

Hoffe auf eure Hilfe.



Gruß Andy

von Johannes M. (johnny-m)


Lesenswert?

Wo genau liegen die Probleme? Generelles Verständnis der Timer-Funktion?

Also:
Das Timer-Zählregister wird in jeder Periode des Taktsignals um eins 
erhöht. Der Prescaler kann genutzt werden, um den CPU-Takt in bestimmten 
Stufen herunterzuteilen. Bei 16 MHz kannst Du den Timer also auf diese 
Weise mit 16 MHz, 16 MHz/2, 16 MHz/8, 16 MHz/64, 16 MHz/256 und 16 
MHz/1024 versorgen. Wenn z.B. der Vorteiler 256 genutzt wird, dann wird 
der Timer mit 62,5 kHz getaktet (eben 16 MHz/256).

Zwischen zwei Erhöhungen vergeht also eine Zeit von 1/62500 s, also 16 
µs. Und jetzt musst Du noch überlegen, wie viele dieser Zählvorgänge Du 
brauchst, um die gewünschte Zeit zu erreichen.

Wenn Du möchtest, dass ein Compare-Ereignis pro Sekunde auftritt, musst 
Du schauen, wie oft z.B. o.g. 16 µs in eine Sekunde hineinpassen. In 
diesem Fall ist es ganz einfach, denn die Rechnung steht umgekehrt schon 
da. Es sind also 62500 Zählereignisse, nach denen das Compare-Ereignis 
auftreten soll.

Wann tritt das Compare-Ereignis auf? Der Komparator vergleicht ständig 
den Wert im Zählregister mit dem Compare-Wert. Wenn er Übereinstimmung 
(Gleichheit) feststellt, dann wird beim nächsten Takt das Compare-Flag 
gesetzt. Im Compare-Register muss also die gewünschte Zykluszahl minus 1 
stehen, damit das Compare-Ereignis präzise kommt.

von Andreas M. (andy999mueller)


Lesenswert?

es geht um das Verständnis, denn ich brauche für die Ansteuerung eines 
Servos ein Signal, dass 400µs lang ist.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

16.000.000 / 0,0004 = ????, dann hast Du deinen Teilerfaktor. Diesen 
kannst Du durch Kombinieren des Prescalers und des Timerwertes selbst 
erreichen, eventuell mit zusätzlichen Zählvariablen, die in der 
Interrupt-Service-Routine hochgezählt und verglichen werden.

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.