- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Denkfehler bei einer DS1307?

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9

    Denkfehler bei einer DS1307?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Forum,

    ich schreibe gerade den Quellcode für meine Uhr. Und ich habe einen Denkfehler aber ich finde ihn nicht.
    Ich habe einen Mega32 der mit 8MHz getaktet ist. Am I²C hängt ne DS1307 RTC wo die Uhrzeit ausgelesen wird. Die Kommunikation funktioniert auch und das auslesen funktioniert auch zu 99%. An den Ports A und D hängen 4 71414 die die Uhrzeit auf meinen Röhren anzeigen. Ich hab es aber eben z.B. gehabt das bis 20:10 die Uhrzeit richtig als 20:10 angezeigt wurde aber sobald es 20:10 war, war auf den Röhren 20:16 zu lesen. Und die Uhr läuft dann auch mit der Zeit weiter. Es wird also nicht 20:15 angezeigt sondern 20:21.
    Ich finde den Fehler einfach nicht >.<
    Mein bisheriger Code sieht so aus:
    Code:
    'Mikrocontroller
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    'Stackgröße festlegen
    $hwstack = 200
    $swstack = 200
    
    'TWI konfigurieren
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config Twi = 100000                                         'TWI Frequenz
    
    'Unterprogramme
    Declare Sub Uhrzeit
    Declare Sub Read_dcf
    Declare Sub Rtc_einstellen
    Declare Sub Enable_sqw
    
    'Ports konfigurieren
    Config Porta = Output                                       'Port für die Stunden
    Config Portd = Output                                       'Port für die Minuten
    Config Pinb.2 = Input                                       'Input für die SQW der RTC
    
    Porta = 0
    Portd = 0
    Pinb.2 = 1                                                  'Pull-Up aktivieren
    
    'Variablen
    Dim _sec As Byte
    Dim _min As Byte
    Dim _hour As Byte
    Dim _weekday As Byte
    Dim _day As Byte
    Dim _month As Byte
    Dim _year As Integer
    Dim Ds1307w As Byte
    Dim Ds1307r As Byte
    Dim Stunde As Byte
    Dim Minute As Byte
    Dim Ds1307_config As Byte                                   'Controllregister der RTC
    
    'Uhrzeit voreinstellen
    _sec = 00
    _min = 04
    _hour = 20
    
    'Adresse der DS1307
    Ds1307w = &HD0                                              'Schreibadresse der RTC
    Ds1307r = &HD1                                              'Leseadresse der RTC
    
    'Interrupts einstellen
    Config Int2 = Falling
    Enable Int2
    On Int2 Ds1307_int
    
    'Interrups aktivieren
    Enable Interrupts
    
    
    'Call Rtc_einstellen
    
    Do
    
    Call Uhrzeit
    
    Porta = Stunde
    Portd = Minute
    Wait 1
    
    Loop
    End
    
    '------------------------------------------------------------------------------
    
    'RTC auslesen
    Sub Uhrzeit
    I2cstart                                                    'TWI Start
    I2cwbyte Ds1307w                                            'Übergabe der Slaveadresse
    I2cwbyte 0                                                  'Registerzähler wird auf Null gesetzt
    
    I2cstart                                                    'Zweite Startkondition
    I2cwbyte Ds1307r                                            'Übergabe der Leseadresse
    I2crbyte _sec , Ack                                         'Auslesen des Sekundenregisters
    I2crbyte _min , Ack                                         'Auslesen des Minutenregisters
    I2crbyte _hour , Nack                                       'Auslesen des Jahresregisters
    I2crbyte _weekday , Ack
    I2crbyte _day , Ack                                         'Auslesen des Tagesregisters
    I2crbyte _month , Ack                                       'Auslesen des Monatsregisters
    I2crbyte _year , Nack                                       'Auslesen des Jahresregisters
    I2cstop                                                     'TWI Stoppkondition
    
    Minute = Makebcd(_min)                                      'Umwandeln in BCD Code
    Stunde = Makebcd(_hour)
    
    End Sub
    
    '------------------------------------------------------------------------------
    
    Sub Read_dcf
    
    Return
    End Sub
    
    '------------------------------------------------------------------------------
    
    'Einstellen Der Zeit
    Sub Rtc_einstellen
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cwbyte _sec
    I2cwbyte _min
    I2cwbyte _hour
    I2cstop
    End Sub
    
    '------------------------------------------------------------------------------
    
    Sub Enable_sqw
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 7
    I2cwbyte Ds1307_config
    I2cstop
    Return
    End Sub
    
    '------------------------------------------------------------------------------
    
    Ds1307_int:
    
    Return
    
    '------------------------------------------------------------------------------
    Anbei noch der Schaltplan meines Aufbaus.
    Kann mir jemand auf die Sprünge helfen und mir sagen wo der Fehler ist?
    Danke für die Hilfe!

    Edit: Und statt 20:20 steht da 20:32.
    Angehängte Dateien Angehängte Dateien
    Geändert von Kampi (04.04.2012 um 19:21 Uhr) Grund: Was ergänzt.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Kann mir jemand auf die Sprünge helfen und mir sagen wo der Fehler ist?
    Deine Kommunikation ist einseitig, vom und hin zum DS1307 muss jeweils Dez/BCD gewandelt werden, bei Dir nur nach BCD.
    Im Bascom\Samples\I2C Ordner ist genau ein Beispiel zur 1307, woran Du Dich orientieren kannst.

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Deine Kommunikation ist einseitig, vom und hin zum DS1307 muss jeweils Dez/BCD gewandelt werden, bei Dir nur nach BCD.
    Im Bascom\Samples\I2C Ordner ist genau ein Beispiel zur 1307, woran Du Dich orientieren kannst.
    Super! Dank dir ich schau es mir direkt mal an.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ok es scheint nun zu funktionieren. Dank dir nochmals
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So also das mit der Uhrzeit funktioniert nun einwandfrei, allerdings klappt das auslesen in der ISR nicht.
    Ich hab den SQW Pin der RTC direkt mit Pin B.2 verbunden. Der Plan ist nun gewesen, dass ich beim Mega32 an diesem Pin den Pull-Up aktiviere und den Interrupt und der SQW Pin der RTC auf 1Hz gestellt wird.
    Das klappt allerdings nicht.
    Mein Code ist folgender:
    Code:
    'Mikrocontroller
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    'Stackgröße festlegen
    $hwstack = 200
    $swstack = 200
    
    'TWI konfigurieren
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config Twi = 100000                                         'TWI Frequenz
    
    'Unterprogramme
    Declare Sub Uhrzeit
    Declare Sub Settime
    Declare Sub Read_dcf
    Declare Sub Enable_sqw
    
    'Ports konfigurieren
    Config Porta = Output                                       'Port für die Stunden
    Config Portd = Output                                       'Port für die Minuten
    Config Portb.2 = Output
    Ds1307 Alias Pinb.2
    
    Porta = 0
    Portd = 0
    Ds1307 = 1                                                  'Pull-Up aktivieren
    
    'Variablen
    Dim Zaehler As Byte
    Dim _hour As Byte
    Dim _min As Byte
    Dim _sec As Byte
    Dim _weekday As Byte
    Dim _day As Byte
    Dim _month As Byte
    Dim _year As Byte
    Dim Ds1307w As Byte
    Dim Ds1307r As Byte
    Dim Stunde As Byte
    Dim Minute As Byte
    Dim Sekunde As Byte
    
    'Adresse der DS1307
    Ds1307w = &HD0                                              'Schreibadresse der RTC
    Ds1307r = &HD1                                              'Leseadresse der RTC
    
    'Interrups aktivieren
    Enable Interrupts
    
    'Interrupts einstellen
    On Int2 Ds1307_int
    Config Int2 = Rising
    Enable Int2
    
    'Uhrzeit voreinstellen
    _hour = 16
    _min = 01
    _sec = 00
    'Call Settime
    
    Call Enable_sqw                                             'SQW der RTC aktivieren
    
    Do
    
    'Call Uhrzeit
    
    Porta = Zaehler
    'Porta = Stunde
    'Portd = Minute
    Wait 1
    
    Loop
    End
    
    '------------------------------------------------------------------------------
    
    'RTC auslesen
    Sub Uhrzeit
      I2cstart
      I2cwbyte Ds1307w                                          ' Schreibadresse senden
      I2cwbyte 0                                                ' Startadresse auf Register 0 setzen
    
      I2cstart
      I2cwbyte Ds1307r                                          ' Adresse übermitteln
      I2crbyte Sekunde , Ack
      I2crbyte Minute , Ack
      I2crbyte Stunde , Ack
      I2crbyte _weekday , Ack
      I2crbyte _day , Ack
      I2crbyte _month , Ack
      I2crbyte _year , Nack
      I2cstop
    End Sub
    
    '------------------------------------------------------------------------------
    
    Sub Read_dcf
    
    Return
    End Sub
    
    '------------------------------------------------------------------------------
    
    Sub Enable_sqw
    I2cstart
    I2cwbyte &HD0
    I2cwbyte 7
    I2cwbyte &B00010001
    I2cstop
    End Sub
    
    '------------------------------------------------------------------------------
    
    Ds1307_int:
    
    Incr Zaehler
    
    Return
    
    '------------------------------------------------------------------------------
    
    Sub Settime
      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cwbyte _sec
      I2cwbyte _min
      I2cwbyte _hour
      I2cstop
    End Sub
    
    '------------------------------------------------------------------------------
    Ich finde da einfach keinen Fehler.... aber es funktioniert nicht.
    Kann mir da jemand helfen (ist sicher wieder was total banales -.-)?
    Danke schonmal!
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    ... dass ich beim Mega32 an diesem Pin den Pull-Up aktiviere
    Einen Pullup aktiviert man nicht, indem man den Pin auf Ausgang setzt.

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Einen Pullup aktiviert man nicht, indem man den Pin auf Ausgang setzt.
    Naja selbst wenn ich den auf Input stelle gehts nicht :/
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Input ist schon richtig, aber einen Pullup brauchst Du trotzdem. Den musst Du entweder intern einschalten oder extern dranlöten.

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von MagicWSmoke Beitrag anzeigen
    Input ist schon richtig, aber einen Pullup brauchst Du trotzdem. Den musst Du entweder intern einschalten oder extern dranlöten.
    Ja ich wollte den internen Pull-Up verwenden, da mir hier gesagt wurde das das gehen würde
    Den aktiviere ich doch mit

    PINB.2 = 1

    oder?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Den aktiviere ich doch mit

    PINB.2 = 1

    oder?
    Gerade auch blind gewesen...
    Code:
    PortB.2 = 1
    wäre richtig.
    Aber ohne
    Code:
    Config Portb.2 = Output
    denn sonst röstet was.
    Geändert von MagicWSmoke (06.04.2012 um 23:40 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Verbindungsproblem mit DS1307?
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 13.07.2010, 09:16
  2. Denkfehler?
    Von Feratu im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 04.02.2008, 21:00
  3. Programmierung => Denkfehler?
    Von Feratu im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 03.02.2008, 21:44
  4. DS1307 ???
    Von EDatabaseError im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 18.08.2006, 11:39
  5. Denkfehler?
    Von Stolle im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 30.03.2006, 10:54

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad