Problem mit DS1307

Gast #763552
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
Gast #763566
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
Gast #763595
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
#763601
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren