BASCOM - Timer stimmt nicht

Gast #2104416
Lesenswert?

Hallo,

bastle gerade an einem Küchentimer in BASCOM. Dieser stimmt aber nicht 
ganz. Ich nutze einen externen Quarz mit 22pf Kerkos. Fuses: Low 0xFC 
High 0xDF
Folgender Code nutze ich:
1
Config Timer1 = Timer , Prescale = 64
2
On Timer1 Zeit
3
Timer1 = 65411
4

5
Enable Timer1
6
Enable Interrupts
7

8
[...]
9

10
Zeit:
11
   Timer1 = 65411
12

13
   If Mseconds < 999 Then
14
      Mseconds = Mseconds + 1
15
   Else
16
      Mseconds = 0
17
      If Seconds < 59 Then
18
         Seconds = Seconds + 1
19
      Else
20
         Seconds = 0
21
         If Minutes < 59 Then
22
            Minutes = Minutes + 1
23
         Else
24
            Minutes = 0
25
         End If
26
      End If
27
   End If
28
Return
Timer0 kümmert sich noch ums Charlieplexing und in der Mainloop werden 
nur ein paar Taster abgefragt.

Bei 3min geht der Timer so um die 2-4 sek. nach
Gast #2104518
Lesenswert?

hab gerade herausgefunden, dass wenn ich Timer0 (fürs Charlieplexing) 
deaktivier, dass dann ich dann kein Unterschied von 2-4 herrscht. 
Anscheinend müssen sich die beiden Timer in die Quere kommen. Hat da 
jemand eine Lösung?
Gast #2104538
Lesenswert?

Warum prüfst du auf kleiner als? Z.B. kleiner als 59 Sekunden.

Du setzt ja bereits ab der tatsächlich 59 ten Sekunde den Sekundenzähler 
auf Null. Das dürfte erst nach der 59. Sekunde der Fall sein.

Zähle mal die Timerwerte jeweils hoch also +1 und prüfe dann auf 
zeitlichen Überlauf usw.
Gast #2104644
Lesenswert?

Hi

>Du setzt ja bereits ab der tatsächlich 59 ten Sekunde den Sekundenzähler
>auf Null. Das dürfte erst nach der 59. Sekunde der Fall sein.

Nein. Wenn <59 dann Increment.

@*__* (Gast)

Bist du 100%-ig sicher, das dein AVR mit dem Quarz läuft?

MfG Spess
Gast #2104672
Lesenswert?

*__* schrieb:
> möchte dieses kleine Projekt noch in BASCOM fertig bekommen und dann auf
> C umsteigen.

Da dacht' ich mir doch letzthin: welches Glück, die C-Gemeinde erhält 
einen Jünger dazu. lol

Da darfst Dich aber noch ganz schön anstrengen :D

Noch nicht daran gedacht, daß der Zähler während des Eintritts in die 
ISR weiter läuft ? Benötigt so ca. 50-60 Takte, bis der Zähler presettet 
wird, und das bei einem Prescaler von 64.

Ist also grenzwertig. Wenn dann noch vorher die Timer0-ISR ausgelöst hat 
und in Bearbeitung ist während Timer1 überläuft, so wird Timer1 eben 
erst nach Timer0 aufgerufen und später auf den Preset gesetzt.

Timer1 hat also länger Zeit bis er überläuft, und deswegen stimmt die 
Zeit nicht. Der Unfug mit der 1000stel Sekunde Auflösung für 'nen 
Eierwecker tut sein Übriges dazu.

Kannst Du vermeiden, indem Du den CTC Mode für Timer1 nimmst, Config 
Timer1 ..., Clear Timer = 1, Comparewert auf 124, wenn's weiter 1/1000 
sein sollen. Und nicht die Ovfl-, sondern die Output-Compare-ISR 
verwenden.

Dann klappt das auch mit dem Ei ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren