Die Sommerzeit naht

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Moin.
      es gibt auch eine Version die das Eeprom auf dem Modul DS3231 nutzt . Alternativ kann man auch das EEprom vom Mikrocontroller nutzen.
      Das EEprom vom DS3231-Modul hat den Vorteil das man keine Fuse setzen muss, um ein löschen des EEproms zu verhindern.

      BASCOM-Quellcode

      1. On_sommer_winter:
      2. Gosub On Eeprom_read
      3. If _hour = 04 And Sw_flag <> 0 Then
      4. Sw_flag = 0
      5. Gosub On_eeprom_write
      6. End If
      7. If _day => 25 And _month = 3 And _hour = 02 And _weekday = 7 And Sw_flag = 0 Then
      8. Sw_flag = 1
      9. _hour = _hour + 1
      10. Gosub On_eeprom_write
      11. Gosub Settime
      12. End If
      13. If _day => 25 And _month = 10 And _hour = 03 And _weekday = 7 And Sw_flag = 0 Then
      14. _hour = _hour - 1
      15. Sw_flag = 1
      16. Gosub On_eeprom_write
      17. Gosub Settime
      18. End If
      19. '------------------ Eeprom write ------------------
      20. On_eeprom_write:
      21. I2cstart 'Start I2C
      22. I2cwbyte &HAE 'Sende Slave Adresse
      23. I2cwbyte &H01 'Sende Speicheradresse High
      24. I2cwbyte &H01 'Sende Speicheradresse LOw
      25. I2cwbyte Sw_flag 'Sende Wert
      26. I2cstop 'Stop I2C
      27. Waitms 10
      28. Return 'warte 10ms
      29. '------------------ Eeprom read ------------------
      30. On_eeprom_read:
      31. I2cstart 'Start I2C
      32. I2cwbyte &HAE 'sende Slave Adresse
      33. I2cwbyte &H01 'sende Speicheradresse High
      34. I2cwbyte &H01 'sende Speicheradresse Low
      35. I2cstart 'Start I2C
      36. I2cwbyte &HAF 'sende Slave Adresse +1 für Lesen
      37. I2crbyte Sw_flag , Nack 'lese Adresse vom EEprom
      38. I2cstop
      39. Waitms 10
      40. Return
      Alles anzeigen
      Versuch macht klug !
    • Darf ich nochmal nachhaken?
      Wenn man das flag zu Beginn der Sommerzeit auf =0 abfrägt und dann nach Addition der Stunde setzt, bei der Winterzeit auf =1 abfrägt und nach Abzug der Stunde auf =0 setzt, dann braucht man doch nicht die erste Abfrage in Zeile 3.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hi Cable und Interessierte,
      packst Du Deine Routine ins Lexikon oder soll ich das machen?

      Meine sieht nun so aus:

      BASCOM-Quellcode

      1. ' Dim So_wi_flag As Byte
      2. ' Dim Weekday As Byte
      3. ' Dim Zeit As String * 8
      4. ' Subroutine Sommer- u. Winterzeit setzen
      5. ' Vorlage: https://bascomforum.de/index.php?thread/408-die-sommerzeit-naht/&postID=4614#post4614
      6. So_wi_zeit:
      7. If _day < 25 Then
      8. So_wi_flag = 0
      9. Else
      10. Weekday = Dayofweek()
      11. ' Weekday = 6 -> Sonntag
      12. If _month = 3 And _hour = 02 And Weekday = 6 And So_wi_flag = 0 Then
      13. _hour = _hour + 1
      14. So_wi_flag = 1
      15. Gosub Settime
      16. ' Zeitausgabe aktualisieren
      17. Zeit = Time$
      18. End If
      19. If _month = 10 And _hour = 03 And Weekday = 6 And So_wi_flag = 0 Then
      20. _hour = _hour - 1
      21. So_wi_flag = 1
      22. Gosub Settime
      23. ' Zeitausgabe aktualisieren
      24. Zeit = Time$
      25. End If
      26. End If
      27. Return
      Alles anzeigen
      Ich arbeite mit einer DS1307.
      Der Wochentag des DS1307 wird von BASCOM nicht genutzt,
      kann aber mit der Funktion "Dayofweek()" ermittelt werden.
      Dabei ist der Wert "6" der Sonntag (Der Montag ist "0" ...)

      LG RoBue

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von RoBue ()

    • Ich beziehe mich auf die Lexikon-programme:
      sehe ich das richtig, das zum richtigen Umstellen das Programm auch an genau den Umstellterminen laufen muss? Läuft just zu der Stunde an dem Tag die Rtc im standby, wird die Umstellung verpasst.
      Das könnte man doch nur umgehen, wenn man überprüft, ob man sich im Sommerzeitbereich befindet, wenn ja nach dem flag schaut, ob die Stunde schon addiert wurde. Wenn nicht, dann nachholen und flag setzen.Ist man im Witerzeitraum, darf kein flag gesetzt sein, wenn doch, dann Stunde abziehen und flag löschen. Dieses Stundenändern muss dann zu jeder Zeit richtig gehen, also muss auf Überträge geachtet werden (neuer Tag dadurch?), oder man arbeitet mit sec_of_year oder was es da so gibt. Das Ganze ist dann nur mit einem dauerhaft gespeicherten flag möglich. Ist vielleicht dazu oft bei den DS1307 boards ein eram drauf?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------