-         

Ergebnis 1 bis 4 von 4

Thema: Bytes in eine RTC schreiben und wieder auslesen

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

    Bytes in eine RTC schreiben und wieder auslesen

    Anzeige

    Auch wenn ich jetzt Gefahr laufe zu nerven. Aber da habe ich noch ein kleines Problem.
    Ich möchte Bytes in eine RTC (DS1307) schreiben und auch von dieser wieder zurücklesen. Ich habe dazu zwei Unterprogramme geschrieben, die jweils den Bereich von Adresse 00 - 0A beschreibt.
    Jetzt habe ich festgestellt, dass imme das letzte Byte fehlerhaft ist. Ich habe nur noch nicht herausgefunden ob es schon falsch in die RTC geschrieben wird, oder falsch ausgelesen.
    Hier mal die entsprechenden Programme dazu:

    Code:
    ' ****************************************
    ' * DS1307 Adr $00 - $09 schreiben       *
    ' ****************************************
    
    Sub DS1307Write()
    
      I2cstart                                                                      'I²C-Bus Startsignal ausgeben
      I2cwbyte DS1307W                                                              'DS1307 in Schreibmodus setzen
      I2cwbyte 0                                                                    'Startadresse $0 in DS1307 einschreiben
    
      For Z = 0 To 9                                                                'Adressen $00 - $09 in DS1307 schreiben
        I2cwbyte Rtc_Regs(Z + 1)                                                    'Werte fortlaufend einschreiben
        Waitms 10                                                                   '10ms Pause bis zum nächsten Byte
      Next Z                                                                        'Nach vorletztem Byte 10ms warten.
        Waitms 10                                                                   'Letzte Adresse
      Z = Z + 1                                                                     'Daten einschreiben
      I2cwbyte Rtc_Regs(Z + 1)
      I2cstop                                                                       'I²C-Bus Stopsignal ausgeben
    
    End Sub
    Code:
    ' ****************************************
    ' * DS1307 Adr $00 - $09 auslesen        *
    ' ****************************************
    
    Sub DS1307Read()
    
      I2cstart                                                                      'I²C-Bus Startsignal ausgeben
      I2cwbyte DS1307W                                                              'DS1307 in Schreibmodus setzen
      I2cwbyte 0                                                                    'Startadresse $0 in DS1307 einschreiben
    
      I2cstart                                                                      'I²C-Bus Startsignal erneut ausgeben
      I2cwbyte DS1307R                                                              'DS1307 in Lesemodus versetzen
      For Z = 0 To 9                                                                'Adressen $00 - $09 aus DS1307 lesen.
        I2crbyte Rtc_Regs(Z + 1), Ack                                               'Nach jedem Lesen Empfang bestätigen.
      Next Z
      Z = Z + 1                                                                     'letzte zu lesende Adresse nach Empfang
      I2crbyte Rtc_Regs(Z + 1), Nack                                                'nicht mehr bestätigen.
      I2cstop                                                                       'I²C-Bus Stopsignal ausgeben
    
    End Sub

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,

    Code:
    FOR Z = 0 TO 9
    NEXT Z
    Die grosse Quizfrage ist nun, welchen Wert Z hat, wenn die Schlaufe verlassen wird!

    Die Schleife wird abgebrochen, wenn Z den Wert 10 erreicht hat.

    Du schreibst und liest also Byte 0...9 und 11.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.10.2006
    Beiträge
    109
    Mal wieder den Wald vor lauter Bäumen nicht gesehen. Da wurde gnadenlos ein Wert übersprungen. Nachdem ich die Zeile Z = Z + 1 entfernt hatte, hat Alles wie gewünscht funktioniert.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von rogerberglen Beitrag anzeigen
    Mal wieder den Wald vor lauter Bäumen nicht gesehen.
    Einfach immer die Bäume zählen, wenn es viele sind, ist es ein Wald

    Übrigens, man sollte sich immer auch mit dem Debugger beschäftigen.
    Im Single-Step hättest du den Denkfehler selber gesehen.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. Bytes nur zum Teil auslesen
    Von BEADG im Forum Arduino -Plattform
    Antworten: 4
    Letzter Beitrag: 23.10.2013, 16:00
  2. Bytes aus einem Array in eine Word-Variable
    Von Larek im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 26.08.2006, 18:44
  3. Long in Bytes zerlegen - RS232 - und wieder zusammenbauen ??
    Von m@rkus33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 27.01.2006, 00:46
  4. Auslesen von Bytes des PCF 8574
    Von JensB im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 20.09.2004, 18:43
  5. Textdatei in AVR schreiben und wieder laden
    Von Kay im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 17.03.2004, 12:59

Berechtigungen

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