Hallo Bertl,
der DCF-Empfang (bzw. die Decodierung) in der DCF77.lib erfolgt NUR, wenn du das willst.
Mit Dcfstatus.7 = 0 schaltest du ihn AUS und mit Dcfstatus.7 = 1 EIN.
Das kannst du z.B. jede volle Stunde machen (siehe mein Beitrag hier am 6.9., 20.26 Uhr!). Oder wann du willst.
Die DCF77.lib braucht einen Timer und muss alle 25ms aufgerufen werden. Schau dir die DCF77_soft.bas und DCF77.bas an! In diesen Progs, die du in dein Programm - wie gesagt - mit $include einbinden kannst, wird der Timer dafür definiert. Du brauchst dich darum nicht zu kümmern. Die ISR kannst du auch so übernehmen, wie ich sie gepostet hatte.
Dein Prog sieht also z.B. so aus:
Code:
'Deine Definitionen
$include "DCF77.bas" 'Ein Uhrenquarz vorhanden!
Do
Gosub Anzeige_der_BASCOM_Zeit 'Selbst schreiben!
If _min = 0 And Dcfstatus.7 = 0 Then '1x pro Stunde:
Dcfstatus.5 = 0 'Zeit inaktuell
Dcfstatus.6 = 0 'Datum inaktuell
End If
'Wenn Uhr oder Datum inaktuell, dann nach DCF stellen:
'Timer0 ist nur aktiv, solange DCF-Empfang läuft!!!
If Dcfstatus.5 = 0 Or Dcfstatus.6 = 0 Then
Dcfstatus.7 = 1
Enable Timer0
Else
Dcfstatus.7 = 0
Disable Timer0
End If
'Hier noch andere wichtige Dinge!
Loop
End
'Nur nötig OHNE Uhrenquarz!!!
'Getdatetime: 'Nicht genutzt!
'Setdate:
'Settime:
'Return
'ISR - Interrupt Routine DCF77
Tim0_isr:
Timer0 = Startwert
Call Dcf77
Return
Anzeige_der_BASCOM_Zeit:
'Anzeige der Zeitvariablen!
Return
Das Unterprogramm "Anzeige_der_BASCOM_Zeit" muss nur die BASCOM-Variablen für die Zeit, also _hour, _min, _sec, ... auf dem LCD oder mit Print auf der RS232 ausgeben. Das schaffst du locker!
Wenn du KEINEN Uhrenquarz hast, nimmst du die DCF77_soft.bas anstelle von DCF77.bas, in der ISR machst du aus jeder 0 eine 2. Vor den Befehlen Getdatetime ... machst du 4x das ' weg und entfernst Enable Timer0 und Disable Timer0.
Alles klar?
Muss funktionieren! Sonst: Bau 'mal alles so zusammen, wie du meinst und poste dein Prog dann hier, dann kann man besser was dazu sagen!
Gruß Dirk
Lesezeichen