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
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:
Was passiert da eigentlich ?Code:I2cstart 'I2C Start I2cwbyte &HA0 'Schreibemodus I2cwbyte 0 'select control register I2cwbyte &HC 'set year and day bit for masking
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
Lesezeichen