- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Uhrzeit auslesen mit DS1307

  1. #1

    Uhrzeit auslesen mit DS1307

    Anzeige

    Powerstation Test
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Das Listing maskiert man normalerweise mit Code Tags - ctrl-C macht das bei mir auch (auf dem Mac zumindest)...

  3. #3

    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.09.2004
    Ort
    Bürstadt
    Alter
    37
    Beiträge
    383
    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
    Nobody is Perfect
    Visit www.ringo.roboterbastler.de last update: 23.05.2009

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    20.07.2007
    Beiträge
    11
    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
  •  

LiFePO4 Speicher Test