Warum lässt sich die Uhrzeit nicht stellen.
Kann mir jemand auf die Sprünge helfen ??
Gruss
Frank
'#####################
'# Uhrmodul RTC-8563 #
'#####################
$regfile = "m8def.dat"
$crystal = 3686400
$lib "i2c.lbx"
$lib "mcsbyte.lbx"
$lib "datetime.lbx"
$baud = 19200
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 ,
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Initlcd
Cursor Off
Cls
'##### configure the used port pin for I2C
Config Clock = Soft
Config Date = Dmy , Separator = . '
Konfiguriert Ausgabe auf Deutsch
Config I2cdelay = 5 ' default
slow mode
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
'##### declare used subs
Dim Weekday As Byte
Const R8563 = &HA3
Const W8563 = &HA2
Declare Sub Getdatetime
Declare Sub Initial
Gosub Settime
Call Initial
Do
Call Getdatetime 'get time
Loop
End
Sub Getdatetime
I2cstart 'generate
start
I2cwbyte W8563 'write
addres of RTC8563
I2cwbyte 2 'select
second register
I2cstart 'generate
repeated start
I2cwbyte R8563
I2crbyte _sec , Ack 'read
seconds
I2crbyte _min , Ack 'read minuts
I2crbyte _hour , Nack 'read hours
I2crbyte Weekday , Ack ' Day of
Week
I2crbyte _day , Ack ' Day of
Month
I2crbyte _month , Ack ' Month of
Year
I2crbyte _year , Nack ' Year
I2cstop 'generate
stop
Waitms 30
_day = Makedec(_day) : _month = Makedec(_month) : _year =
Makedec(_year)
_sec = Makedec(_sec)
_sec = _sec - 80
_min = Makedec(_min)
_min = _min - 80
_hour = Makedec(_hour)
_hour = _hour - 80
Locate 1 , 1
Lcd Time$
Print Time$
Print Date$
End Sub
Return
Settime:
_sec = 1
_min = 2
_hour = 3
_day = 4
_month = 5
_year = 6
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate
start code
I2cwbyte W8563 ' send
address
I2cstart
I2cwbyte 2 ' starting
address in RTC8563
I2cwbyte _sec ' Send Data
to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Waitms 30
Return
Readdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year =
Makebcd(_year)
I2cstart ' Generate
start code
I2cwbyte W8563 ' send
address
I2cwbyte 6 ' starting
address in RTC8563
I2cwbyte _day ' Send Data
to Day
I2cwbyte _month ' Month
I2cwbyte _year ' Year
I2cstop
Waitms 30
Return
Sub Initial
I2cstart
I2cwbyte W8563
I2cstart
I2cwbyte 0
I2cwbyte 0
I2cstop
End Sub
Return
Hallo,
lass mal den zweiten "I2cstart" im folgenden Ausschnitt weg.
Zitat Anfang;
Settime:
_sec = 1
_min = 2
_hour = 3
_day = 4
_month = 5
_year = 6
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate
start code
I2cwbyte W8563 ' send
address
***************************
' I2cstart diese Zeile weglassen(auskomentieren)
***************************
I2cwbyte 2 ' starting
address in RTC8563
I2cwbyte _sec ' Send Data
to SECONDS
I2cwbyte _min ' MINUTES
I2cwbyte _hour ' Hours
I2cstop
Waitms 30
Return
Zitat ende;
Ich habe es jetz nicht ausprobiert, aber ich glaube das nur ein Start
code
nötig ist.
Die verwendeten Adressen habe ich nicht überprüft, ich geehe davon aus,
dass sie alle stimmen.
mit
Time$ = "02:20:00"
kannst Du die Zeit zuweisen. Bascom wandelt den String um und verwendet
deine Sub "Settime" zum stellen der Uhr.
Gruß Jürgen
Hallo Jürgen,
lasse ich den Vorschlag von Dir weg,wird die Zeit wieder in Hex
angezeigt !
Ich werd noch whnsinnig.Ich hab schon fast alles ausprobiert.
Hast Du eventuell noch einen Tipp ??
Gruss
Frank
Hallo Frank, ich meinte nur diese eine "I2cstart" Anweisung, die Du in der "Settime" Sub zweimal hintereinander ausführst. Die dürfte eigentlich keine Auswirkung auf das Darstellungsformat haben. Ich arbeite zwar mit einem anderen Uhrenbaustein, aber das Prinzip dürfte das selbe sein. Mach mal deine Aktuelle .bas Datei als Dateianhang, dann schau ich nochmal drüber.Und einen Link zu einem Datenblatt von deiner RTC. Gruß Jürgen
Hallo Jürgen,
hier habe ich mal die 2 Files hinterlegt.
Vielen Dank für´s reinschauen.
Gruss
Frank
http://sites.inka.de/heliscan/rtc8563/clock2.txt
http://sites.inka.de/heliscan/rtc8563/rtc8563apli.pdf
Hallo Frank, Config Clock = Soft muß heißen: Config Clock = User Nähere Beschreibung dazu in der BASCOM-AVR Help Melde Dich nochmal, ob es jetzt geht Gruß Jürgen
Hallo Jürgen, leider gehet das auch nicht.Jetzt habe ich keine Ausgabe auf dem LCD ?? Stelle ich wieder auf SOFT um habe ich die LCD-Ausgabe. Die Uhr lässt sich nicht stellen,eventuell stimmt was mit den Registern nicht. Gruss
Hallo Frank, im Anhang ist ein überarbeitetes Programm. Die Zeilen mit ******* sind meiner Meinung nach falsch oder unnötig. Die Zeilen mit ??????? könen von deiner Hardware abhängen, aber ich meine sie können auch weggelassen werden. Ich Arbeite mit Bascom 1.11.8.3. Schau dir mal die Hilfe zu Config Clock, Date$, Config Date, Date, Time usw. an. Wenn du das Prinzip einmal verstanden hast, kann man damit ganz gut arbeiten. Die Register habe ich jetzt noch nicht überprüft. Melde dich ob es geht. Jürgen P.s. Du brauchst noch eine Funktion für SetDate. Die Schaut bei mir so aus: Setdate: _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) I2cstart I2cwbyte Ds1307w 'Hier muss deine Adresse hin I2cwbyte 4 'Hier muss deine Startadresse für das Datum hin I2cwbyte _day I2cwbyte _month I2cwbyte _year I2cstop Return
Vielen Dank an Dich Jürgen,es geht !
Ich werd mir mal nochmal die Bascom-Hilfe zu Gemüte führen.
Also ,Danke nochmals.
PS:Ich hab momentan nur ein einzeiliges LCD angeschlossen.
Gruss
Frank
Hallo Frank, ich hab hier im Forum auch schon Helfer gefunden und freue mich, wenn ich auch mal helfen kann. Probier noch den Anhang, hier sollte alles gehen.(oder auch nicht, ich kann es nicht testen) Jürgen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.