-
Hi,
Register 0x07 (Timerinhalt) wird immer um 1 erhöht. je nachdem was du eingestellt hast. wenn
1. 1/100 --> wird bei 1/100 Sec. um 1 erhöht
2. Sec --> wird bei sekunden-takt um 1 erhöht
3. Min. --> wird bei Minuten-Takt um 1 erhöht
4. hrs --> wird bei Stunden-Takt um 1 erhöht.
5. Days --> wird jeden Tag um 1 erhöht
Diese werden in den ersten 3 Bits von Register 0x08 eingestellt.
wenn der Inhalt des Registers 0x07 von 99 auf 0 zurückgeht, wird das Flagbit Bit0 des Registers 0x00 auf 1 gesetzt. Das muss dann per Software gelöscht werden. Wenn das Timer-En-Bit gesetzt ist, dann wird ein Int. ausgelöst. Timer Enable Bit findest du in Register 0x08 bit3.
IngBo
-
Hallo,
wie versprochen, die Software kann jetzt downgeloadet werden
http://www.channaa.com/html/rs232_i2c_adapter.html
damit kannst du die Registerinhalte des PCF8583 berechnen.
natürlich auch andere I2C-ICs
IngBo
-
Hallo
Ich hätte dazu ein paar Fragen zur Programmierung von dem PCF8583
(Sind meine ersten Versuche mit i2c )
Habe jetzt den PCF8583 angeschlossen und mit dem Programm von Tooltime probiert.
Nachdem ich herrausgefunden habe, dass ich noch zwei Widerstände für die Datenleitungen brauche ;-), funktioniert es jetzt :-)
Nur möchte ich es jetzt auch verstehen..
Mir ist jetzt noch nicht ganz klar, wie das ansprechen von dem PCF.. jetzt wirklich funktioniert.
Mein Ziel ist eine normale Uhr mit Datum für das Loggen von Daten dann in ein EEprom.
Datenplatt von dem PCF8583 habe ich jetzt auch, aber wegen schlechtem englisch, blicke ich da nicht ganz durch.
Wenn Tooltime schreibt:
Code:
I2cstart 'I2C Start
I2cwbyte &HA0 'Schreibemodus
I2cwbyte 0 'select control register
I2cwbyte &HC 'set year and day bit for masking
Was passiert da eigentlich ?
I2cwbyte... ist Schreiben am I2C Bus (I2crbyte 0 lesen)
&HA0 = A0= 10100000
Das dürfte die Adresse von dem PCF8583 am Bus sein ?!
(Wobei 10100000 (A0) schreiben und 10100001 (A1) lesen sein dürfte ?!)
Nur was jetzt kommt, ist mir nicht klar:
I2cwbyte 0 'select control register
I2cwbyte &HC 'set year and day bit for masking
Genauso wie beim auslesen .
Was geschiet hier ?
Sehe zwar die Register im Datenblatt, aber wie komme ich dort hin ?
Da habe ich Register 0,4,5,6,8
Ist jemand vielleicht so lieb und kan mir das ein bisschen erklären ?
:-)
l.G. Roberto
-
Hallo
Hat keiner einen Tip für mich ?
-
Sorry, dass so lange keine Antwort kam.
Ich werde mir diese Woche noch einmal die Unterlagen zu dem damaligem Projekt raussuchen.
Ich hoffe dir dann auch weiterhelfen zu können, denn einige Abläufe des PCF8583 sind mir heute noch ein Rätsel.
Bitte hab noch etwas Geduld
tooltime
-
Hallo Tooltime
Häte schon noch interesse :-)
Aber für mich ist derzeit eher nur die normale Uhr funktion wichtig.
Mir ist noch nicht ganz klar:
Auf Seite 7 im Datenblatt (links)
http://www.semiconductors.philips.co.../PCF8583_5.pdf
Ist der Clock mode dargestellt.
(Register 0 habe dafür auf 00000000 gestellt)
Ist die Spalte da in 2*BCD aufgeteilt ?
links 10s, rechts 1s ?
Und mit
I2crbyte S , Ack
S = Makedec(s)
lese ich dann die rechten BCD's aus?
Kann man auch das Jahr irgendwie auslesen ?
Im Register 05 (Seite7)
steht da : Year/date
unterhalb aber 10 month /1 month ?
?
-
Hallo Roberto,
ich habe gerade ein kleines Programm zusammengebastelt.
Wenn Du einen Mega 8 µC hast, kannst Du das Programm 1 zu 1 übernehmen und ein bischen experimentieren.
Gruß
tooltime
Code:
' ---------[ Initialisierung ]--------
$regfile = "m8def.dat" ' Chip auswählen
$crystal = 1000000 ' Quarzfrequenz festlegen
Config Scl = Portc.5 ' I2C-Clock festlegen
Config Sda = Portc.4 ' I2C-Data festlegen
Config Lcdmode = Port
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2 ' LCD-Typ festlegen
Cursor = Off ' Cursor ausschalten
Cls
Dim S As Byte , M As Byte , H As Byte , D As Byte , Month As Byte
Dim Wm As Byte , Yd As Byte
'-----[ Hauptprogramm ]----------------------------------------
Wm = 3
D = 8
Month = 2
Yd = 1
H = 22
M = 00
S = 00
Settime:
'values are stored as BCD values so convert the values first
S = Makebcd(s) 'seconds
M = Makebcd(m) 'minuts
H = Makebcd(h) 'hours
D = Makebcd(d) 'days
Month = Makebcd(month) 'months
Yd = Makebcd(yd) 'seconds
Wm = Makebcd(wm) 'minuts
I2cstart 'generate start
I2cwbyte &HA0 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstop 'generate stop
I2cstart 'generate start
I2cwbyte &HA0 'write mode
I2cwbyte 2 'select seconds Register
I2cwbyte S 'write seconds
I2cwbyte M 'write minuts
I2cwbyte H 'write hours
I2cwbyte Yd 'write jear
I2cwbyte D 'write day
I2cwbyte Wm 'wirte weekday
I2cwbyte Month 'write month
I2cstop 'generate stop
Goto Gettime
Gettime:
I2cstart 'generate start
I2cwbyte &HA0 'write addres
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte &HA1 'write address for reading
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minuts
I2crbyte H , Ack 'read hours
I2crbyte Yd , Ack 'read year
I2crbyte D , Ack 'read day
I2crbyte Wm , Ack 'read weekday
I2crbyte Month , Nack 'read month
I2cstop 'generate stop
Goto Zeit
Zeit:
S = Makedec(s)
M = Makedec(m)
H = Makedec(h)
Yd = Makedec(yd)
D = Makedec(d)
Wm = Makedec(wm)
Month = Makedec(month)
If H >= 10 Then
Locate 1 , 1 : Lcd H
Else
Locate 1 , 1 : Lcd " " ; H
End If
Locate 1 , 3 : Lcd ":"
If M >= 10 Then
Locate 1 , 4 : Lcd M
Else
Locate 1 , 4 : Lcd "0" ; M
End If
Locate 1 , 6 : Lcd ":"
If S >= 10 Then
Locate 1 , 7 : Lcd S
Else
Locate 1 , 7 : Lcd "0" ; S
End If
Locate 2 , 1 : Lcd D ; "." ; Month ; "." ; Yd ; " " ; Wm
Waitms 100
Goto Gettime
-
Hallo tooltime
Danke dafür :-)
Werde es in den nächsten Tagen mal ausprobieren..
-
Scheint bei Euch schon 2Y zu laufen?
Hallo tooltime
Danke auch dafür, nur LCD Quarz + m88 angepasst (nach montage der i2c pullup) läuft suuuuppper!!!!!! :-)
Jahr geht nur 0.1.2.3 ist für Schaltjahrberechnung. Notfalls eine Speicherzelle für 0-256 opfern. Wenn der yP im Jahr 2256 noch läuft, muss ein Softwareupdate einen Offset dazuzählen oder auf 16bit erweitern für die "Ewigkeit" ;-)
Teste syncronität mit 5V und 2pF seit ca. 30Minuten, noch ziemlich syncron(<1sec). Morgen werd ich dann die Initalisierung rausnehmen um auch die Sync auf CR2032 zu testen.
Gute Nacht Wambly