Hallo, ich suche noch immer eine Lösung zur Anzeige des DCF-77-Signals mittels LCD und AVR. Eine Lösung in Basic wäre schön zur Übersicht, ich habe mir schon viele Artikel durchgelsen, weiss aber trotzdem nicht, wie ich mit Entschlüsselung anfangen soll, mit Zählern, Timer und Oszillatoren, mit diesem 25ms Signal usw. in der Theorie ja ganz leicht, aber mir fehlt der Startschuss. Evtl. gibt es ja heute schon andere Lösungen und Erfahrungen, ich hoffe auf Eure Mitarbeit. Ich nutze das Empfangsmodul mit Antenne von Conrad, die kleine Platine. Hier mal ein guter Link zu einer Funk-Uhr-Seite... http://www.heret.de/funkuhr/index.htm hat mir aber auch sehr viel weiter geholfen. Gruss A. Arndt
Hallo Wo hängst du denn genau fest ?? Beim erkennen der Signale 0,1 oder 0,2 Sekunden, dem Startzeichen oder bei der Auswertung ?? MFG Dieter
Hallo, habe mal ein fertiges Programm genommen, aber habe nur ein 1-sec-Blinken und eine Pause nach 59 Sek.. Ich habe auch nicht den Plan von diesen Geschichten wie z.B. Timer und Oszillator. Ich denke mir das mal : Ich nehme einen Oszillator, der macht immer 25ms Takte und da wird geschaut welche Bits im Signal sind und wielange der Zustand bleibt und dann wird dekodiert. Gruss A. Arndt
Hallo A. Arndt Das Problem bei fertigen Programmen ist halt, daß man nur sehr schwer nachvollziehen kann, was abgeht. Gerade wenn die Grundlagen fehlen ( Timer, Interrupts ) ist das fast unmöglich, hinter den Sinn des Programms zu kommen. Fang doch erstmal langsam an. Schritt für Schritt, dann lernst du eine Menge dabei. Erster Schritt: Das DCF Signal sendet ja jede Sekunde ein Bit 0,1 Sekunden High = low 0,2 Sekunden high = high 1,8 Sekunden low = Start Wenn du jetzt einen Interrupt mit einem Timer aufbaust, der alle 10 ms das Signal testet, ob es high oder low ist und dabei entsprechenden eine Variable mizählst, hast du sehr schnell die Infos, die du haben willst. So erhälst du z.B.: bei LOW einen Wert zwischen ungefähr 8 und 12 in der Variablen und bei HIGH 18 bis 22. Die Zeiten haben halt Toleranzen und du weißt ja nicht genau, wann der Zustand abgefragt wird. Ein Interrupt ist nur eine Unterbrechung deines laufendes Programm, bei dem ein bestimmter Code ausgeführt wird. Danach läuft dein normales Porgramm weiter. So long MFG Dieter
Hallo, Dieter, vielen Dank für Deine Starthilfe, ich werde mich jetzt da mal reinarbeiten, habe auch die Grundlagen studiert, welche Daten wo abgelegt sind, Minute usw., mit dem berühmten Kreismodell. Timer setzen mit Teiler auf 10ms ist auch kein Thema. Wenn ich mit Interrupts arbeite kann es doch aber zu Störungen mit anderen Abfragen kommen, z.B. beim DS1820. Aber ich werde mich erstmal auf die DCF-Geschichte stürze, es kann ja jeder AVR mit INT0 ausführen. Schön wäre das natürlich, wenn ein Chip die Daten bereithält, und andere AVRs daraufzugreifen können, z.B. I2C-RTC oder RS-485. Eigentlich müsste ich doch nur eine interne Zeit über Zähler und Timer mitlaufen lassen und diese z.B. alle 10 Minuten neu stellen. Wenn ich dann mit der Uhr herumlaufe und mal keinen Empfang habe läuft sie doch weiter. Trotzdem vielen herzlichen Dank für die Infos... Gruss A. Arndt
Das mit dem DS1820 ist ein wichtiger Punkt, der leider oft unter den Tisch gekehrt wird. "Unerklärliche" Fehler sind dann die Folge. Deshalb will ich das näher erläutern: 1. DS1820 Reset-Impuls: 480...960µs: Wenn Dein Interrupthandler also weniger als 480µs dauert, werden die max 960µs eingehalten und Du brauchst keine Interrupts zu sperren. 2. DS1820 Presence detect 15...60µs: 15µs sind etwas wenig für einen Ineterrupthandler, deshalb sollte bis zum Presence-Detect der Interrupt gesperrt werden. Da Dein Interrupt nur alle 10ms kommt, ist eine Verzögerung um max 60µs kein Problem. Zumal der Timer ja weiterläuft, d.h. beim nächsten Interrupt hohlst Du die Zeit wieder auf. 3. DS1820 Datenbit lesen bzw. schreiben 60µs: Es gilt das gleiche, wie beim Presence Detect, d.h. Du must die Interrupts sperren (für max 60µs) 4. Zusammenfassung: Der DS1820 und der Timerinterrupt kommen sich also nicht in die Quere, wenn Du, wie beschrieben, während der kritischen Zeiten die Interrupts sperrst. Vorausgesetzt, Dein DS1820-Treiber ist keine Black-Box und Du kannst an den entsprechenden Stellen im Kode "CLI" und "SEI" einfügen. Bei weiteren Interruptquellen oder zeitabhängigen Routinen mußt Du diese Betrachtungen natürlich wiederholen. Peter P.S.: Kann sein, daß mein Kode nicht gerade gut für Anfänger zu verstehen ist. Aber wenn Du keine Fragen dazu stellst, kann ich auch nichts näher erklären.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.