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
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.
es geht um das Verständnis, denn ich brauche für die Ansteuerung eines Servos ein Signal, dass 400µs lang ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.