Real Time Clock RV-8564-C2          


Elektronik-Labor  Projekte  AVR 



http://www.mcrystal.ch/Products/Real-Time-Clock-Modules.aspx
  
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


 


Elektronik-Labor  Projekte  AVR