Hallo, bin der Neue. Musst mich grad mal anmelden, weil ich das gesuchte soeben fertig gestellt habe.
Habe gerade einen DCF77-Decoder fertig, der mit Timer und Interrupt arbeitet.
Er passt so eben in einen 2313. In den Compiler-Optionen muss der HW-Stack auf 22 gestellt werden, sonst passen die Variablen nicht mehr ins RAM.
Ich habe nur die Demo von Bascom, deswegen die Code-Ökonomie.
Der Signalausgang vom DCF77-Empfänger hängt an INT0.
Das Display hängt im 4-Bit-Modus am Port.
Hier die Ausgabe mit kontrolle der Sekundenzahl unten in der Ecke. Bild hier
Ich hoffe ihr werdet schlau draus.
Das DCF77-Signal ist einfach kodiert. Man muss die Länge der Impulse messen. Eine 1 ist 200ms lang, eine 0 100ms. Die Daten sind im BCD kodiert. Ab der 20. Sekunde (von 0 an gezählt) beginnt die Zeitangabe. Sekunde 20 ist immer 1, dann die Minuten. Man nimmt nicht alle 8 Bit, sondern nur soviel wie notwendig. Es gibt ja nur 60 min oder 7 Wochentage.
Ich habe die Impulse mit einem Timer und einem Zähler gemessen und reagiere per Interrupt auf die Impulse vom Funkempfänger. Mit steigender oder fallender Flanke werden die Zähler ausgewertet und der Timer zurück gesetzt. Zur Speicherersparnis speichere ich nur 42 Impulse. Wenn die Minute um ist und eine lange Pause gemessen wird (59. Sekunde fehlt), dann prüfe ich die Validität (Anzahl der Sekunden und die 3 Prüfbits). Passt alles, gebe ich es auf Display aus. Man könnt im Fehlerfall einfach die Zeit manuell weiter zählen, aber dafür reicht der Platz nicht mehr.
Die Werte für die die Messung Pausen und Impulse habe ich experimentell ermittelt. Ich hatte keine Lust auf Rechnen und wollte mit Bascom spielen.
Später soll anstelle eines LCD die Zeit an einen anderen Controller übergeben werden.
Lesezeichen