www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8-Timer1 (16bit) scheint nur bis 256 zu zählen


Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin soeben dabei, ein Kapazitätsmeßgerät zu programmieren, um den 
Umgang mit dem Timer und dem LCD zu erlernen. Dank des super Tutorials 
(großes Lob an den/die Ersteller!) funktioniert das meiste recht gut, 
allerdings habe ich nun doch ein kleines Timer-Problem. Vielleicht kann 
mir von Euch dazu jemand einen Tip geben...?

Das Prinzip der Messung ist einfach, hab's mir von hier abgeschaut: 
http://www.elexs.de/radio4.htm
Also habe ich eine 1-Sekunden-Warteschleife gemacht und lasse den Zähler 
1 des Mega8 die Flanken des anliegenden Signals zählen - eigentlich 
nicht schwer.

Allerdings: Es scheint, als ob der Zähler1 nur bis 256 zählen würde 
(obwohl es ein 16 Bit Timer ist). Das High-Byte bleibt immer null. (Habe 
ich zumindest mit einer Testausgabe auf das LCD unmittelbar nach dem 
Einlesen der Werte gecheckt). Für Frequenzen höher als 256 Hz liefert 
das Programm bisher nur Müll. Habe ich etwa den Timer falsch 
konfiguriert?

Pogrammcode ist angehängt. Die restlichen Programmteile bitte nicht 
kommentieren - wie gesagt: ist noch nicht fertig ;-)

Danke!
lg, Nino.

Autor: 1.8T-Passat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere mal, erst das Low-Byte (TCNT1L) und dann das High-Byte (TCNT1H) 
auszulesen. Dies ist bei manchen 16-Bit Werten sehr wichtig. Und im 
Datenblatt ist die Reihenfolge auch als Beispiel aufgeführt.

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  1.8T-Passat,

danke für die rasche Antwort. Du hast recht - das war das Problem und 
jetzt funktioniert es!

Ich habe zwar im Datenblatt nachgesehen, aber die wichtige Info ist mir 
entgangen...

Nochmal danke!
lg, Nino.

Autor: Florian Pfanner (db1pf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also beim schnellen durchschauen ist mir aufgefallen, dass du erst das 
HIGH- und dann das LOW-Register vom Timer ausließt.
Das Funktioniert so nicht, denn du ließt nicht direkt das HIGH-Register 
sondern statt dessen ein Temporärers Register. Wenn du das LOW-Byte 
ließt, wird automatisch das HIGH-Byte in das Temp-Register transferiert 
und wenn du anschließend das HIGH-Register auslesen willst kommt der 
Wert vom Temp-Register. Beim schreiben ists genau anderst rum. Also erst 
HIGH- und dann LOW-Register beschreiben.
Das mag zwar jetzt etwas komisch erscheinen, aber im Datenblatt ists so 
beschrieben. Es macht auch Sinn, denn wenn du brauchst ja immer zwei 
Zugriffe, um das komplette Register auszulesen. Wenn jetzt aber zwischen 
den beiden Zugriffen der Timer um eins erhöht wird (und im LOW-Byte 
einen Überlauf produziert) passen die beiden Werte nicht mehr zusammen. 
So ist sichergestellt dass ein (beim lesen des LOW-Registers) 
tatsächlicher Inhalt gelesen werden kann.

Hoffe ich konnte helfen,
Grüße,
Florian

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

danke für die ausführliche Antwort. Mit dieser Beschreibung kann ich mir 
gleich viel mehr darunter vorstellen und wenn ich eine Vorstellung habe, 
dann kann ich mir diese Sachen auch leichter merken!

Großes Lob für die klare, leicht verständliche Formulierung!
lg, Nino.

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.