Real Time Clock RV-8564-C2
Micro
Crystal hat eine Serie schicker Uhrenbausteine mit internem Quarz
herausgebracht. Ein Starterkit mit dem RV-8564-C2 ist mir
zugeflogen und wollte
ausprobiert werden. Die Bausteine wurden übrigens im ComputerClub2
in der Folge 113 (http://youtu.be/_snzLglQVcw)
von Andreas Riedenauer vorgestellt Die Ansteuerung ist recht
einfach, weil das IC den
I2C-Bus verwendet. Die I2C-Adresse ist A2h. Die internen Register
enthalten die Uhrzeit im BCD-Format. Wahlweise kann ein Clocksignal
ausgekoppelt werden. Die Uhr läuft von 1,8 V bis 5,5 V, sodass
man frei in der Betriebsspannung des Mikrocontrollers ist. Das IC
ist übrigens auch bei Reichelt zu bekommen.
Für
den ersten Versuch habe ich einen Mega32 mit LCD in Bascom verwendet.
Es werden hier nur drei Register für Sekunden, Minuten und Stunden
verwendet. Wichtig ist, dass man das BCD-Format beachtet. Beim
Start stellt das Programm die Uhr (16:33:00). Dann wird einmal pro
Sekunde die aktuelle Zeit ausgelesen und im Display angezeigt. Die
I2C-Leitungen wurden willkürlich auf PA1 (SCL) und PA2 (SDA)
gelegt.

'Real Time Clock RV-8564-C2 mit I2C-Bus
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600
$hwstack = 16
$swstack = 64
$framesize = 64
Dim Reg As Byte
Dim Dat As Byte
Dim S As Byte
Dim M As Byte
Dim H As Byte
Declare Function Read_reg(byval R As Byte) As Byte
Declare Sub Write_reg(byval R As Byte , Byval D As Byte)
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2
Initlcd
Cls
Call
Write_reg(4 ,
&H16)
'Uhr stellen
Call Write_reg(3 ,
&H33)
'BCD-Code
Call Write_reg(2 ,
&H00)
'16:33:00
Config Scl = Porta.1
Config Sda = Porta.2
I2cinit
Cursor Off
Do
Dat = Read_reg(4)
Dat = Dat And 63
Locate 1 , 1
Lcd Bcd(dat)
Lcd ": "
Dat = Read_reg(3)
Dat = Dat And 63
Locate 1 , 4
Lcd Bcd(dat)
Lcd ": "
Dat = Read_reg(2)
Dat = Dat And 127
Locate 1 , 7
Lcd Bcd(dat)
Waitms 1000
Loop
Function Read_reg(byval R As Byte) As Byte
I2cstart
I2cwbyte &HA2
I2cwbyte R
I2cstart
I2cwbyte &HA3
I2crbyte Dat , Nack
I2cstop
Read_reg = Dat
End Function
Sub Write_reg(byvalr As Byte ,byval D As Byte)
I2cstart
I2cwbyte &HA2
I2cwbyte R
I2cwbyte D
I2cstop
End Sub
End