PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uhrzeit auslesen mit DS1307



supertux
16.12.2007, 13:22
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

stefan_Z
16.12.2007, 15:42
Das Listing maskiert man normalerweise mit Code Tags - ctrl-C macht das bei mir auch (auf dem Mac zumindest)...

supertux
17.12.2007, 11:31
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

Ringo
17.12.2007, 15:28
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

batista156
26.01.2008, 16:24
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?