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.