robodriver
09.02.2008, 13:53
Hallo leute,
ich tüftle hier momentan an etwas, wo ich net so ganz auf die korrekte Kinfiguration des Timers komme. Vielleicht könnt ihr mir ja weiter helfen.
Ich nutze ein Mega168.
Am Eingang T1 hängt ein Radencoder.
Nun brauche ich folgendes Szenario: Immer bei steigender Flanke an T1 soll der Counter um eins erhöht werden.
Wenn dann der Counter bei 255 ist, dann soll ein Interrupt ausgelöst werden.
Ich hab den Timer jetzt wie folgt konfiguriert:
Config Timer1 = Counter , Edge = Rising , Capture Edge = Rising , Compare A = Toggle
Compare1a = 255
On Oc1a Toggle_led
Enable Interrupts
Tcnt1l = 1
Aber diese Konfiguration muss irgendwie falsch sein.
Denn der Interrupt wird nie ausgelöst.
Zu Diagnose hab ich mir auf einem Display einfach mal den Tcnt1l-Wert anzeigen lassen. und dieser zählt einwandfrei hoch bis 255 und danach geht er auf 0.
Wenn ich den Oc1a-Pin mal mit dem Messgerät messe, dann beobachte ich folgendes: Der Pin ist anfangs auf 0V
Wenn der Counter dann auf 255 springt, geht der Pin auf 5V.
Allerdings bleibt er dann auf ewig auf 5V... Egal wie oft der Counter noch über die 255 springt.
Ich vermute mal das da auch irgendwo der Fehler liegt: Denn der Interrupt wird ja nur bei fallender Flanke ausgelöst...
Komm da irgendwie nimmer weiter...
Hoffe mir kann jemand helfen.
Danke schonmal im Voraus.
Gruß Robodriver
ich tüftle hier momentan an etwas, wo ich net so ganz auf die korrekte Kinfiguration des Timers komme. Vielleicht könnt ihr mir ja weiter helfen.
Ich nutze ein Mega168.
Am Eingang T1 hängt ein Radencoder.
Nun brauche ich folgendes Szenario: Immer bei steigender Flanke an T1 soll der Counter um eins erhöht werden.
Wenn dann der Counter bei 255 ist, dann soll ein Interrupt ausgelöst werden.
Ich hab den Timer jetzt wie folgt konfiguriert:
Config Timer1 = Counter , Edge = Rising , Capture Edge = Rising , Compare A = Toggle
Compare1a = 255
On Oc1a Toggle_led
Enable Interrupts
Tcnt1l = 1
Aber diese Konfiguration muss irgendwie falsch sein.
Denn der Interrupt wird nie ausgelöst.
Zu Diagnose hab ich mir auf einem Display einfach mal den Tcnt1l-Wert anzeigen lassen. und dieser zählt einwandfrei hoch bis 255 und danach geht er auf 0.
Wenn ich den Oc1a-Pin mal mit dem Messgerät messe, dann beobachte ich folgendes: Der Pin ist anfangs auf 0V
Wenn der Counter dann auf 255 springt, geht der Pin auf 5V.
Allerdings bleibt er dann auf ewig auf 5V... Egal wie oft der Counter noch über die 255 springt.
Ich vermute mal das da auch irgendwo der Fehler liegt: Denn der Interrupt wird ja nur bei fallender Flanke ausgelöst...
Komm da irgendwie nimmer weiter...
Hoffe mir kann jemand helfen.
Danke schonmal im Voraus.
Gruß Robodriver