PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer1, 1 sekunden Takt, ungenau ?!



Roberto
30.12.2005, 10:43
Hallo Leute (Schon wieder ein Frage ;-) )

Ich probiere gerade mit Timer1 herum und möchte gerne einen 1Sekunden Takt zusammenbekommen, damit eine Variable, alle sekunden hochgezählt wird.


Das Grundgerüst schaut im Prinzip so aus:



Config Timer1 = Timer , Prescale = 256
On Timer1 Zeit
Enable Timer1
Enable Interrupts

do
Lcd B
Print x
loop
end


Zeit:
Load Timer1 , 31250
Incr B
Return



Aber die Sekunden sind leider nicht genau :-(
Nach ca. 3 Minuten, geht mir der Zähler schon ca. 1 sekunde hinten !

Was habe ich falsch gemacht ?

Habe einen 8Mhz Quarz

8000000/256(Prescaler) = 31250

Habe izwischendrinn noch eine Serielle Ausgabe .
Kann das den Timer1 beeinflussen?
Wird für die Serielle Ausgabe eigentlich ein Timer verwendet ?
(der vielleicht stört ?)

Das setzen von Timer1 auf " Load Timer1,31250" oder Timer1= 34286
(ist doch das gleiche ?),
wo muss ich das machen ?
Sehe das meist in der ISR....
Müsste man das nicht auch schon nach aktivieren von Timer1 machen ?


l.G. Roberto

PicNick
30.12.2005, 11:01
..Serielle Ausgabe . Kann das den Timer1 beeinflussen?
nööö. nicht wirklich.

..Serielle Ausgabe eigentlich ein Timer verwendet ?
nööö

..Load Timer1,31250" oder Timer1= 34286
Jacke wie Hose

..Müsste man ..schon nach aktivieren von Timer1 machen ?
woll. klaro, sonst rennt er beim ersten mal ja von null weg

Roberto
30.12.2005, 11:32
Hallo Robert

Passt mein Code jetzt eigentlich ?
Warum passt die Zeit nicht ?

PicNick
30.12.2005, 11:52
Du mußt wohl etwas länger zählen, denn 1 Event +/- ist zu wenig, um genau zu beurteilen. Dann (1 Tag ?) bekommst du einen % Fehler, der wahrscheinlich einfach auf den quarz zurückzuführen ist.
So oder so wär wichtig, den Zeitpunkt=0 genau mit dem Vergleichsinstrument abzustimmen.

Guy
30.12.2005, 12:14
Eine Sekunde bei 3 Minuten ist schon heftig. Das kann kaum der quarz sein.

Bis du sicher das der Controller mit dem quarz läuft, und nicht mit dem internen Oszillator

PicNick
30.12.2005, 12:25
Eine Sekunde bei 3 Minuten
Ist halt die Frage, wie die Meßmethode war.
Eine Sekunde kann sein 0,99 oder 0,000001

Roberto
30.12.2005, 13:05
Hallo

Ich glaube ich habe den Fehler gefunden :-)

Bei einem Unterprogramm ist mir das Return abhanden gekommen und hinter dieser war das ISR vom Timer.

Das erste Unterprogramm lief da bis zum Timer1-ISR durch und das ging sich vermutlich so ca. mit 1 Sekunde aus. (mit Waits..u.s.w.)

Return jetzt richtig gesetzt und es funktionier :-) :-)

So gehts einem ... ;-)

Dank für Eure Antworten :-)