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.
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.
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.
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
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.
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.