mikrocontroller.net

Forum: Compiler & IDEs 16bit Timerwert in Integer speichern


Autor: TM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Habe grade ein kleines Problem mit der Byteverarbeitung von 16bit 
timerwerte.

Und zwar kann ich ja beim 16bit Timer (Timer1) des Mega8 die Timerwerte 
direkt aus TCNT1L und TCNT1H lesen. Doch wie bekomm ich diese jetzt 
zusammengefasst in eine Integer variable ?

Dies wird denk ich nicht gehen oder?:

zeitwert  = TCNT1L;
zeitwert |= TCNT1H<<8;

da beim zweiten der Lowbyte mit nach links gesetzt wird oder ?
Muss ich wirklich noch eine weitere Variable zum zwischenspeichern 
einfügen?
Und laut dem Wiki hier soll unbedingt zuerst der Lowbyte und dann der 
Highbyte ausgelesen werden! (Warum eigentlich ?)
Irgendwie steh ich da grad voll auf dem Schlauch.

Danke schon mal im Voraus

Gruß Tobias

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeitwert  = TCNT1;

Den Rest macht der Compiler für dich. Das gilt für alle 16-Bit-Register 
im AVR.

Oliver

Autor: TM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
Dankeschön ging ja super schnell!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dies wird denk ich nicht gehen oder?:
> zeitwert  = TCNT1L;
> zeitwert |= TCNT1H<<8;
>
> da beim zweiten der Lowbyte mit nach links gesetzt wird oder ?

TCNT1H hat nur ein Low-Byte, trotz "H" im  Namen.  Durch das Verschieben 
wird daraus erst ein High-Byte.

> Und laut dem Wiki hier soll unbedingt zuerst der Lowbyte und dann der
> Highbyte ausgelesen werden! (Warum eigentlich ?)

Weil das Timer-Register "double buffered" ist und das Lesen des 
High-Byte dem Prozessor signalisiert, daß man mit dem Lesen fertig ist. 
Wenn man es anders rum macht, bekommt man unter Umständen Werte, die 
eigentich nicht zusammengehören, weil der Timer ja weiterläuft, während 
man ihn ausliest.

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.