Forum: Mikrocontroller und Digitale Elektronik Problem mit DS1307


von Gast (Gast)


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:
1
'---------- AVR Einstellungen ----------
2
$regfile = "m8def.dat" 'AVR ATMega 8...
3
$crystal = 7372800                                          '...mit 8 MHz
4
5
6
'---------- I²C Einsatellungen ----------
7
8
Config Twi = 100000 'i2c Frequenz einstellen
9
Config Sda = Portc.4                                        'i2c Port SDA am AVR
10
Config Scl = Portc.5                                        'i2c Port SCL am AVR
11
12
'---------- LCD Einstellungen ----------
13
14
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
15
Config Lcd = 16 * 2
16
Config Lcdbus = 4 '4 Bit Modus
17
Cursor Off Noblink 'LCD = Cursor aus
18
19
20
Dim Wochentag As Byte
21
Dim Tag As Byte
22
Dim Monat As Byte
23
Dim Jahr As Byte
24
Dim Sekunde As Byte
25
Dim Minute As Byte
26
Dim Stunde As Byte
27
28
Dim Ds1307w As Byte
29
Dim Ds1307r As Byte
30
31
Ds1307w = &B11010000
32
Ds1307r = &B11010001
33
34
Wochentag = 7
35
Tag = 16
36
Monat = 12
37
Jahr = 07
38
Sekunde = 00
39
Minute = 28
40
Stunde = 13
41
42
Cls
43
Do
44
45
Rem Datum und Zeit holen
46
I2cstart
47
I2cwbyte Ds1307w
48
I2cwbyte 0
49
50
I2cstart
51
I2cwbyte Ds1307r
52
I2crbyte Sekunde , Ack
53
I2crbyte Minute , Ack
54
I2crbyte Stunde , Ack
55
I2crbyte Wochentag , Ack
56
I2crbyte Tag , Ack
57
I2crbyte Monat , Ack
58
I2crbyte Jahr , Nack
59
I2cstop
60
61
Upperline
62
Home
63
If Tag < 9 Then
64
Lcd "0" ; Tag ; "-"
65
Else
66
Lcd Tag ; "-"
67
End If
68
69
If Monat < 9 Then
70
Lcd "0" ; Monat ; "-"
71
Else
72
Lcd Monat ; "-"
73
End If
74
75
If Jahr < 9 Then
76
Lcd "200" ; Jahr
77
Else
78
Lcd "20" ; Jahr
79
End If
80
81
Lowerline
82
If Stunde < 9 Then
83
Lcd "0" ; Stunde ; ":"
84
Else
85
Lcd Stunde ; ":"
86
End If
87
88
If Minute < 9 Then
89
Lcd "0" ; Minute ; ":"
90
Else
91
Lcd Minute ; ":"
92
End If
93
94
If Sekunde < 9 Then
95
Lcd "0" ; Sekunde
96
Else
97
Lcd Sekunde
98
End If
99
100
101
Waitms 500
102
103
Loop

von Denny (Gast)


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

von Denny (Gast)


Lesenswert?

Achso es gibt auch eine LIB in Bascom, direkt für den DS

$include "ds1307clock.lib"

Gruss

von Artur Funk (Gast)


Lesenswert?

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

von Gast (Gast)


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?
1
$regfile = "m8def.dat"
2
$crystal = 3579545                                          ' default use 40 for the frame space
3
$lib "mcsbyte.lbx"                                          ' for smaller code
4
$lib "ds1307clock.lib"                                      ' modified lib
5
6
'configure the scl and sda pins
7
Config Sda = Portc.4
8
Config Scl = Portc.5
9
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
10
Config Lcd = 16 * 2
11
Config Lcdbus = 4                                           '4 Bit Modus
12
Cursor Off Noblink                                          'LCD = Cursor aus
13
'address of ds1307
14
Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
15
Const Ds1307r = &HD1
16
17
Config Clock = User                                         ' this will dim the bytes automatic
18
'dim other needed variables
19
Dim Weekday As Byte
20
Cls
21
Lcd "test"
22
23
' assigning the time will call the SetTime routine
24
Time$ = "23:58:59"                                          ' to watch the day changing value
25
Date$ = "11-13-02"                                          ' 13 november 2002
26
Do
27
  Cls
28
  Lcd Date$ ; " " ; Time$
29
  Waitms 500
30
Loop
31
32
End
33
34
'called from ds1307clock.lib
35
Getdatetime:
36
  I2cstart                                                  ' Generate start code
37
  I2cwbyte Ds1307w                                          ' send address
38
  I2cwbyte 0                                                ' start address in 1307
39
40
  I2cstart                                                  ' Generate start code
41
  I2cwbyte Ds1307r                                          ' send address
42
  I2crbyte _sec , Ack
43
  I2crbyte _min , Ack                                       ' MINUTES
44
  I2crbyte _hour , Ack                                      ' Hours
45
  I2crbyte Weekday , Ack                                    ' Day of Week
46
  I2crbyte _day , Ack                                       ' Day of Month
47
  I2crbyte _month , Ack                                     ' Month of Year
48
  I2crbyte _year , Nack                                     ' Year
49
  I2cstop
50
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
51
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
52
Return
53
54
Setdate:
55
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
56
  I2cstart                                                  ' Generate start code
57
  I2cwbyte Ds1307w                                          ' send address
58
  I2cwbyte 4                                                ' starting address in 1307
59
  I2cwbyte _day                                             ' Send Data to SECONDS
60
  I2cwbyte _month                                           ' MINUTES
61
  I2cwbyte _year                                            ' Hours
62
  I2cstop
63
Return
64
65
Settime:
66
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
67
  I2cstart                                                  ' Generate start code
68
  I2cwbyte Ds1307w                                          ' send address
69
  I2cwbyte 0                                                ' starting address in 1307
70
  I2cwbyte _sec                                             ' Send Data to SECONDS
71
  I2cwbyte _min                                             ' MINUTES
72
  I2cwbyte _hour                                            ' Hours
73
  I2cstop
74
Return

von Denny S. (nightstorm99)


Lesenswert?

Mach mal das in deinem Code:
1
Time$ = "23:58:59"                                          ' to watch the day changing value
2
Date$ = "11-13-02"                                          ' 13 november 2002
3
Gosub Settime
4
Gosub Setdate
5
Do
6
  Gosub Getdatetime
7
  Cls
8
  Lcd Date$ ; " " ; Time$
9
  Waitms 500
10
Loop
11
12
End

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

Gruss

von Gast (Gast)


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.

von Denny S. (nightstorm99)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Hab ich gemacht zeigt trotzdem überall nur null an

von Denny S. (nightstorm99)


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.

von Gast (Gast)


Lesenswert?

Uhr läuft trozdem nicht

von Denny S. (nightstorm99)


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.

von Gast (Gast)


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?

von Gast (Gast)


Lesenswert?

Hast Du eine Clock (32kHz) angeschlossen ?

von vico (Gast)


Lesenswert?

der scl und sda sind falsch rum

von tom (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.