I'm trying to read a ds1307 using code that Bruce wrote but it will only show 00:00:00 for time & date. I'm using real pic simulator. Do I blame it on simulator & go on?
Code:
DEFINE OSC 4
' Note: use 10K pull-up resistors on both SDA and SCL lines.
' DS1307 control pins
SDA Var PORTB.0 ' DS1307 SDA pin #5
SCL Var PORTB.1 ' DS1307 SCL pin #6
' Variables
DB Var BYTE[8] ' Data byte array
RTCSec Var DB[0] ' alias individual bytes in array
RTCMin Var DB[1]
RTCHour Var DB[2]
RTCDay Var DB[3]
RTCDate Var DB[4]
RTCMonth Var DB[5]
RTCYear Var DB[6]
RTCCtrl Var DB[7]
AMPM Var BIT
AM Con 0
PM Con 1
' Port configuration
TRISB = 0
TRISA = 0
CMCON = %00000111 ' Comparators = off
' 12-hour mode clock routine for the DS1307 RTC
GOSUB Write_1307 ' Write time & date on power-up
Main:
GOSUB Read_1307 ' Read the time & date
' Now display it
HSEROUT ["Time: "]
HSEROUT [DEC((RTCHour>>4)& $01), DEC(RTCHour & $0f),":"]
HSEROUT [DEC((RTCMin>>4)& $0f), DEC(RTCMin & $0f),":"]
HSEROUT [DEC((RTCSec>>4)& $0f), DEC(RTCSec & $0f)]
AMPM = RTCHour.0[5] ' Bit 5 of RCTHour indicates AM or PM
IF AMPM = AM THEN ' If RTCHour.bit5 = 0 it's AM
HSEROUT [" AM",13,10] ' Print AM
ELSE ' Else it's PM
HSEROUT [" PM",13,10] ' Print PM
ENDIF
HSEROUT ["Day: ", DEC(RTCDay & $07),13,10]
HSEROUT ["Date: ", DEC((RTCMonth>>4)& $01), DEC(RTCMonth & $0f),":"]
HSEROUT [DEC((RTCDate>>4)& $03), DEC(RTCDate & $0f),":"]
HSEROUT [DEC(((RTCYear>>4)& $0f)*100),DEC(RTCYear & $0f),13,13,10]
PAUSE 1000
GOTO Main
Read_1307:
' Read order is in Secs,Mins,Hours,Day,Date,Month,Year,Control
I2CRead SDA,SCL,$D0,$00,[STR DB\8] ' Read string of 8 bytes from DS1307
RETURN
Write_1307:
' $71 in the Hours register would make it 11 PM
' $51 in the Hours register would make it 11 AM
'
' Example:
' $51 = %0101 0001 <-- 1's position of hour
' ||||_________ 10's position of hour. 10+1 = 11 O-clock
' |||__________ 1 = PM, 0 = AM (in 12-hour mode)
' ||___________ 1 = 12-hour mode, 0 = 24-hour mode
' |____________ ignore this bit
'
' Set time & date to 11:59:00, Day 2, Date:Month:Year 30:08:2007
I2CWRITE SDA,SCL,$D0,$00,[$00,$59,$51,$02,$30,$08,$27,$90] ' Write to DS1307
RETURN ' Sec Min Hr Day D M Y Control
End