-
-
Uhrzeit auslesen mit DS1307
Hallo
bin noch einigermaßen neu in Sachen Mikrocontroller. Einige Sprünge habe ich schon hinter mir. Nun habe ich aber Probleme mit dem auslesen des Uhrenbausteines DS1307 über I2C.
- '---------- AVR Einstellungen ----------
$regfile = "m8def.dat" 'AVR ATMega 8...
$crystal = 8000000 '...mit 8 MHz
'---------- I²C Einsatellungen ----------
Config Twi = 100000 'i2c Frequenz einstellen
Config Sda = Portd.1 'i2c Port SDA am AVR
Config Scl = Portd.0 'i2c Port SCL am AVR
'---------- LCD Einstellungen ----------
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , Rs = Portc.4 , E = Portc.5
Config Lcd = 16 * 2
Config Lcdbus = 4 '4 Bit Modus
Cursor Off Noblink 'LCD = Cursor aus
Dim Wochentag As Byte
Dim Tag As Byte
Dim Monat As Byte
Dim Jahr As Byte
Dim Sekunde As Byte
Dim Minute As Byte
Dim Stunde As Byte
Dim Ds1307w As Byte
Dim Ds1307r As Byte
Ds1307w = &B11010000
Ds1307r = &B11010001
Wochentag = 7
Tag = 16
Monat = 12
Jahr = 07
Sekunde = 00
Minute = 28
Stunde = 13
Rem Zeitsetzen
'I2cstart
'I2cwbyte Ds1307w
'I2cwbyte 0
'I2cwbyte Sekunde
'I2cwbyte Minute
'I2cwbyte Stunde
'I2cstop
Rem Datumsetzen
'I2cstart
'I2cwbyte Ds1307w
'I2cwbyte 3
'I2cwbyte Wochentag
'I2cwbyte Tag
'I2cwbyte Monat
'I2cwbyte Jahr
'I2cstop
Cls
Do
Rem Datum und Zeit holen
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte Sekunde , Ack
I2crbyte Minute , Ack
I2crbyte Stunde , Ack
I2crbyte Wochentag , Ack
I2crbyte Tag , Ack
I2crbyte Monat , Ack
I2crbyte Jahr , Nack
I2cstop
Upperline
Home
If Tag < 9 Then
Lcd "0" ; Tag ; "-"
Else
Lcd Tag ; "-"
End If
If Monat < 9 Then
Lcd "0" ; Monat ; "-"
Else
Lcd Monat ; "-"
End If
If Jahr < 9 Then
Lcd "200" ; Jahr
Else
Lcd "20" ; Jahr
End If
Lowerline
If Stunde < 9 Then
Lcd "0" ; Stunde ; ":"
Else
Lcd Stunde ; ":"
End If
If Minute < 9 Then
Lcd "0" ; Minute ; ":"
Else
Lcd Minute ; ":"
End If
If Sekunde < 9 Then
Lcd "0" ; Sekunde
Else
Lcd Sekunde
End If
Waitms 500
Loop
Im Moment "verschluckt" sich die Uhr, d.h. sie zählt die Sekunden bis 89 und die Minuten springen dann auch in größeren Schritten. Von der Beschaltung des DS1307 ist ja nicht viel falsch zu machen.
Quarz an 1 und 2, Batterie 3 und 4
5 SDA, 6 SCL
der Quarz ist ein Uhrenquarz mit 0,032768 Hz, die Sekundenlänge stimmt. Nur "addiert" der Baustein nicht richtig.
Kann es sein, das sich der I2C Bus nicht so schnell abfragen lässt?
Im Moment weiß ich keinen Rat.
Gruß
Michael
PS Weiß noch nicht, wie man das Listing in ein separates Fenster zum scrollen bekommt, sorry für die Länge
-
Erfahrener Benutzer
Roboter Experte
Das Listing maskiert man normalerweise mit Code Tags - ctrl-C macht das bei mir auch (auf dem Mac zumindest)...
-
gelöst
Hallo,
habe den Fehler gefunden. Muss die Variablen von der Zeit noch umwandeln mit dem Befehl
Sekunde=makedec(sekunde)
Danach bekomme ich die richtige Zeit angezeigt
Gruß
Michael
-
Erfahrener Benutzer
Roboter-Spezialist
hey ich schließ mein Problem mal ans Thema an:
Ich hab nen DS1337, mit I2C bekomm ich auch ne Verbindung und kann die Register schreiben und wieder auslesen! Jedoch werden die Register nicht inkrementiert, heißt also das Quarz schwingt nicht (Habs am Oszi angeschaut, nix!)
Jetzt seh ich grad die Cl Load des DS1307 beträgt 12,5pF die des DS1337 nur 6pF? Kanns damit zusammenhängen? Brauch ich ein spezielles Quarz? Oder noch extra Kondis?
Bin für jeden Tip dankbar!
MfG
Ringo
-
Neuer Benutzer
Öfters hier
Hallo,
ich bin langsam am verzweifeln mit dem ds1307 ich kann machen was ich will ich bekomme auf dem LCD für alle Werte 255 angezeigt. Was mache ich falsch?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen