-         

Ergebnis 1 bis 5 von 5

Thema: DCF77-Lib - Wie kann ich lediglich die Minuten nutzen ?

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556

    DCF77-Lib - Wie kann ich lediglich die Minuten nutzen ?

    Anzeige

    Ich nutze die mitgelieferte Bascom-Lib für DCF77, wie kann ich dort jeweils aus Zeit und Datum die Einzelvariablen herausziehen ?

    Also z.B. Time(dcf_sec) in unterteilen/ansprechen, damit ich z.B. nur die Minuten für eine Weitervararbeitung bekomme.

    Aus der Lib werde ich ehrlicherweise nicht wirklich schlau...
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Hi Andree,

    ich habe es so gelöst:
    Code:
    Dim Dcf_buff(7) As Byte
    
    Do...
    _sec = Makedec(dcf_buff(1)) : _min = Makedec(dcf_buff(2)) : _hour = Makedec(dcf_buff(3))
    _day = Makedec(dcf_buff(5)) : _month = Makedec(dcf_buff(6)) : _year = Makedec(dcf_buff(7))
    _weekday = Makedec(dcf_buff(4))
    loop..
    jetzt liegen alle Datum/Zeitvariablen in dem Dcf-Puffer. Damit kannst Du fleißig weiterarbeiten.
    Habe auch noch eine Routine für die Abspeicherung/Lesen aus einem DS1307, seit langem stabil laufend, da. Bei Interesse einfach melden

    Gruß MAT

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    Prima, das wäre echt super, denn ich habe die gleiche RTC noch in der Schublade....
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    43
    Beiträge
    379
    Moin!

    ich habe es bei mir so implementiert, dass zu einer bestimmten Zeit geschaut wird, ob die Uhr im Programm gleich mit der im DS1307 läuft. Das Stellen der Uhr im DS 1307 wird dann gemacht wenn ein gültiges DCF Signal empfangen wurde. In der Bascomhilfe findest Du zu den Statusbit auch eine nähere Erklärung.
    Code:
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Config DCF77 & DS1307
    Config Dcf77 = Pinb.6 , Timer = 1 , Inverted = 0 , Timer1sec = 1 , Update = 0 , Updatetime = 0 , Check = 1 , Debug = 0 , Gosub = Sectic               'Switchpower = 1 , Powerlevel = 1 , Powerpin = Pina.2
    Enable Interrupts
    Config Date = Dmy , Separator = .                                                                                                                     'deutsches Datumsformat
    Dim Dcf_buff(7) As Byte
    Dim Zeit_flag_set As Bit , Zeit_flag_get As Bit , Dcf77_set As Bit , Dcf_sig As Bit                                                                   'Variablen zum stellen der DS1307 Uhr und Systemuhr
    Dcf_sig = 0
    'Adresse der DS1307
    Ds1307w = &HD0                                              'Schreibadresse der RTC
    Ds1307r = &HD1 
    
    do...
    '------------------------------------------------------------------------------- Routine für die DCF77 Clock und stellen auslesen vom DS1307
    Locate 2 , 2 : Lcd Time$ ; "   " ; Lookupstr(_weekday , Wochentag) ; "  " ; Date$ ; " "
    Showpic 205 , 5 , Bant
    If Dcf_sig = 1 Then
       Showpic 225 , 5 , Bempf
       Else
       Showpic 225 , 5 , Bx_empf
    End If
    If Dcf_status.2 = 1 And _sec = 58 Then                                                                                                                'nach erfolgreichem Empfang eines kompl. DCF77 Telegrammes wird Merker gesetzt
         Set Dcf_sig
           If Zeit_flag_set = 0 Then
               Gosub Setdatum                                                                                                                             'Sub zum stellen des Datums über TWI - DS1307
               Gosub Setzeit                                                                                                                              ''Sub zum stellen des Uhrzeit über TWI - DS1307
           End If
    End If
    If _sec = 58 And Dcf_status.2 = 0 Then                                                                                                                'wird kein kompl.DCF77 Telegramm empfangen =>Merkerrücksetzung
         Reset Dcf_sig
    End If
    If Dcf_sig = 0 And Time$ = "04:00:00" Then
       Dcf77_set = 0                                                                                                                                      'Uhr wird täglich um 4 nach ds1307 gestellt wenn kein DCF-Signal vorhanden ist
       Gosub Getdatumzeit
    End If
    
    If Dcf77_set = 0 
    Then
       Gosub Getdatumzeit                                                                                                    
    Dcf77_set = 1
    End If
    If Tagzaehler_old <> _weekday Then                                                                                                                    'bei jeden neuen Tag wird die Uhrzeit-Lichtwerte-Temperatur für RolladenHoch/Runter geladen
       Tagzaehler_old = _weekday
       Tagzaehler = _weekday
       Eeprom_flag2 = Lookup(_weekday , Tag)                                                                                                              'Zuordnung Tag zu EEPROM-Daten
       Readeeprom Rolladen_long , Eeprom_flag2                                                                                                            'für den jeweilige Tag werden die Zeitdaten für Rolladensteuerung aus dem EEPROM geladen
       Readeeprom Lichtdata_eeprom(1) , &H1C
       Readeeprom Lichtdata_eeprom(2) , &H1E
    End If
    
    loop...
    '----------------------------subs
    Setzeit:
    'Einstellen der Zeit
    '_sec = Makebcd(_sec)
    '_min = Makebcd(_min)
    '_hour = Makebcd(_hour)
    'I2cstart
    'I2cwbyte Ds1307w
    'I2cwbyte 0
    'I2cwbyte _sec
    'I2cwbyte _min
    'I2cwbyte _hour
    'I2cstop
    
     Setdatum:
    'Einstellen der Tage
    '_day = Makebcd(_day)
    '_month = Makebcd(_month)
    '_year = Makebcd(_year)
    'I2cstart
    'I2cwbyte Ds1307w
    'I2cwbyte 3
    'I2cwbyte _weekday
    'I2cwbyte _day
    'I2cwbyte _month
    'I2cwbyte _year
    'I2cstop 
    
    'DS1307 auslesen
    Sub Uhrzeit
    I2cstart                                                    'TWI Start
    I2cwbyte Ds1307w                                            'Übergabe der Slaveadresse
    I2cwbyte 0                                                  'Registerzähler wird auf null gesetzt
    
    Getdatumzeit:
    I2cstart                                                    'Zweite Startkondition
    I2cwbyte Ds1307r                                            'Übergabe der Leseadresse
    I2crbyte _sec , Ack                                         'Auslesen des Sekundenregisters
    I2crbyte _min , Ack                                         'Auslesen des Minutenregisters
    I2crbyte _hour , Ack                                        'Auslesen des Stundenregisters
    I2crbyte _weekday , Ack
    I2crbyte _day , Ack                                         'Auslesen des Tagesregisters
    I2crbyte _month , Ack                                       'Auslesen des Monatsregisters
    I2crbyte _year , Nack                                       'Auslesen des Jahresregisters
    I2cstop                                                     'TWI Stoppkondition
    
    _sec = Makedec(_sec)                                        'Umwandlung des BCD-Codes
    _min = Makedec(_min)                                        'in eine Dezimalzahl
    _hour = Makedec(_hour)
    _year = Makedec(_year)
    _month = Makedec(_month)
    _weekday = Makedec(_weekday)
    _day = Makedec(_day)
    End Sub
    Die Übertragung über TWI habe ich etwas anders als gewohnt gemacht und habe jetzt schnell mal die Übertragung gebastelt. Sollte so laufen. Wenn nicht, dann schau mal ins Datenblatt vom ds1307.

    Gruß MAT

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Die Minuten stehen in _min

    Die DCF-Zeit-Variablen gehen ja 1 Minute (bzw ca 30 Sekunden) vor, da ja die Zeit für die nächste Minute übertragen wird.

    Ich lese stets 4 Mal pro Sekunde die RTC aus und stelle diese nur, wenn eine gütlige Zeit empfangen wurde.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

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