- LiTime Speicher und Akkus         
Seite 1 von 21 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 204

Thema: Library für DCF77 Dekodierung

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282

    Library für DCF77 Dekodierung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Da ich jetzt schon öfter in meine Projekte eine Funkuhr eingesetzt habe und nicht jedes mal ellenlange Codes einfügen wollte,
    habe ich mich entschlossen, das ganze mit einer Library zu vereinfachen.
    Das wichtigste dabei war, jeden beliebigen Pin benutzen zu können und auch jeden beliebigen Timer.
    Falls es jemand gebrauchen kann, die Library liegt zusammen mit einem Beispielprogramm im Download.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277
    Hallo,

    da der Downloadbereich sicher weniger frequentiert wird, als dieses Forum auch an dieser Stelle meinen herzlichen Dank für die Library. Funktioniert bestens. Ein paar Anregungen/Anmerkungen habe ich in einem PDF zusammengefasst. Auch eine kleine Modifikation mit Beispielprogrammen ist enthalten (als ZIP). Siehe auch Kommentar im Downloadbereich.

    Download der Anmerkungen:

    Edit von radbruch (24.01.2018): Link führt zu agressiver Werbung:
    www.henrik-reimers.de/control/Downloads/dcf77_anmerkungen.zip

    Viele Grüße
    Henrik
    Geändert von radbruch (24.01.2018 um 19:43 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    Hallo,

    Was muss ich ändern um die Lib mit dem Mega128 zu verwenden?

    MFG

    Bertl

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    Habs im Datenblatt gerade gefunden.
    Die entsprechenden I/O Adressen sind im Datenblatt immer ganz hinten.

    MFG

    Bertl

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277
    Zitat Zitat von bertl100
    Habs im Datenblatt gerade gefunden.
    Die entsprechenden I/O Adressen sind im Datenblatt immer ganz hinten.
    Bingo! . Ich habe in meine Tabelle nur bereits selbst getestete Controller aufgenommen, den Mega128 habe ich zwar da, aber noch nicht mit der Lib getestet.

    BTW: Beim Tiny45 geht natürlich nur SW-Uart bzw. I2C - es muss also auf der Emfangsseite auf Plausibilität geprüft werden.

    Grüße
    Henrik

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo Henrik,

    schön, dass dir meine Lib gefällt.
    Sie war in meinem speziellem Fall dafür gedacht, vorhandene Projekte mit einer Funkuhr nachzurüsten. (z.B. Jallousiesteuerung)
    Wobei es natürlich nicht nötig ist, die Softuhr permanent mit der Funkuhr zu synchronisieren.
    Ich lasse 1x pro Tag die Softuhr stellen, sodass der Timer IRQ die meiste Zeit nur ein paar µs für die Softuhr benötigt.
    Die 25 ms Intervall habe ich gewählt, um auch einen ungenutzten 8 Bit Timer verwenden zu können.
    Deine Modifikationen machen doch eigendlich nur Sinn, wenn die Hauptanwendung, das Anzeigen der aktuellen Uhrzeit ist.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.08.2004
    Beiträge
    5
    Hallo Alle,

    ich versuche die Lib mit einem Mega128 und einem DCF-Modul von Conrad zum Laufen zu bringen. Leider bisher ohne Erfolg. Der Pin für DCF sollte der richtige sein. Ich habe den Debug-mode eingestellt und kann die Impulse beobachten. Die Pausenzeiten sind ok. Der Zähler läuft auch im Sekundentakt bis 59. Allerdings ist die Impulslänge (bei 30) nicht im angegebenen Rahmen. Damit werden wohl auch Parity und Imp=OK nicht besser. Woran könnte das liegen?

    Viele Grüße Thomas

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo Thomas,

    es sieht so aus, als würdest du den falschen Ausgang benutzen ...
    So sollte es angeschlossen werden. (ohne externen Pullupwiderstand)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken modul.gif  

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

    Softclock ohne Quarz

    Hallo Leute,

    danke für die DCF-Library an W. Krüger, einfach Spitze!

    @Henrik:
    Eine Zusatzfrage zu deiner abgewandelten Library:
    Gibt es auch eine Möglichkeit, die DCF-Zeit in TIME$ und DATE$ zu übernehmen (zu einem Zeitpunkt, den ich im Prog bestimme) OHNE einen Quarz an TOSC anzuschließen?
    D.h. kriege ich die Softclock im M32 auch ohne Quarz z.B. mit einem 1Hz-Timerimpuls zum laufen und kann sie dann (z.B. jede halbe Stunde) mit der DCF-Zeit updaten?
    Oder könnte man in der Interruptroutine einen Zähler bis 40 einbauen, der bei jedem 40. Aufruf die Sek. um 1 hochzählt?

    Gruß Dirk

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    70
    Beiträge
    277

    Re: Softclock ohne Quarz

    Zitat Zitat von Dirk
    @Henrik:
    Eine Zusatzfrage zu deiner abgewandelten Library:
    Gibt es auch eine Möglichkeit, die DCF-Zeit in TIME$ und DATE$ zu übernehmen (zu einem Zeitpunkt, den ich im Prog bestimme) OHNE einen Quarz an TOSC anzuschließen?
    D.h. kriege ich die Softclock im M32 auch ohne Quarz z.B. mit einem 1Hz-Timerimpuls zum laufen und kann sie dann (z.B. jede halbe Stunde) mit der DCF-Zeit updaten?
    Oder könnte man in der Interruptroutine einen Zähler bis 40 einbauen, der bei jedem 40. Aufruf die Sek. um 1 hochzählt?
    Das geht im Prinzip alles. Nur eine Fleißaufgabe, für die mir im Moment die Zeit etwas fehlt.

    Um Date$ und Time$, die man dann etwas anders nennen muss, mit der Originallib von Albundy zu realisieren habe ich auf die Schnelle folgendes zusammengeschustert (der gewünschte "Universaleinsekundenzähler" ist auch drin):
    Code:
    '*******************************************************************************
    '*                    DEMO für DCF77 Library von W. Krueger                    *
    '*              leicht abgewandelt  von H.Reimers    02.04.2006                *
    '*******************************************************************************
    
    $regfile = "m32def.dat"
    $crystal = 7372800
    $baud = 9600
    
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    
    
    'Config Lcdpin = Pin , Db4 = Pd.4 , Db5 = Pd.5 , Db6 = Pd.6 , Db7 = Pd.7 , _
    'E = Pd.3 , Rs = Pd.2
    
    'Config Scl = Portc.0
    'Config Sda = Portc.1
    'Portc.0 = 1                                  'Pullup Widerstand ein
    'Portc.1 = 1                                  'Pullup Widerstand ein
    
    'I2cinit                                      'I2C Initialisierung
    
    '-------------------- Für I2C LCD und M32 Modul --------------------------------
    
    $lib "Lcd_i2c.lib"                           'i2c Treiber für das LCD
    Dim _lcd_e As Byte                           'Nötig für die Enable Auswahl
    Const Pcf8574_lcd = 112                      'Adresse des LCD-PCF
    Waitms 200
    _lcd_e = 128                                 'Für LCDs mit 1 Controller
    
    Config Scl = Portc.0
    Config Sda = Portc.1
    Portc.0 = 1                                  'Pullup Widerstand ein
    Portc.1 = 1                                  'Pullup Widerstand ein
    
    I2cinit                                      'I2C Initialisierung
    '-------------------------------------------------------------------------------
    
    Config Lcd = 16 * 4
    
    
    Config Adc = Single , Prescaler = Auto       'Für Analogtastatur
    
    Config Rc5 = Pinc.3                          'Benutzt Timer0  und INT0
                                                 'Für IR-Tastatur
    '-------------------------------------------------------------------------------
    $lib "dcf77_m32_A6.lib"
    $external Dcf77
    Declare Sub Dcf77
    
    Config Timer0 = Timer , Prescale = 1024      'Timer für 40Hz (25ms)
    Const Startwert = 76
    Timer0 = Startwert
    On Timer0 Tim0_isr                           'Überlauf alle 25ms
    Enable Interrupts
    Enable Timer0
    '-------------------------------------------------------------------------------
    'Config Pinc.2 = 1                            'Ausgang
    'Beep Alias Pinc.2                            'für Summer
    Config Pina.6 = Input                        'DCF 77 Eingang
    Set Porta.6                                  'Pullup einschalten
    
    Declare Sub Get_funkzeit()
    Declare Sub Make_clockstrings()
    
    Dim Status As Byte , Zaehler As Byte , Buffer As Byte , Impuls As Byte
    Dim H_sek As Byte , Sekunde As Byte , T_min As Byte , T_std As Byte
    Dim Minute As Byte , Stunde As Byte , Wotag As Byte , Tag As Byte
    Dim Monat As Byte , Jahr As Byte , Pari As Byte , Pau As Byte , Imp As Byte
    
    Dim Bcd_stunde As Byte
    Dim Bcd_minute As Byte
    Dim Bcd_sekunde As Byte
    Dim Time_s As String * 10
    
    Dim Bcd_tag As Byte
    Dim Bcd_monat As Byte
    Dim Bcd_jahr As Byte
    Dim Date_s As String * 15
    
    Dim Convert_strg As String * 10
    Dim Counter_25ms As Word
    Dim Counter_1sec As Word
    
    '******************** HAUPTPROGRAMM ********************************************
    Main:
    Cls
    Cursor Off
    
    Lcd "  DCF77 TEST"
    Wait 5
    Cls
    Do
    'Cls
    Call Get_funkzeit()
    Loop
    
    End
    
    '*************** ENDE HAUPTPROGRAMM ********************************************
    
    Sub Get_funkzeit()
    Call Make_clockstrings()
    'Cls
    Locate 1 , 2
    Lcd Time_s
    Print Time_s
    
    Locate 2 , 2
    If Status.3 = 1 And Status.4 = 1 Then Lcd Date_s
    
    Locate 4 , 2
    Lcd Bin(status)
    
    'Wait 1
    
    End Sub
    '-------------------------------------------------------------------------------
    Sub Make_clockstrings()
    
    Bcd_stunde = Makebcd(stunde)
    Bcd_minute = Makebcd(minute)
    Bcd_sekunde = Makebcd(sekunde)
    Bcd_tag = Makebcd(tag)
    Bcd_monat = Makebcd(monat)
    Bcd_jahr = Makebcd(jahr)
    
    Time_s = Bcd(bcd_stunde) + ":" + Bcd(bcd_minute) + ":" + Bcd(bcd_sekunde)
    Date_s = Lookupstr(wotag , Wochentag) + " " + Bcd(bcd_tag) + "." + _
    Bcd(bcd_monat) + ".20" + Bcd(bcd_jahr)
    
    End Sub
    '-------------------------------------------------------------------------------
    
    '------------------------ Interrupt Routine ------------------------------------
    
    Tim0_isr:
    Timer0 = Startwert
    
    Incr Counter_25ms
    If Counter_25ms > 39 Then
    Counter_25ms = 0
    Incr Counter_1sec
    End If
    
    Call Dcf77
    Return
    
    '------------------------ Daten für Wochentag ----------------------------------
    Wochentag:
    Data "  " , "Mo" , "Di" , "Mi" , "Do" , "Fr" , "Sa" , "So"
    Grüße
    Henrik

Seite 1 von 21 12311 ... LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus