Hi, Ich hab mich jetzt ca. eine Stunde durch Bücher und das www gefühlt. Erfolglos. Daher die Frage: gibt es beim Timer1 (und generll) die Möglichkeit den Zähler manuell im Programm auf 0 zurük zu bringen? Ich möchte eine Stopuhrfunktion irgendwann zu einem beliebigen Zeitpunkt starten und auch anhalten (und dann eben den eventuell verbleibenden Rest im Timer löschen) Grüße, Dieter
Ich nehme an, es handelt sich um AVR-Megas. Es ist nicht sonderlich schön, aber die Timer können im Betrieb ganz normal beschrieben werden. Bei 16Bit Timern musst du nur auf die Reihenfolge High/Low beachten.
Hi Niels, Also ich meine nicht das OCR1AH/OCR1AL-Register (Vergleichsregister) sondern das Register im Zähler selber, also das, was der Timer hochzählt. Eben dafür brauche ich den Befehl bzw. den Namen des Registers. Ich nehme an, erst L-Byte schreiben, dann H-Byte. Danke :) Gruß, Dieter
Um die erste Zeile meines Postings aufzugreifen um eine entscheidene Information zu erhalten, die für die Beantwortung der Frage absolt Elementar ist: _Um welchen Kontroller handelt es sich?_
Dieterbln wrote: > Hi Niels, > > Also ich meine nicht das OCR1AH/OCR1AL-Register (Vergleichsregister) > sondern das Register im Zähler selber, also das, was der Timer > hochzählt. Eben dafür brauche ich den Befehl bzw. den Namen des > Registers. Ich nehme an, erst L-Byte schreiben, dann H-Byte. Danke :) > Das Register ist das TCCR1 Register und zumindest beim gcc brauchst du dich nicht um die Reihefolge kümmern, die macht der Compiler selber richtig. TCNT1 = 10835; Hol dir von Atmel das zu deinem Prozessor gehörende Datenblatt. Da sind alle Register drinnen. Im gcc heissen die entsprechenden Register völlig gleich wie im Datenblatt, mit nur einem Unterschied: Du brauchst dich nicht um High/Low Register (TCNT1H / TCNT1L) kümmern, sondern tust so, als ob das Register 16 Bit breit wäre (TCNT1)
Hoppala, stimmt. Es handelt sich um einen atmega8. Mein vorhaben ist: Zähler auf 0 zurücksetzen Zähler über TIMSK Starten Wenn Stopuhr fertig, dann Zähler über TIMSK stoppen und wieder auf die "zähler auf 0 setzen"-Funktion springen. Soweit alles fertig, es fehlt nur der Befehl zum Register zurücksetzen :)
Hast du denn kein Datenblatt von dem Mega8? Da ist der Name des Zählregisters mehr als einmal erwähnt.
1 | TCCNT1 = 0; |
sollte funktionieren.
Dieterbln wrote: > Zähler auf 0 zurücksetzen Wie schon von anderen erwähnt: TCNT1 ist das Zauber-Register > Zähler über TIMSK Starten Mit TIMSK kannst Du keinen Zähler starten... > Wenn Stopuhr fertig, dann Zähler über TIMSK stoppen und wieder auf die ...und auch nicht stoppen!
Okay, TIMSK steuert die Interrupte. Ich ging davon aus, dss, wenn ich den Interrupt für den Timer abschalte, der Timer nicht weiter läuft. Wie wäre der richtige Weg, wenn ich den Timer abschalten will (oder anhalten)? Danke für TCNT1! :)
TCCR1B über die ClockSel-Flags (CSxx). Wenn die auf 0 stehen, stoppt der Zähler...
Dieterbln wrote: > Okay, TIMSK steuert die Interrupte. Ich ging davon aus, dss, wenn ich > den Interrupt für den Timer abschalte, der Timer nicht weiter läuft. Wie > wäre der richtige Weg, wenn ich den Timer abschalten will (oder > anhalten)? Schau doch BITTE ins Datenblatt und/oder ins AVR-Tutorial bzw. AVR-GCC-Tutorial!
Dieterbln wrote: > Okay, TIMSK steuert die Interrupte. Ich ging davon aus, dss, wenn ich > den Interrupt für den Timer abschalte, der Timer nicht weiter läuft. Glücklicher Weise ist das nicht der Fall. Sonst müßte sich jeder PWM-Benutzer bei Dir bedanken, daß haufenweise unnütze Interrupts seine CPU zuballern. Timer müssen immer unabhängig von Interrupts weiter laufen! Nur so lassen sich auch auf den Zyklus genaue Zeitintervalle erzeugen (Frequenzmesser, RTC usw.). Peter
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.