- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Abfrage der Uhrzeit für Schaltvorgänge

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109

    Abfrage der Uhrzeit für Schaltvorgänge

    Anzeige

    Praxistest und DIY Projekte
    Einen schönen Sonntag euch allen!

    Ich bin dabei oder besser versuche eine Heizungssteuerung zu programmieren.

    Mit folgendem Code, den ich hier gefunden habe ist eine Uhr auf meinem Controller implementiert.

    Hierzu habe ich zwei Fragen:
    1) Was ist die '$lib "ds1307rtc.lib" und wo finde ich diese?
    2) In der Datumsanzeige sind sonderzeichen drin, die ich so nicht haben möchte. Wie und wo kann ich diese ändern (z.B. dass es so aussieht
    14-01-07).

    Neben den obigen Fragen habe ich noch eine weitere.
    Um Schaltvorgänge zu bestimmten Uhrzeiten zu realisieren muss ich in bestimmten Zeitintervallen die Uhrzeit abfragen. Z.B. Wenn später wie 22:00 dann ausschalten. Wenn später wie 06:00 dann einschalten. Wie macht man sowas am besten.

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Portd.2 , E = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
    Config Lcdbus = 4
    Config Lcdmode = Port
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    Cls
    
    
    $lib "mcsbyte.lbx"                 ' for smaller code
    '$lib "ds1307rtc.lib"                                        ' modified lib
    
    'address of ds1307
    Const Ds1307w = &HD0               ' Addresses of Ds1307 clock
    Const Ds1307r = &HD1
    
    Config Clock = User                ' this will dim the bytes automatic
    'dim other needed variables
    Dim Weekday As Byte
    'Locate 1 , 1
    'Lcd "DS1307"
    'Waitms 100
    ' assigning the time will call the SetTime routine
    Time$ = "23:22:30"                 ' to watch the day changing value
    Date$ = "13.01.07"                 ' 13 november 2002
    Cls
    Do
      Locate 1 , 1
      Lcd Date$ ;
      Locate 2 , 1
      Lcd Time$
      Waitms 500
    Loop
    
    End
    
    'called from ds1307clock.lib
    Getdatetime:
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 0                       ' start address in 1307
    
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307r                 ' send address
      I2crbyte _sec , Ack
      I2crbyte _min , Ack              ' MINUTES
      I2crbyte _hour , Ack             ' Hours
      I2crbyte Weekday , Ack           ' Day of Week
      I2crbyte _day , Ack              ' Day of Month
      I2crbyte _month , Ack            ' Month of Year
      I2crbyte _year , Nack            ' Year
      I2cstop
      _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
      _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Return
    
    Setdate:
      _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 4                       ' starting address in 1307
      I2cwbyte _day                    ' Send Data to SECONDS
      I2cwbyte _month                  ' MINUTES
      I2cwbyte _year                   ' Hours
      I2cstop
    Return
    
    Settime:
      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 0                       ' starting address in 1307
      I2cwbyte _sec                    ' Send Data to SECONDS
      I2cwbyte _min                    ' MINUTES
      I2cwbyte _hour                   ' Hours
      I2cstop
    Return
    Danke für die Hilfe an alle!

    Martin

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.10.2004
    Beiträge
    40
    Neben den obigen Fragen habe ich noch eine weitere.
    Um Schaltvorgänge zu bestimmten Uhrzeiten zu realisieren muss ich in bestimmten Zeitintervallen die Uhrzeit abfragen. Z.B. Wenn später wie 22:00 dann ausschalten. Wenn später wie 06:00 dann einschalten. Wie macht man sowas am besten.
    Code:
    if Stunde = 6
             if Minute=0
             if Sekunde =0
             then ...."Heizung ein"...
             wait 1 ' 1 Sekunde warten
    end if
    end if
    end if

    Wäre eine Möglichkeit

    mfg,MX3

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109

    Zeitüberwachung

    Danke für den Vorschlag

    Das ist auch die einzige Möglichkeit die mir einfällt

    Martin

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Die Lib kannst du, wenn du dich angemeldet hast, im Forum von Mscelec runterladen. Einfach in die Suchfunktion den Namen der Lib eintragen.
    MfG

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    in meiner Heizungsregelung benutze ich die laufende Minute am Tag, also 9:00 morgens ist dann 540. Der Brenner wird dann freigegeben, wenn die aktuelle Minute größer als 540 und er wird erst eingeschaltet, wenn noch einige andere Bedingungen zutreffen. In dem obigen Beispiel würde die Heizung überhaupt nicht eingeschaltet, wenn die Befehlszeile wegen eines Interrupts z.B. nicht genau um 6:00:00 ausgeführt wird. Du müsstest also zumindest fragen, ob die Zeit größer als Stunde 6 Minute 0 und Sekunde 0 ist. Ebenso wieder fürs Ausschalten. Ist aber Geschmacksache, mir erschien es mit der fortlaufenden Minute einfacher.

    Gruß Rolf

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von for_ro
    In dem obigen Beispiel würde die Heizung überhaupt nicht eingeschaltet, wenn die Befehlszeile wegen eines Interrupts z.B. nicht genau um 6:00:00 ausgeführt wird. Du müsstest also zumindest fragen, ob die Zeit größer als Stunde 6 Minute 0 und Sekunde 0 ist.
    Also wenn deine Interrupts so lange dauern, hast du nen ziemlichen Wurm in deinem Programm drin! Vor allem dann, wenn man bedenkt das so ein Mikrocontroller mehrere Millionen Operationen pro Sekunde durchführen kann.

    Grüße,
    Hanni
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Millionen klingt gut, aber alleine ein GetRC5 blockiert die Kiste für 150ms. Da sind schon die ersten Millionen weg.
    Na ja, mir ging's halt generell darum, dass ich nicht auf eine feste Zeit abfragen würde. Ich will ja schließlich die Heizung auch nicht nur um Punkt 6.00 Uhr laufen haben, sondern normalerweise zwischen 6.00 und 23.00 Uhr z.B. Und dann sollte auch die Abfrage so sein. Man kann ja mal versuchen, eine Abfrage mit Stunden und Minuten so zu machen, dass sie zwischen 6:30 und 22:30 an ist. Ist schon recht aufwendig.

    Gruß Rolf

Berechtigungen

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

Solar Speicher und Akkus Tests