www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Timer1 manuell zurücksetzen


Autor: Dieterbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dieterbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?_

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Dieterbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 
:)

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du denn kein Datenblatt von dem Mega8? Da ist der Name des 
Zählregisters mehr als einmal erwähnt.
TCCNT1 = 0;

sollte funktionieren.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Dieterbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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! :)

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1B über die ClockSel-Flags (CSxx). Wenn die auf 0 stehen, stoppt der 
Zähler...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.