Forum: Mikrocontroller und Digitale Elektronik BASCOM und RTC8563


von FrankS (Gast)


Lesenswert?

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

von Jürgen C (Gast)


Lesenswert?

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

von FrankS (Gast)


Lesenswert?

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

von Jürgen C (Gast)


Lesenswert?

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

von FrankS (Gast)


Lesenswert?

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

von Jürgen C (Gast)


Lesenswert?

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

von FrankS (Gast)


Lesenswert?

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

von FrankS (Gast)


Lesenswert?

PS: es handelt sich um einen Atmega8

von Jürgen C (Gast)


Angehängte Dateien:

Lesenswert?

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

von FrankS (Gast)


Lesenswert?

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

von Jürgen C (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.