Thanks man, by checking your code and comparing it to mine, I realised that I made my "DAY" variable WORD instead of BYTE. It works perfectly now...
Thank you for your help and time.
Cheers
Thanks man, by checking your code and comparing it to mine, I realised that I made my "DAY" variable WORD instead of BYTE. It works perfectly now...
Thank you for your help and time.
Cheers
Hi ardhuru,
Would it be possible for you to post the rest of the code for the RTC including time setting? I think many people on this forum would be interested as there have been some posts requesting specifically this chip.
Thank you very much!
BobK
Hi Bob,
Actually, I used the PCF8563, which is virtually identical to the PCF8583 except for a few features.
Anyway, here are the RTC read and RTC write segments that I use. Since my RTC works on a battery (a CR2032, now in its second year, expected to go on for at least a year more!), I have also extracted the low battery indiactor bit.
'READ FRESH VALUES FROM THE RTC and convert BCD to decimal
I2CREAD SDA,SCL,$A2,2,[S,m,h,D,W,MN,Y] 'Read all parameters from the RTC
LOBATT = S & %10000000 ' Mask off all bits unimplemented in RTC registers
S = S & %01111111 '
M = M & %01111111 '
h = H & %00111111 '
D = D & %00111111 '
Mn = Mn & %00011111 '
TMP=S ' Convert BCD to decimal
S=((tmp>>4)*10)+(tmp & $0F) '
tmp=M '
M=((tmp>>4)*10)+(tmp & $0F) '
tmp=H '
H=((tmp>>4)*10)+(tmp & $0F) '
tmp=D '
D=((tmp>>4)*10)+(tmp & $0F) '
tmp=MN '
MN=((tmp>>4)*10)+(tmp & $0F) '
tmp=Y '
Y=((tmp>>4)*10)+(tmp & $0F) '
'Convert Decimal Seconds,Minutes & Hours values to BCD equivalents and write to RTC
tmp=S
S=(tmp dig 1<<4)+(tmp dig 0)
tmp=M
M=(tmp dig 1<<4)+(tmp dig 0)
tmp=H
H=(tmp dig 1<<4)+(tmp dig 0)
tmp=D
D=(tmp dig 1<<4)+(tmp dig 0)
tmp=MN
MN=(tmp dig 1<<4)+(tmp dig 0)
tmp=Y
Y=(tmp dig 1<<4)+(tmp dig 0)
I2CWRITE SDA,SCL,$A2,2,[S,M,H,D,W,MN,Y] 'Write parameters to RTC
Hope this helps!
Regards,
Anand
Bookmarks