- LiFePO4 Speicher Test         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 55

Thema: dcf77-empfang mit bascom...?

  1. #11
    PeterK
    Gast

    Re: Routine zur Decodierung des DCF77-Signals

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2005
    Beiträge
    9
    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
    Angehängte Dateien Angehängte Dateien

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    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 ?
    Angehängte Dateien Angehängte Dateien

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2005
    Beiträge
    9
    Och, manchmal gehen die Sekunden sogar bis 64 *g* (schlechter Empfänger).
    Das mit 58 ist richtig, weil ich nur die Impulse anzeige. Die 59. Sekunde fehlt im DCF-Signal zur syncronisation der Minuten. (dmait man weiss, wann eine neue Minute beginnt)
    Man merkt auch die Verzögerung, wenn die 58 angezeigt wird.
    Ich hätte die 59. natürlich auch simulieren können.

    Natürlich darfst du den Code verbessern. Dafür habe ich ihn hier rein gestellt.

    Das mit den Flanken, kann sein, daß es vielleicht überflüssig ist. Hatte damit ein bisschen experiemtiert und der Code hat eine ordentliche Evolution durch gemacht. Da bleiben schon mal Reste zurück.

    Edit: Die Idee mit dem If in der Tim0_isr-Routine ist gut. Die Messung zwar nicht so präziese, aber ich denke ausreichend. Obwohl *grübel* so ganeu war meine ja auch nicht. *g*

    Spunky

  5. #15
    Hallo,
    mit dcf77_test.bas habe ich auch Erfolg (Mega!!
    Danke !

    Ich bin Neuling und werde den Code jetzt studieren !


    Mfg =D>

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2005
    Beiträge
    9
    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.

    Morgen werde ich den RAM-Bedarf optimieren. Dann kann ich ne Korrektur für verlorene Minuten einbauen. 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.

    Der Speicher ist sowohl im SRAM als auch im FLASH bei etwa 98% Ausnutzung.

    Spunky

  7. #17
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    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>
    Angehängte Dateien Angehängte Dateien

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2005
    Beiträge
    9
    Kurzer zwischenstatus: Code mächtig aufgeräumt und jetzt runter auf 72%
    Teste grade neuen Code, sind aber noch mächtig Bugs drin

    UPDATE: Böser Denkfehler. Klappt doch nicht so, wie ich dachte. Die Bits kommen einfach in der falschen Reihenfolge. Muss noch weiter forschen, wie ich den Code komprimiere.

    wenn du schlechten Empfang hast, kannst du das Datenpaket nur verwerfen
    Ich meinte mit Ignorieren, wenn ein Fehlimpus kommt, einfach Pause und Impuls weiter zählen lassen und nix verarbeiten. Nur wenn Impuls und Pause ins Raster passen, diese Auswerten und die beiden Zähler zurück setzen. Damit eliminiere ich zumindest die Spitzen.

    Spunky

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    20.02.2005
    Ort
    Hessen
    Beiträge
    20
    Hallo HUGCO,

    ich möchte dein projekt gene selbst nachbauen.
    Kannst du mir einen Schaltpaln geben?

  10. #20
    Gast

    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

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress