Quantcast
Channel: MEL PICBASIC Forum
Viewing all articles
Browse latest Browse all 4745

ds1307

$
0
0
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


Viewing all articles
Browse latest Browse all 4745

Trending Articles