- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 35

Thema: DCF77 Funksignal auslesen

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Anzeige

    Powerstation Test
    Hallo Dirk,

    Ich habs jetzt so gemacht wie du gesagt hast:

    Code:
    get_dcf_bit();                          //Bit lesen
    
    if(dcf!=dcf2)				//Pegeländerung
    {
    
    	if(t>69 && t<85)
    	{
    	dcf='1';
    	}
    	
    	if(t>85 && t<100)
    	{
    	dcf='0';
    	}
    
    	if(t>172 && t<182)
    	{
    	dcf='1';
    	//start='1';
    	}
    
    	if(t>182 && t<192)
    	{
    	dcf='0';
    	//start='0';
    	}
    
    /*send("\r\n");
    itoa(t,time,10);
    send(time);
    send("\r\n");
    */
    
    t2=1;                                          //Daten senden
    t=0;
    }
    else						//Pegel gleich geblieben
    {
    t++;
    }
    
    dcf2=dcf;	                            //Pegel kopieren für nächste überprüfung
    Wenn ich das ganze laufen lasse kommt sowas dabei raus:

    Code:
    0123456789012345678901234567890123456789
    
    100111001001001010100110100100101010110100101101011001000100
    
    0123456789012345678901234567890123456789
    
    101001011010010010101001101001001010010100110100101100101101
    
    0123456789012345678901234567890123456789
    
    001010010100100101101101001011001011011010010000101001001011
    
    0123456789012345678901234567890123456789
    
    011010010110010110010101001101001001010100010000101001010110
    Eine exakte Uhrzeit kann ich daraus leider immer noch nicht ablesen. Außerdem empfange ich noch immer keine ENDEBIT, heißt also, wenn ich mir t mal ausgeben lasse, hab ich als größte Zahl meist nur etwas um die 115.

    Gruß
    cesupa

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von cesupa
    also, wenn ich mir t mal ausgeben lasse, hab ich als größte Zahl meist nur etwas um die 115.
    Gruß
    cesupa
    dann liegt deine Antenne falsch oder der interne Pullup im Atmel ist nicht gesetzt ?

    bei mir liegen je nach Kabellaenge 60-100 ms fuer 0 und 140-170ms fuer 1

    ich hab mein erstes DCF Programm am PC entwickelt ist leichter am Gameport die +5V abgreifen und das Signal per Joystickschalterabfrage

    Proggi LCC32, in C kann dann auch leichter nach GCC protiert werden, oder du nimmst eines der vielen proggis aus dem i-net

    peter dannegger microcontroller.net oder sprut oder .....

    ein programm gibt es auch bei wolfgang back

    google mal dcf77

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hab mir jetzt nochmal die Zeiten am invertierten Pin geben lassen, da kommen in ziemlich kurzen Abständen Zahlen zwischen 180 und 190. Aber ich glaube eher nicht, dass das die Endebits sind, da sie sonst in ziemlich kurzen Abständen erscheinen. Oder müssen die nach ca. jedem 5. "normalen" Wert erscheinen?

    Gruß
    cesupa

  4. #24
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Beispiel: DCF Decoder

    Hallo cesupa,

    wenn du ein paar Anregungen zur GCC-Programmierung eines DCF-Decoders suchst, schau dir 'mal meine Lösung für den RP6 an:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=34240

    Das ist ein Decoder komplett in C, den du gut für dich anpassen kannst.

    Gruß Dirk

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Okay, ich werd mir die ganzen codes bei Gelegenheit mal anschauen.

    Danke für eure tolle Hilfe.

    Schöne Grüße
    cesupa

  6. #26
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von cesupa
    Hallo SprinterSB,

    ich hab mir jetzt mal deinen Code ein wenig angeschaut und hab gesehen, dass du das DCF-Signal alle 10ms einliest. Aber mir ist noch nicht ganz so klar was du mit dem Signal danach machst? Ich hab das Signal jetzt auch mal aus einer ISR heraus alle 10ms eingelesen und mir über RS232 ausgeben lassen. Dabei kam folgendes raus:
    [...]
    Wie man sieht, sind die doch eigentlich recht unterschiedlich. Eine Uhrzeit konnte ich aus den Bits auch noch nicht (vollständig) auslesen. Muss ich diese Bitfolgen noch irgendwie bearbeiten, um die korrekten Bits zu erhalten???

    Gruß
    cesupa
    Die bitfolge sieht nicht nach dcf aus, das alle 10ms abgetastet wurde.

    beachte.
    -- verwende eine schnelle UART ausgabe (irq-getrieben, wenn direkt in der isr ausgegeben werden soll) oder gib via fifo aus. beispiele hats im wiki. ansonsten bisz du nicht sicher, dass es 10ms sind.

    -- ist das signal wiklich ok oder evtl. gestört (tft, schaltneztteil, pc, empfangslage, ...)

    mein ansatz sst, anhand der möglichen bit-übergänge 00, 01, 10, 11 unterschiedliche aktionen zu machen.

    00 und 11 zählen i.w. nen zähler hoch, wobei auch überlängen berücksichtigt werder (mies signal, 59 sek.)

    bei 10/10 fängt n neues bit an bzw endet (je nach welches signal du nimmst)

    beim bitende wird die dauer ausgewertewt und bitanfang setzt zählrt zurück -- in groben zügen
    Disclaimer: none. Sue me.

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hallo nach langer Zeit,

    ich hab jetzt endlich wieder Lust & Laune gefunden, mich am DCF decodieren ranzuwagen und hab beim Auslesen des DCF Signals schon die ersten Erfolge verbuchen können. Hab das ganze jetzt über Interrupts gesteuert und mein DCF-Empfänger hängt jetzt an INT0 dran. Wenn ich mir das alles über RS232 ausgeben lasse siehts ganz gut aus:

    Code:
    START:  0  1  0  0  0  1  0  1  0  1  1  0  0  1  0  0  0  1  0  0  1  0  1  1  0  0  0  0  0  0  1  0  0  1  0  0  0  1  0  0  1  0  0  1  0  1  0  1  0  0  0  0  0  1  0  0  0  0  0 START:  0  0  1  0  1  0  0  1  0  1  0  0  0  1  1  0  0  1  0  0  1  0  0  1  0  0  0  0  1  0  1  1  0  1  0  1  0  1  0  0  1  0  0  1  0  1  0  1  0  0  0  0  0  1  0  0  0  0  0 START:  0  0  1  0  1  0  0  0  1  0  1  0  1  1  0  0  0  1  0  0  1  0  0  0  1  0  0  0  1  0  1  1  0  1  0  1  1  0  0  0  1  0  0  1  0  1  0  1  0  0  0  0  0  1  0  0  0  0  0 START:  0  0  0  1  1  0  1  1  0  1  0  1  0  0  0  0  0  1  0  0  1  1  0  0  1  0  0  0  0  0  1  1  0  1  0  1  0  1  0  0  1  0  0  1  0  1  0  1  0  0  0  0  0  1  0  0  0  0  0 START:  0  0  0  0  0  0  0  0  0  1  0  0  0  1  1  0  0  1  0  0  1  0  0  0  0  1  0  0  1  0  1  1  0  1  0  1  0  1  0  0  1  0  0  1  0  1  0  1  0  0  0  0  0  1  0  0  0  0  0
    So, jetzt muss ich mich nur noch ans eigentliche decodieren ranmachen und da hab ich auch schon eine Frage: Wie macht man das am besten? Ich hab mir schon überlegt, dass man die Bits in ein Array speichern könnte und dann Bit für Bit überprüft um dann daraus die Zeit zu ermitteln, aber das halte ich für sehr Zeitaufwendig und umständlich, da gibt es doch sicherlich eine elegantere Lösung?

    Gruß
    cesupa

  8. #28
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2007
    Beiträge
    27
    Zitat Zitat von cesupa
    So, jetzt muss ich mich nur noch ans eigentliche decodieren ranmachen und da hab ich auch schon eine Frage: Wie macht man das am besten? Ich hab mir schon überlegt, dass man die Bits in ein Array speichern könnte und dann Bit für Bit überprüft um dann daraus die Zeit zu ermitteln, aber das halte ich für sehr Zeitaufwendig und umständlich, da gibt es doch sicherlich eine elegantere Lösung?
    Gruß
    cesupa
    http://www.mikrocontroller.net/topic/25071
    http://www.mikrocontroller.net/topic/58769#new
    http://www.thomas-wedemeyer.de/elekt...k_06-05-16.zip

    entweder eine der LIB nehmen oder selber machen

  9. #29
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    ... und noch ne Implementierung...

    http://www.gjlay.de/pub/c-code/dcf77.html

    -- µC-unabhängiges C
    -- Fehlerkorrektur
    -- Soft-Clock (falls kein brauchbares DCF-Signal)
    Disclaimer: none. Sue me.

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hallo,

    ich hab da mal was zusammengeschustert, leider funktionierts noch nicht ganz ordentlich. Erstmal wollte ich mir nur die Minuten ausgeben lassen, aber meistens erhalte ich da Werte um die 80 Wenn ich mir die gemessenen Zeitabstände ausgeben lasse kommen da auch Werte zwischen 890 und 1100 raus, dabei müsste es doch so um die 800 und 900 rum liegen, oder? Jedenfalls haben auch ein paar Variationen nicht zum gewünschten Ergebnis geführt, eine korrekte Minutenanzeige hab ich bisher bloß 1, 2 mal hinbekommen. Ich glaube mal, dass mit meinem selbstgeschriebenen Timer was nicht stimmt, könnte einer von euch da mal einen Blick drüber werfen? Ich mach das ganze mit dem 8-Bit-Timer vom Atmega8 bei 16MHz, mit einem Interrupt, der jede ms ausgeführt werden soll, wird ein counter hochgezählt, der dann für die Messung des DCF-Signals verwendet wird. Wahrscheinlich läuft der counter nicht ordentlich...

    Gruß
    cesupa
    Angehängte Dateien Angehängte Dateien
    • Dateityp: zip dcf.zip (24,0 KB, 36x aufgerufen)

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress