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