mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit DS1307


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Wen ich meinen Bascom-code auf meinen Mega8 überspiele zeigt das display 
nur für alle Werte 255 an. Was mache ich falsch, ich habe auf Pullup 
wiederstände an den beiden Leitungen vom DS1307 und auch mit der Time$ 
und Date$ Funktion komme ich leider nicht weiter.
Hier mein Bascom-Code:
'---------- AVR Einstellungen ----------
$regfile = "m8def.dat" 'AVR ATMega 8...
$crystal = 7372800                                          '...mit 8 MHz


'---------- I²C Einsatellungen ----------

Config Twi = 100000 'i2c Frequenz einstellen
Config Sda = Portc.4                                        'i2c Port SDA am AVR
Config Scl = Portc.5                                        'i2c Port SCL am AVR

'---------- LCD Einstellungen ----------

Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
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

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

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Du musst die Zeit auch in den DS1307 schreiben.
Du liest sie nur aus.

Ausserdem liegt die Zeit vom DS im BCD-format vor.
Zum Anzeigen musst du dann Lcd Bcd(Minute) machen z.B.!
Eine 0 brauchst du auch nicht vorschreiben, sollte dann alles so gehn.


Gruss

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso es gibt auch eine LIB in Bascom, direkt für den DS

$include "ds1307clock.lib"

Gruss

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> zeigt das display nur für alle Werte 255 an
Das passiert nur dann, wenn deine Übertragung nicht erfolgreich war.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt mal noch nen anderen Quellcode gefunden, mein display 
zeigt nun allerdings für alle Werte nur eine komisches Symbol was 
aussieht wie ne gespiegelte 6 und ne 5, woran kann das liegen?
$regfile = "m8def.dat"
$crystal = 3579545                                          ' default use 40 for the frame space
$lib "mcsbyte.lbx"                                          ' for smaller code
$lib "ds1307clock.lib"                                      ' modified lib

'configure the scl and sda pins
Config Sda = Portc.4
Config Scl = Portc.5
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcd = 16 * 2
Config Lcdbus = 4                                           '4 Bit Modus
Cursor Off Noblink                                          'LCD = Cursor aus
'address of ds1307
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1

Config Clock = User                                         ' this will dim the bytes automatic
'dim other needed variables
Dim Weekday As Byte
Cls
Lcd "test"

' assigning the time will call the SetTime routine
Time$ = "23:58:59"                                          ' to watch the day changing value
Date$ = "11-13-02"                                          ' 13 november 2002
Do
  Cls
  Lcd Date$ ; " " ; Time$
  Waitms 500
Loop

End

'called from ds1307clock.lib
Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' MINUTES
  I2crbyte _hour , Ack                                      ' Hours
  I2crbyte Weekday , Ack                                    ' Day of Week
  I2crbyte _day , Ack                                       ' Day of Month
  I2crbyte _month , Ack                                     ' Month of Year
  I2crbyte _year , Nack                                     ' Year
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' Send Data to SECONDS
  I2cwbyte _month                                           ' MINUTES
  I2cwbyte _year                                            ' Hours
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' Hours
  I2cstop
Return

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal das in deinem Code:
Time$ = "23:58:59"                                          ' to watch the day changing value
Date$ = "11-13-02"                                          ' 13 november 2002
Gosub Settime
Gosub Setdate
Do
  Gosub Getdatetime
  Cls
  Lcd Date$ ; " " ; Time$
  Waitms 500
Loop

End

Dann sollte es gehn. Du musst deine Zeit einmal in den DS schreiben.
Sonst kann er nix anzeigen.

Gruss

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok das problem habe ich jetzt selber gefunden lag an einer schlechten 
verbindung der beiden Datenleitungen. Aber jetzt wird nur überall 0 
angezeigt und es wird nicht weitergezählt.

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ändere mal den Code wie oben beschrieben!
Ist klar das er nur Null zeigt. Er weis ja noch keine Zeit.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich gemacht zeigt trotzdem überall nur null an

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So lass ich mir immer die Uhrzeit anzeigen:

Lcd Bcd(ds_hour) ; ":" ; Bcd(ds_min) ; ":" ; Bcd(ds_sec)

Also nur deine Zeile mal ersetzen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uhr läuft trozdem nicht

Autor: Denny S. (nightstorm99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn bei Sekunden eine 80 steht, dann stimmt was mit deinem stellen 
nicht.

Ansonsten weis ich auch nicht, so geht es bei mir auf jedenfall.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe das alles noch mal in ruhe durchporbiert doch jetzt habe ich wieder 
das 1. Problem das nur überall @5 angezeigt wird. Woran leigt das?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du eine Clock (32kHz) angeschlossen ?

Autor: vico (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der scl und sda sind falsch rum

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
scl und sda waren auch bei mir falsch herum und ergaben das beschriebene 
problem, danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.