Re: Routine zur Decodierung des DCF77-Signals
Zitat:
Zitat von Wastl
...Für diejenigen, die es interessiert, habe ich den BASCOM-Source angehängt. Er sollte eigentlich so dokumentiert sein, dass es diesbezüglich keine Fragen geben sollte.
Ich habe genau das gleiche Problem und versuche gerade DCF77 mittels Bascom auf einem Mega16 dekodiert zu bekommen.
Aber wo ist denn nun der oben genannte Code ? Ich sehe ihn hier nicht und auch nichts zum Downloaden.
Ja bin ich denn blind? ](*,)
Die beiden Beispiele von Bascom helfen leider nur bedingt weiter, denn die Beispiele sind für ältere Prozessoren. Ein funktionierender Code für die Mega-Serie wäre SUPER!
Danke
Peter
Liste der Anhänge anzeigen (Anzahl: 1)
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.
HTH
Spunky
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Spunky,
Ich habe deinen Code heute mal auf meinem Testboard mit 90S8515 getestet. Da ich andere Belegung für Display und LED's habe und vor allen Dingen einen anderen Quarz, habe ich das Programm entsprechend mal geändert.
-Timerstartwert hinzugefügt, damit auch andere Quarzfrequenzen gehen.
-Umstellung der Interruptflanke weggelassen, da unnötig.
(gemessen wird doch von 1.Flanke (fallend oder steigend) bis 2.Flanke, somit hat man in einem Rutsch bei DCF-Eingang "Low" die Impuls und bei DCF Eingang "High" die Pausenzeit)
-Reset des Tifr weggelassen, wird doch automatisch gelöscht
-Sperrung der Interrupts weggelassen (ich verstehe den Sinn auch nicht)
Was mir noch aufgefallen ist, die Sekunden gehen nur bis 58 ?
Ansonsten funktioniert es auf meinem Testboard einwandfrei !
Ich hoffe, du hast nichts dagegen, das ich das geänderte Programm mal mit anfüge ?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt ne 59. Sekunde drin. Wenn die Pause etwa ne Sekunde und nicht 0,9 dauert, malt er ne 59 in die Sekunden.
Wenn es denn unbedingt in einen 2313 passen muß, wäre es nicht besser, Wochentag und Jahr wegzulassen und dafür eine Softuhr mit einzubauen ? Dann ist das Sekundenproblem vom Tisch.
Mein Empänger liefert manchmal Störimpulse und dann bekommen ich falsche Daten. Vielleicht kann ich die Puls/Pausen genauer messen und die Abfrage in ein Fenster packen und falsche Impulse ignorieren.
Wenn du dir die Impuls und Pausenzeiten ansiehst, wirst du feststellen, dass sie nur minimal differieren. (Bei mir: Impuls 0 = 110 - 120 ms / Impuls 1 = 260 - 270 ms) Pausenzeiten sind ja eh nur für den Minutenanfang wichtig. Und wenn du schlechten Empfang hast, kannst du das Datenpaket nur verwerfen, oder was meinst du mit "ignorieren" ?
Man kann ja auch als zusätzliche Kontrolle das gerade empfangene Paket + 1 Minute mit dem nächsten vergleichen und nur bei Gleichheit gelten lassen.
Der Speicher ist sowohl im SRAM als auch im FLASH bei etwa 98% Ausnutzung.
Beim Aufruf der Int0 OVF Routine brauchen die Register auch nicht gesichert werden, spart wieder FLASH !
Ich habe mich Anfang 2004 ausführlich mit dem DCF77 Signal beschäftigt und in dem Zusammenhang ein Tool geschrieben, um einerseits die Empfangsverhältnisse zu überprüfen und andererseits den Aufbau und Impulsverhältnisse zu demonstrieren.
Du kannst ja damit mal deine Empfangsverhältnisse überprüfen.
<sorry an die Mod's, das sollte eigendlich zu den Downloads, hat aber irgendwie nicht funktioniert>
Re: Routine zur Decodierung des DCF77-Signals
Hallo Leute,
ich bastel im mom auch an einer uhr ... dann lese ich ....
Zitat:
Zitat von Wastl
Hallo,
ich habe vor kurzem eine solche Applikation geschrieben.
Ausgangslage:
Board RN-Control 1.1 mit folgenden Erweiterungen:
- Standard-LCD mit 20 * 2 Zeichen
- DS1307, Real Time Clock, mit Lithium-Zelle (3V)
- DCF77-Modul von Conrad
Funktionsweise:
- Der RTC läuft mit der 3V-Zelle autonom, auch ohne Stromversorgung des Boards.
- Er (der RTC) generiert jede Sekunde einen Interrupt und gibt dem Controller die Möglichkeit, die Register auszulesen und die aktuelle Zeit auf dem LC-Display anzuzeigen
- Eine spezielle Routine liest auf Knopfdruck das DCF77-Signal ein und decodiert es
- Das DCF77- Signal wird auf seine Qualität geprüft und, falls ungenügend, mit dem Empfang neu begonnen. Die Decodierung ist ziemlich aufwändig, scheint aber zu funktionieren.
Für diejenigen, die es interessiert, habe ich den BASCOM-Source angehängt. Er sollte eigentlich so dokumentiert sein, dass es diesbezüglich keine Fragen geben sollte.
Gruss
Wastl
wo finde ich diesen bascom-source ??? oder hat einer diesen source und kann ihn mir mailen ??
grüße
mike