Hi Progger!
Bei Bascom 1.11.8.3 kommt bei mir der Fehler
ISR already defined TIM0_ISR
Wie gibts das?? Stimmt nicht
Hallo Leute,
der DCF-Empfang kann auf 2 Arten zu jeder Stunde gestartet werden.
Bei der Version mit Uhrenquarz:
... und ohne Uhrenquarz:Code: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
Bei dieser Version darf natürlich der Timer nicht disabled werden, weil dann die Softuhr stehen bleibt.Code: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: If Dcfstatus.5 = 0 Or Dcfstatus.6 = 0 Then Dcfstatus.7 = 1 Else Dcfstatus.7 = 0
Gruß Dirk
Hi Progger!
Bei Bascom 1.11.8.3 kommt bei mir der Fehler
ISR already defined TIM0_ISR
Wie gibts das?? Stimmt nicht
Wo kann ich die DCF77_Soft lib downloaden?
Ich bin vielleicht etwas LÄSTIG aber kann mir jemand genau sagen wie ich den DCF-Empfang in einem vorhandenen Code einbinden kann??
Mittlerweile stehen hier mehrere Codes und ich kenn mich einfach nicht mehr aus. Ich hätte gerne mal etwas Durchblick und da ich kein Masterprogrammer bin wäre es nett wenn jemand so Keimfrei wäre einen absolut lauffähigen dcf-Code mit der richtigen lib oder lbx hier reinzustellen.
Bussie!!!!
Hi bertl100,
wo hakt's denn?
Die "DCF77.lib" ist das Teil, dass ich als 1. Codeblock in meinem Beitrag vom 15.9. um 17.32 Uhr angegeben habe. Einfach alles da raus kopieren und als DCF77.lib in das LIB-Verzeichnis von Bascom tun! Das wars!
Dein eigenes Programm (muttu noch selbst schreiben!) zur Darstellung der Zeit und zum DCF-Empfang muss folgendes machen:
a) "DCF77_soft.bas" mit $include "DCF77_soft.bas" einbinden, wenn du keinen Uhrenquarz benutzt.
ODER
b) "DCF77.bas" mit $include "DCF77.bas" einbinden, wenn du einen Uhrenquarz benutzt.
[Beide Progs sind in meinem Beitrag vom 5.9., 17.38 Uhr]
c) Die ISR einbinden. Ein Beispiel dafür ist der 2. untere Codeblock in meinem Beitrag vom 5.9., 17.32 Uhr.
Dein Programm muss jetzt nur noch die BASCOM-Uhrzeit time$ und date$ ausgeben. Am 6.9., 20.26 Uhr habe ich Beispiele ergänzt, wie man den DCF-Decoder ein- und ausschaltet.
Alles klar?
Gruß Dirk
Jetzt ist es mir schon klarer, aber mich würde der Ablauf der .lib interessieren damit ich selbst auch Änderungen vornehmen kann.
1. Erfolgt die Synchronisation nur jede Stunde oder muss etwas permanent Abgearbeitet werden?(Irgendwo steht alle 25mS)
Wäre interessant, da in meiner Hauptschleife schon 2 Schnittstellen abgefragt werden müssen.
2. Bei Soft gibt es noch andere Unterfunktionen-----GETTIME---GETDATE........
Wozu brauch ich die?
3. Steht Datum und Zeit bei soft dann in den TIME und DATE Variablen?
Wenn ja, kann ich diese Variablen formatieren damit ich sie über SPI schicken kann?--Byteweise---Habe ein SPI Display mit Touch
Es ist mir schon klar, dass hier keiner eine detallierte Beschreibung
machen wird, aber ich hoffe ihr könnt mir in groben Zügen den Ablauf schildern.
MFG
Bertl
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:
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!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
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
@ Dirk
Ich finde es echt super von dir, dass du hier eine kleine Beschreibung für mich reinstellst
Ich bekam immer einen Compillierfehler.
Genau das ist es was ich brauche. Ich bekomme wahrscheinlich Morgen meine neue Eigenbauplatine. Dann werd ich es sicher zum laufen bringen.
Herzlichen Dank!!!!!!!
Ich habe jetzt dein Programm in meines integriert.
Schaus dir mal an. Ich lass die Zeit nur im Sekundentakt anzeigen da mein SPI Touch Display ziemlich viel zu Tun hätte.
Von der Struktur her müsste es nun Passen aber ich hab meine Platine noch nicht bekommen, ergo kann ich das Programm erst dann an der Hardware testen.
MFG
Bertl
Wie stell ich den Timer für meinem 14,745600 MHz Quarz ein?
Lesezeichen