PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer1 macht Zicken



jo_robot
21.06.2010, 16:53
Hallo alle zusammen.

Ich habe ein Problem mit timer1. Und zwar läuft dieser sofort nach dem "enablen" über. Mein Code sieht schematisch immer so aus:



Config Timer1 = Timer , Prescale = 1024 , Capture Edge = Falling , Noise Cancel = 1
On Timer1 Timer1_uberlauf ' Bei Überlauf springe zum Interrupt

timer1=preload
enable timer1


Timer1_uberlauf:
disable timer1
mache anweisungen
return



Und warum auch immer wird sofort nachdem der timer aktiviert wird, zum Überlauf gesprungen. Wäre dankbar wenn jemand eine Idee oder einen Hinweis hat, woran das liegen könnte

mfg Joachim

Jaecko
21.06.2010, 17:01
Wenn das das gesamte Programm sein soll: Logisch springt er da rein. Anderer Code ist ja nicht da. Bascom rattert den Code der Reihe nach von oben nach unten durch; irgendwann kommt er dann eben an der Stelle


Timer1_uberlauf:
disable timer1
mache anweisungen
return


vorbei.

Sauerbruch
21.06.2010, 17:06
Und wenn das nicht der ganze Code ist: "Capture Edge = Falling" und "Noise Cancel = 1" lassen vermuten, dass Du den Timer eigentlich als Zähler für externe Ereignisse nehmen möchtest. Hast Du es schonmal mit Config Timer1 = Counter versucht?

jo_robot
21.06.2010, 17:26
Also den gesamten Code kann man auf http://lars-projekt.de/?cmd=Software&id=1 ansehen. Er hat bei uns eigentlich nur die Funktion sobald eine Bedingung eintrifft, nach einer Zeit zu schauen, ob diese Bedingung immer noch erfüllt ist, und wenn dies der Fall ist die Motoren zu stoppen.

jo_robot
21.06.2010, 19:13
sodele, jetzt hab ich nochmal ne ganze weile rumprobiert ..

Ganz am Anfang vom Programm lass ich den Timer 3mal Überlaufen und mess mit der Stoppuhr ( :D ganz professionell ) die Zeit .. eigentlich sollten es 12s (3x4s) sein.
Ich hab einige Durchläufe (jedes Mal nen Reset durchgeführt) gestoppt, mit folgendem Ergebnis:

In den meisten Fällen läuft der Timer das erste Mal sofort über, ich stoppe also 8s. Manchmal stoppe ich jedoch 12s. Ergibt reichlich wenig Sinn .. dies trit sporadisch auf, meist nach 2-3 durchläufen mit 8s einer mit 12s ..


Außerdem glaub ich, dass der Timerwert meistens sofort "hochgesetzt " wird, nachdem ich ihn gesetzt habe. Denn wenn ich nach dem Interrrupt den Timerwert abfrage, so erhalte ich iwas zwischen 2000 und 3000 (durchaus logisch .. )

Wäre dankbar für andere Ideen ...

Das Noice Cancel / Capture Edge .. ist glaub nur für den Zählbetrieb notwendig oder? Das ist jetzt gelöscht (hat aber keine Auswirkungen gehabt) Wir brauchen schon den "richtigen" Timer.