- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Uhr und Wochentag

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

    LiFePo4 Akku selber bauen - Video
    Habe jetz folgendes drin. Auf dem Display erscheint "0"

    Weekday = 7
    LCD Weekday

    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

    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 3
    I2cwbyte Weekday
    I2cwbyte _day
    I2cwbyte _month
    I2cwbyte _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

    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 3
    I2cwbyte Weekday
    I2cwbyte _day
    I2cwbyte _month
    I2cwbyte _year
    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

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... Setdate ist noch nicht ok. So sollte es sein:
    Code:
    Setdate: 
    _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) 
    I2cstart ' Generate start code 
    I2cwbyte Ds1307w ' send address 
    I2cwbyte 3 ' starting address in 1307 
    I2cwbyte Weekday ' Weekday
    I2cwbyte _day ' Send Data to SECONDS 
    I2cwbyte _month ' MINUTES 
    I2cwbyte _year ' Hours 
    I2cstop 
    Return
    Aus Getdatetime: müssen die Schreibbefehle wieder raus.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Ich habe gerade nochmal einen Versuch gestartet mit deinen Änderungen.

    Im Disply steht aber immer noch " Null"

    Ich poste nochmal meinen ganzen Code

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $hwstack = 256
    $swstack = 256
    $framesize = 256
    '***************************Config Schaltausgänge*******************************
    Config Portb = Output
      Brenner Alias Portb.3
      Pumpefb Alias Portb.4
      Pumpehk Alias Portb.5
    '**************************Def. allgemeiner Variabeln***************************
    Dim Tagnacht As Bit
    Dim Nachtbetrieb As Byte
    Dim Tagbetrieb As Byte
    Dim Tempmessstelle(8) As Single
    Dim Brennerstarts As Integer
    Dim Interrupt_brenner As Bit
    Dim Zeit_in_min As Integer
    Dim Kessel_max As Single
    Dim Kessel_min As Single
    Dim Kessel_grenz_max As Single
    Dim Kessel_grenz_min As Single
    Dim Delta_kessel As Single
    Dim Delta_vl_rl_fb As Single
    Dim Wassertemp As Bit
    Dim Aussentemp As Single
    Dim Pumpe_aus_nacht As Bit
    Dim Pumpe_aus_nacht_temp As Single
    Pumpe_aus_nacht = 0
    Pumpe_aus_nacht_temp = 29.0
    
    Aussentemp = 2.68
    
    Kessel_max = 57.0                                           '60.0
    Kessel_min = 40.0                                           '43.0
    Kessel_grenz_max = Kessel_max
    Kessel_grenz_min = Kessel_min
    
    Wassertemp = 1
    
    Brennerstarts = 0
    Interrupt_brenner = 0
    
    Nachtbetrieb = 22
    Tagbetrieb = 4
    
    Const Tagtemp_og = 21.8
    Const Tagtemp_ug = 21.6
    Const Nachttemp_og = 21.4
    Const Nachttemp_ug = 21.2
    
    '**************************Funktionen LCD-Display*******************************
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
    Config Lcdbus = 4
    Config Lcdmode = Port
    
    Dim ___lcdno As Byte
    
    ___lcdno = 0
     Initlcd
     Cursor Off
     Cls
    ___lcdno = 1
    Initlcd
    Cursor Off
    Cls
    '*******************************************************************************
    
    Config 1wire = Portc.1                                      'DS1820
    
    Match_rom Alias &H55
    Read_scratchpad Alias &HBE
    Start_conversion Alias &H44
    
    Innen Alias 0
    Vorlauf_fb Alias 1
    Rücklauf_fb Alias 2
    Vorlauf_hk Alias 3
    Kessel Alias 4
    
    Dim Read_temp As Integer
    Dim Sensor_ids(48) As Byte
    Dim Id As Byte
    Dim Offset As Byte
    Dim Ds_array(7) As Byte
    Dim Bruchteil As Single
    Dim Temperatur As Single
    Dim I As Integer
    '**********************************Config Servo*********************************
    
    
    
    
    '*************************Config Timer1*****************************************
    Config Timer1 = Timer , Prescale = 256                      '256                      '64       '256       'Konfiguriere Timer1
    Enable Timer1                                               'schalte den Timer1 ein
    On Timer1 Isr_von_timer1                                    'verzweige bei Timer1 überlauf zu   Isr_von_Timer1
    Enable Interrupts
    Timer1 = 51135                                              'Timer1 soll schon von 34285 wegzählen
    '***************************Config RTC******************************************
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
    Const Ds1307r = &HD1
    
    Config Clock = User                                         ' this will dim the bytes automatic
    Dim Weekday As Byte
    
    'Time$ = "01:50:00"                                          ' to watch the day changing value
    Date$ = "28.10.07"                                          ' erstmaliges stellen der Uhr
    Weekday = 7
    '***************************AD-Config*******************************************
    Config Adc = Single , Prescaler = Auto
    Dim Faktor As Single
    Dim Sp As Integer
    Faktor = 5.28 / 1023
    
    '***************************ID 1Wire configurieren******************************
    For Id = 1 To 40                                            'Einlesen der 5 Sensoren IDs (5*8 Byte)
       I = Id - 1
       Readeeprom Sensor_ids(id) , I
    Next Id
    '**************************Initialisierung**************************************
    
       Brenner = 0
       Pumpefb = 1
       Pumpehk = 1
    
    '**************************Hauptrogramm*****************************************
    Do
       Waitms 1000
       For Id = Innen To Kessel                                 'Kessel
          Offset = Id * 8
          Offset = Offset + 1                                   'Offset geht auf 1, 9, 17, 25 und 33
          1wreset                                               'hier wird der Temperaturwert eingelesen
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8                        '8 Byte ID wird übertragen
          1wwrite Read_scratchpad
          For I = 1 To 7                                        'nur bis 7, weil 8 und 9 uninteressant
             Ds_array(i) = 1wread()
          Next I
          Read_temp = Makeint(ds_array(1) , Ds_array(2))
          1wreset                                               'jetzt wird wieder die Konvertierung gestartet
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8
          1wwrite Start_conversion
          Shift Read_temp , Right
          If 127 < Read_temp Then Read_temp = Read_temp - 32768
          Bruchteil = 16 - Ds_array(7)
          Bruchteil = Bruchteil / 16
          Bruchteil = Bruchteil - 0.25
          Temperatur = Read_temp + Bruchteil
    
          If Temperatur >= -16.0 Then
            Tempmessstelle(id + 1) = Read_temp + Bruchteil      'Temperatur
            Tempmessstelle(id + 1) = Tempmessstelle(id + 1) - 0.1       'Korrektur Auf Termometer
          End If
           ___lcdno = 0
           Locate 1 , 2 : Lcd "BO-U RA-T KE-T VLB-T RLB-T"
          Select Case Id
          Case Innen:                                           '1
               Locate 2 , 7 : Lcd Fusing(tempmessstelle(1) , "#.#")
               Locate 2 , 11 : Lcd " "
          Case Kessel:                                          '2
              Locate 2 , 12 : Lcd Fusing(tempmessstelle(2) , "#.#")
              Locate 2 , 16 : Lcd " "
          Case Vorlauf_fb:                                      '3
              Locate 2 , 17 : Lcd Fusing(tempmessstelle(3) , "#.#")
              Locate 2 , 21 : Lcd "  "
          Case Rücklauf_fb:                                     '4
              Locate 2 , 23 : Lcd Fusing(tempmessstelle(4) , "#.#")
              Locate 2 , 27 : Lcd " "
          End Select
            Locate 2 , 6 : Lcd " "
          If Tempmessstelle(8) >= 0 Then
            Locate 2 , 2 : Lcd Fusing(tempmessstelle(8) , "#.##")
          Else
            Locate 2 , 1 : Lcd Fusing(tempmessstelle(8) , "#.#")
          End If
    
            ___lcdno = 1
    
          Locate 2 , 20
          Lcd Time$
          Locate 2 , 15 : Lcd "     "
          Select Case Id
          Case Vorlauf_hk:                                      '5
             Locate 1 , 1 : Lcd "Vl-hk " : Lcd Fusing(tempmessstelle(5) , "#.#")
             Locate 1 , 11 : Lcd "  "
          End Select
          'Locate 1 , 12 : Lcd "AU-T " : Lcd Fusing(tempmessstelle(7) , "#.##")
          Locate 1 , 12 : Lcd "AU-T " : Lcd Fusing(aussentemp , "#.##")
          Locate 1 , 21 : Lcd "        "
          Locate 2 , 1 : Lcd "Starts:"                          '"B-Start:     "
          Locate 2 , 9 : Lcd Brennerstarts                      'Brennerstarts
          Locate 2 , 16
          Lcd Weekday
         Cursor Off
       Next Id
    
       If _hour >= Nachtbetrieb Or _hour < Tagbetrieb Then      'Or _hour = 7 Or _hour = 8 Then
         Tagnacht = 0                                           'Nachteinstellung
       Else
         Tagnacht = 1                                           'Tageinstellung
       End If
    
       Gosub Ad_wandler
       Gosub Überwachung_kesseltemp                             'Aussentemp_mittel
       Gosub Schalterelais
       Gosub Aussentemp_mittel
       Gosub Kesselgrenzwert
       'Gosub Überwachung_pumpen
       If Wassertemp = 0 Then
         Gosub Überwachung_brauchwassertemp
       End If
      Loop
    End
    
    '*******************************Überwachung Brauchwassertemp********************
    Überwachung_brauchwassertemp:
       If Tempmessstelle(4) <= 42.0 Then
         Wassertemp = 0
         If Tempmessstelle(2) < 48.0 Then
           Brenner = 1
         End If
         If Tempmessstelle(2) > 58.0 Then
           Brenner = 0
         End If
         Pumpehk = 1
         Pumpefb = 0
       End If
       If Tempmessstelle(2) >= 50 Then
          Wassertemp = 1
       End If
    Return
    '*******************************Überwachung Pumpen******************************
    Überwachung_pumpen:
       If Tempmessstelle(2) < 29.0 Then
         Pumpefb = 0
       End If
       If Tempmessstelle(2) >= 32.0 Then
         Pumpefb = 1
       End If
       If Tempmessstelle(2) < 38.0 Then
         Pumpehk = 0
       End If
       If Tempmessstelle(2) >= 36.0 Then
         Pumpehk = 1
       End If
    Return
    '*******************************AD-Wandler**************************************
     Ad_wandler:
        Start Adc
        Sp = Getadc(0)
        Tempmessstelle(8) = Sp * Faktor
        'Tempmessstelle(8) = Tempmessstelle(8) - 0.35
        'Tempmessstelle(8) = 132.14 * Tempmessstelle(8)
        'Tempmessstelle(8) = Tempmessstelle(8) - 153.93          ' Boiler_temp unten
        Sp = Getadc(2)
        Tempmessstelle(7) = Sp * Faktor                         ' Außentemp
        'Sp = Getadc(2)
        'Tempmessstelle(6) = Sp * Faktor
     Return
                                                          '
    '**************************Überwachung Kesseltemp*******************************
    Überwachung_kesseltemp:
     If Tempmessstelle(2) >= Kessel_grenz_max Or Tempmessstelle(8) >= 1.52 Then
       Brenner = 0
       If Interrupt_brenner = 0 Then
         Brennerstarts = Brennerstarts + 1
         Interrupt_brenner = 1
       End If
     End If
    
     If Tempmessstelle(2) < Kessel_grenz_min And Tempmessstelle(8) <= 1.46 Then
       Brenner = 1
       Interrupt_brenner = 0
     End If
    Return
    '*************************Kesselgrenzwert bestimmen*****************************
    Kesselgrenzwert:
    If Aussentemp > 1.8 And Aussentemp < 3.0 Then
        If Aussentemp >= 2.68 Then                              ' Aussentemp >= 18 Grad
          Delta_kessel = 0
        End If
    
        If Aussentemp > 2.10 And Aussentemp < 2.68 Then
          Delta_kessel = 2.68 - Aussentemp
          Delta_kessel = Delta_kessel * 11
          Delta_kessel = Abs(delta_kessel)
        End If
    
        If Aussentemp <= 2.10 Then                              'Aussentemp <= -7 Grad
          Delta_kessel = 0.58 * 11
        End If
    End If
    Return
    '*************************Mittelwert der Außentemp******************************
    Aussentemp_mittel:
       'If _min = 0 Then
        Aussentemp = Tempmessstelle(7) + Aussentemp
        Aussentemp = Aussentemp / 2
       'End If
    Return
    '*************************Sub Relais schalten***********************************
    Schalterelais:
    Select Case Tagnacht
      Case 0
        Gosub Nachtbetrieb
      Case 1
        Gosub Tagbetrieb
    End Select
    Return
     '**************************Sub für Tagbetrieb**********************************
    Tagbetrieb:
     'If Weekday = 6 Or Weekday = 7 Then
     '   If _hour <= 8 Then
      ''   Kessel_grenz_min = Kessel_min
       '  Kessel_grenz_max = Kessel_max + Delta_kessel
       ' Else
       '  Kessel_grenz_min = Kessel_min + Delta_kessel
       '  Kessel_grenz_max = Kessel_max + Delta_kessel
       ' End If
     'Else
        If _hour <= 12 Then
         Kessel_grenz_min = Kessel_min
         Kessel_grenz_max = Kessel_max + Delta_kessel
     Else
         Kessel_grenz_min = Kessel_min + Delta_kessel
         Kessel_grenz_max = Kessel_max + Delta_kessel
        End If
     'End If
         If Tempmessstelle(1) <= Tagtemp_ug Then
           Pumpefb = 1
         End If
         If Tempmessstelle(1) >= Tagtemp_og Then
           Brenner = 0
           Pumpefb = 0
         End If
    Return
    '**************************Sub für Nachtbetrieb*********************************
    Nachtbetrieb:
      If _hour = Nachtbetrieb And Pumpe_aus_nacht = 0 Then
        Pumpe_aus_nacht = 1
        Pumpe_aus_nacht_temp = Tempmessstelle(4) + 2
      End If
      Kessel_grenz_min = Pumpe_aus_nacht_temp
      If Tempmessstelle(2) >= Kessel_grenz_min Then
        Brenner = 0
        Pumpefb = 1
      Else
        Brenner = 0
        Pumpefb = 0
      End If
      If _hour = 0 Then                                         'Brennerstarts auf Null setzen
        Brennerstarts = 0
        Delta_kessel = 0.0
        Aussentemp = 2.68
        Pumpe_aus_nacht = 0
      End If
    Return
                                                       '
    '**************************Subroutine für Timer1*******************************
    Isr_von_timer1:                                             'ISR von Timer1
      Timer1 = 51135
    Return
    '***************************Subs für RTC****************************************
    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
    
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 3
      I2cwbyte Weekday
      I2cwbyte _day
      I2cwbyte _month
      I2cwbyte _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 3 ' starting address in 1307
    I2cwbyte Weekday ' Weekday
    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
    
    
    
    '*******************************************************************************
    $eeprom
    
    Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF  '     0
    Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23  '     1
    Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11  '     2
    Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67  '     3
    'Data &H10 , &HBD , &HB6 , &H23 , &H01 , &H08 , &H00 , &H40  '     4
    Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F  '     5

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Martin,

    so geht das noch nicht. Ich habe mir jetzt 'mal dein Prog etwas genauer angesehen:
    1. Config Clock = User bedeutet, dass nur die Clock-Variablen erzeugt werden. Die Clock läuft aber nicht (kein Fortschritt von _second).
    Das heißt: Getdatetime, Settime und Setdate brauchst du nicht. Du kannst sie mit Return irgendwo einstellen:
    Getdatetime:
    Settime:
    Setdate:
    Return
    Du nennst deine Schreib- und Leseroutine anders: Z.B. Schreib_rtc, Lese_rtc. Darin schreibst/liest du immer ALLE Werte (Sekunden bis Jahr).

    2. Am Anfang deiner Hauptschleife liest du die RTC mit Lese_rtc. Du vergleichst die Sekunde (_second) mit der letzten Sekunde (die du vorher z.B. in einer Variablen Oldsecond gespeichert hast). Sind die ungleich, läuft deine Schleife weiter ab (auch mit LCD-Anzeige). Wenn _second = Oldsecond, dann wird gewartet. Das Waitms 1000 nimmst du dafür ganz weg.

    3. Beim erstmaligen Stellen der RTC hier ...:
    'Time$ = "01:50:00" ' to watch the day changing value
    Date$ = "28.10.07" ' erstmaliges stellen der Uhr
    Weekday = 7
    ... müßte anschließend einmalig Schreib_rtc aufgerufen werden, um die Werte in die RTC zu bringen.

    4. Auf den Timer-Interrupt kannst du komplett verzichten. (Alles weg,- auch die ISR)

    Gruß Dirk

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    So wie ich das verstehe (eigentlich verstehe ich nichts) meine ganze Datum und Zeit - Funktion falsch. Aber wie ich es machen soll, verstehe ich noch nicht.

    Hast du ggf. ein Beispiel? Wäre sehr nett!



    Martin

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... mache mich morgen 'mal dran!

    Nächtle Dirk

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Guten Morgen Dirk,

    habe im Forum hier was gefunden.

    Hier der Code: Werde heute Abend mal schauen ob das damit geht.

    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600

    Config Sda = Portc.4
    Config Scl = Portc.5

    Dim _weekday As Byte
    Dim _day As Byte
    Dim _month As Byte
    Dim _year As Byte
    Dim _sec As Byte
    Dim _min As Byte
    Dim _hour As Byte

    Dim Ds1307w As Byte
    Dim Ds1307r As Byte

    Ds1307w = &B11010000
    Ds1307r = &B11010001

    _day = 23
    _month = 6
    _year = 05
    _sec = 10
    _min = 10
    _hour = 13
    _weekday = 1

    Rem Zeitsetzen
    _sec = Makebcd(_sec)
    _min = Makebcd(_min)
    _hour = Makebcd(_hour)
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cwbyte _sec
    I2cwbyte _min
    I2cwbyte _hour
    I2cstop

    Rem Datumsetzen
    _day = Makebcd(_day)
    _month = Makebcd(_month)
    _year = Makebcd(_year)
    _weekday = Makebcd(_weekday)
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 3
    'I2cwbyte _weekday
    I2cwbyte _day
    I2cwbyte _month
    I2cwbyte _year
    I2cstop


    Do

    Rem Datum und Zeit holen
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0

    I2cstart
    I2cwbyte Ds1307r
    I2crbyte _sec , Ack
    I2crbyte _min , Ack
    I2crbyte _hour , Ack
    I2crbyte _weekday , Ack
    I2crbyte _day , Ack
    I2crbyte _month , Ack
    I2crbyte _year , Nack
    I2cstop

    Print Bcd(_day) ; "/" ; Bcd(_month) ; "/" ; Bcd(_year)
    Print Bcd(_hour) ; "/" ; Bcd(_min) ; "/" ; Bcd(_sec)
    Print "---------------------------------------"

    Waitms 1000

    Loop

    Gruß und Danke

    Martin

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... ja das sieht gut aus!

    Probier es damit. Das einzige, was ich anders machen würde ist das Warten für 1s. Ich würde die Do-Loop-Schleife mit der RTC steuern:
    Am Anfang RTC lesen, _second mit der letzten ausgelesenen Sekunde vergleichen. Wenn immer noch dieselbe Sekunde, dann erneut die RTC lesen (mit einer Mini-Verzögerung, z.B. Waitms 100). Ist die nächste Sekunde angebrochen, läuft die Schleife weiter mit deiner ganzen Heizungssteuerung und zeigt auch die LCD-Ausgabe.
    Also etwa so:
    Oldsecond = _second
    Do ' Hauptschleife
    While _second = Oldsecond
    ' Hole Zeit (oder NUR _second) aus der RTC
    Waitms 100
    Wend
    Oldsecond = _second
    ' Lese die komplette RTC aus, falls noch nicht oben passiert
    ' Hier die ganze weitere Heizungssteuerung
    Loop
    End

    Gruß Dirk

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests