Ergebnis 1 bis 5 von 5

Thema: RTC-Ds3231 Uhr mit Zeit,Datums,Wochentags,Temperaturanzeige

  1. #1
    Platinenputzer
    Registriert seit
    02.11.2016
    Ort
    09481
    Alter
    60
    Beiträge
    65

    RTC-Ds3231 Uhr mit Zeit,Datums,Wochentags,Temperaturanzeige

    Code:
    '------------------------------------------------------------------------------
    ' ftelektro  26.04.2016
    ' LCD:  Db4-Db7 = Portd.2-Portd.5 E = Portd.1 Rs = Portd.0 Backlight = Portb.1
    ' I2C:  Sda = Portc.4 Scl = Portc.5
    'Bascom 2.0.7.9
    'Es wird kein Cls verwendet, die Werte werden nur überschrieben.
    'Es entfällt Waitms in der Hauptschleife .
    'Ohne Format .00 wird nur eine Nachkommastelle angezeigt.
    'Da die Werte in der Anzeige aber überschrieben werden , ergibt sich somit eine nicht
    'akzeptable Anzeige zB.20.0 °CC!
     ' _________________________________________
     '| 7 |  6 | 5  | 4  | 3  |  2  | 1  |  0  |   H11
     '------------------------------------------
     '|0/1| 64 | 32 | 16 | 8  |  4  | 2  |  1  |          0/1 0= Plus 1= Minus      max: 127°C
     '------------------------------------------
     '| 7 |  6 | 5  | 4  | 3  |  2  | 1  |  0  |   H12
     '------------------------------------------
     '| 0 |  0 |    |    |    |     |    |     |          =&B00 = dez.0 * 25 = -.0   Deshalb Format!
     '------------------------------------------
     '| 7 |  6 | 5  | 4  | 3  |  2  | 1  |  0  |   H12
     '------------------------------------------
     '| 0 |  1 |    |    |    |     |    |     |          =&B01 = dez.1 * 25 = -.25
     '------------------------------------------
     '| 7 |  6 | 5  | 4  | 3  |  2  | 1  |  0  |   H12
     '------------------------------------------
     '| 1 |  0 |    |    |    |     |    |     |          =&B10 = dez.2 * 25 = -,50
     '------------------------------------------
     '| 7 |  6 | 5  | 4  | 3  |  2  | 1  |  0  |   H12
     '------------------------------------------
     '| 1 |  1 |    |    |    |     |    |     |          =&B11 = dez.3 * 25 = -,75            max:127,75°C
     '------------------------------------------                                               zusammen.
     '------------------------------------------------------------------------------
    
      '$sim
      $regfile = "m328pdef.dat"
      $crystal = 8000000
      $hwstack = 40
      $swstack = 16
      $framesize = 32
      Config Portb.0 = Output
      Config Portb.1 = Output
      Config Portd = Output
      Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0
      Config Lcd = 20x4
      Config Portc.3 = Input
      Portc.3 = 1
      Config Sda = Portc.4
      Config Scl = Portc.5
      Const Ds3231w = &HD0                                      '208 Schreibaddresse des Ds3231
      Const Ds3231r = &HD1                                      '209 Leseadresse des DS3231
    
      Config Clock = User                                       ' Interne Time/Date Routinen für Bascom konfigurieren
      Config Date = Dmy , Separator = .                         'Tag,Monat;Jahr Deutsch
    
      Cls                                                       'LCD löschen
      Cursor Noblink                                            'Kein Cursor Blinken
      Cursor Off                                                'Kein Cursor
      Dim A As Byte
      Dim Wt As String * 10                                     'Wochentag 10 zeichen
      Dim Weekday As Byte
      Dim Temp_str As String * 10                               'Temperaturstrang max 10 Zeichen
      Dim S As String * 2
      Dim Temp(2) As Byte
      Dim Temp_u As Byte
      Dim Minus As Byte
      Dim T As Bit
    
      'Stellen der Uhr, muss nur einmal ausgeführt werden
                                           'Aktuelle Zeit Beim Einschalten
    
      'Date$ = "19.05.16"                                        'Aktuelles Datum
      'Time$ = "09:54:00"
    
    
    '-------------
    'Hauptschleife
    '-------------
    
       Gosub Tem                                                'Aufruf Temperaturauswetung
       Locate 1 , 1
       Lcd Date$                                                'Anzeige Datum 'Aufruf Getdatetime Datum und Unterprog.Wochentag
       Locate 2 , 1
       Lcd Time$                                                'Anzeige Uhrzeit  'Aufruf Getdatetime Uhrzeit und Unterprog Wochentag
       Locate 3 , 1
       Lcd Wt                                                   'Anzeige Wochentag
       Locate 4 , 1
       Lcd Temp_str                                             'Anzeige Temperatur
    Loop
    '---------------------------------------------------
    ' Unterprogramme für die Bascom Date/Time-Funktionen
    '---------------------------------------------------
    
    
    '-------------------------
    'Datum und Zeit auswerten
    '-------------------------
    Getdatetime:
       I2cstart                                                 'Start
       I2cwbyte Ds3231w
       I2cwbyte 0                                               'auf 0 stellen
       I2cstart
       I2cwbyte Ds3231r
       I2crbyte _sec , Ack                                      'Sekunden
       I2crbyte _min , Ack                                      'Minuten
       I2crbyte _hour , Ack                                     'Stunden
       I2crbyte Weekday , Ack                                   'Wochentag
       I2crbyte _day , Ack                                      'Tag
       I2crbyte _month , Ack                                    'Monat
       I2crbyte _year , Nack                                    'Jahr
       'INT/SQW initialisieren
    '----------------------
       'I2cstart                                                 'Start
       'I2cwbyte Ds3231w
       'I2cwbyte &H0E                                            'Kontrollregister
       'I2cwbyte &H40                                            '&B0100_0000 Sekundentakt Int/SQW ein
       'I2cstop
       I2cstop
       _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)       'in Dez.wandeln
       _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)       'in Dez. wandeln
       Weekday = Dayofweek()                                    'lt.Bascomhilfe erforderlich
       Gosub Wg                                                 'Unterprogramm Wochentag
    
    Return
    '----------------------
    'Aktuelles Datum setzen
    '----------------------
    Setdate:                                                    'Datum setzen (Schreiben)
       _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
       I2cstart                                                 'Start
       I2cwbyte Ds3231w
       I2cwbyte 4                                               'Adresse 4
       I2cwbyte _day
       I2cwbyte _month
       I2cwbyte _year
       I2cstop
    Return
    '-----------------------
    'Aktuelle Uhrzeit setzen
    '-----------------------
    Settime:                                                    'Uhrzeit setzen (Schreiben)
       _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
       I2cstart                                                 'Start
       I2cwbyte Ds3231w
       I2cwbyte 0                                               'Adresse 0
       I2cwbyte _sec
       I2cwbyte _min
       I2cwbyte _hour
       I2cstop
    Return
    '-------------------
    'Wochentagauswertung
    '-------------------
    Wg:
    Select Case Dayofweek()
       Case 0
       Wt = "Montag    "
       Case 1
       Wt = "Dienstag  "
       Case 2
       Wt = "Mittwoch  "
       Case 3
       Wt = "Donnerstag"
       Case 4
       Wt = "Freitag   "
       Case 5
       Wt = "Sonnabend "
       Case 6
       Wt = "Sonntag   "
    End Select
    Return
    '--------------------
    'Temperaturauswertung
    '--------------------
    Tem:
      I2cstart                                                  ' start
      I2cwbyte Ds3231w
      I2cwbyte &H11                                             'Adresse h11 = 17
      I2crepstart
      I2cwbyte Ds3231r
      I2crbyte Temp(1) , Ack
      I2crbyte Temp(2) , Nack
      I2cstop
    
      Minus = Temp(1).7                                         ' 1 = minus °C, 0 = plus °C
    
      If Minus = 1 Then
      Temp(1) = Not Temp(1)
      Incr Temp(1)
      End If
    
      Shift Temp(2) , Right , 6
      Temp_u = Temp(2) * 25
      S = Str(temp_u)
      S = Format(s , "00")
    
      Deflcdchar 7 , 252 , 244 , 252 , 224 , 224 , 224 , 224 , 224       ' replace [x] with number (1-7) 0 funktioniert nicht in String
    
      Temp_str = Str(temp(1)) + "." + S + " " + Chr(7) + "C"
      If Minus = 1 Then Temp_str = "-" + Temp_str
    
      Return

  2. #2
    tschoeatsch
    Gast
    Hi ftelektro, ich probiere gerade mit einer RTC diesen Typs herum. Im Datenblatt steht für 'day' ein range von 1..7, wie klappt es bei dir im Programm mit case 0..case 6? Es steht weiter im Datenblatt, das dayofweek=1 dem Sonntag entspricht.

  3. #3
    Platinenputzer
    Registriert seit
    02.11.2016
    Ort
    09481
    Alter
    60
    Beiträge
    65
    Habe ich auf Grund deiner Aussage gerade auf Seite 12 PDF gesehen.Soweit ich mich erinnern kann,hatte ich damals Fotos dazu eingestellt.
    Der Wochentag war richtig ausgegeben.Wie ich weiß gab es mittlerweile auch andere User die diesen Code verwendet haben.Im Moment kann
    ich es nicht selbst überprüfen,werde es aber baldigst nachholen.

  4. #4
    Platinenputzer
    Registriert seit
    02.11.2016
    Ort
    09481
    Alter
    60
    Beiträge
    65
    In der Sommer-,Winterzeitumstellung wurde der Sonntag ebenfalls mit "6" angesprochen.Die Umschaltung am 31.10.16 funktionierte Problemlos. Zum ausprobieren mit Lcd-Anzeige bin ich noch nicht gekommen.Im alten Forum habe ich die Fotos wiedergefunden,kann
    sie jedoch nicht öffnen. Link folgt noch.
    http://bascom-forum.de/showthread.ph...rzeitautomatik

    K1600_20160430_143812.jpg (297,9 KB, 17x aufgerufen)
    RTC-Schaltuhr 2Kanal
    http://altesforum.bascom-forum.de/sh...haltuhr-2Kanal
    Geändert von ftelektro (17.11.2016 um 21:50 Uhr)

  5. #5
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    444
    .Im alten Forum habe ich die Fotos wiedergefunden,kann
    sie jedoch nicht öffnen. Link folgt noch.
    Wahrscheinlich sind die weg.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


Lesezeichen

Lesezeichen

Berechtigungen

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