1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Problem in reading the 2nd data from pcf8563 real time clock by i2c

  1. Jul 30, 2013 #1
    Suppose the 2nd data can be read after the first data, but i need to restart the condition the only can read the 2nd data. By that, i have read the slave address again before the 2nd data has been read. So how should i solve it?
     
  2. jcsd
  3. Jul 30, 2013 #2

    berkeman

    User Avatar

    Staff: Mentor

    Welcome to the PF.

    Why do you need to restart anything? Can't you just read the two data bytes out in order? Can you describe the problem in a bit more detail?

    PCF8563 RTC I2C Slave datasheet -- http://www.nxp.com/documents/data_sheet/PCF8563.pdf


    :smile:
     
    Last edited: Jul 30, 2013
  4. Jul 31, 2013 #3
    ;/**
    ; * EXP 1
    ; *
    ; * This program displays the character '0' on one
    ; * of the seven segment displays.
    ; */

    list p = 18f4520

    include "p18f4520.inc"

    CONFIG OSC = INTIO67
    CONFIG PWRT = ON
    CONFIG WDT = OFF
    CONFIG DEBUG = ON, LVP = OFF

    WriteSlaveAddr EQU b'10100010'
    ReadSlaveAddr EQU b'10100011'
    SecsAddr EQU 0x02
    SecsData EQU b'01010000'
    MinsAddr EQU 0x03
    MinsData EQU b'01011001'
    HoursAddr EQU 0x04
    HoursData EQU b'00000010'

    ORG 0

    start
    clrf TRISC
    bsf TRISC,3
    bsf TRISC,4

    ;/BAUD RATE
    movlw b'00001001'
    movwf SSPADD
    nop
    nop

    ;/SLEW RATE CONTROL
    movlw b'00000000'
    movwf SSPSTAT
    nop
    nop

    ;/ENABLE SERIAL PORT
    movlw b'00101000'
    movwf SSPCON1
    nop
    nop

    ;SET TIME
    call i2c_start
    movlw WriteSlaveAddr
    call i2c_send
    call check_ack
    movlw SecsAddr
    call i2c_send
    call check_ack
    movlw SecsData
    call i2c_send
    call check_ack
    movlw MinsData
    call i2c_send
    call check_ack
    movlw HoursData
    call i2c_send
    call check_ack
    call i2c_restart
    movlw WriteSlaveAddr
    call i2c_send
    call check_ack
    movlw SecsAddr
    call i2c_send
    call check_ack
    call i2c_restart
    movlw ReadSlaveAddr
    call i2c_send
    call check_ack
    call receive_mode
    ; call i2c_restart
    call i2c_send
    call check_ack
    call receive_mode
    ; call i2c_restart
    call i2c_send
    call check_ack
    call receive_mode
    call send_nack
    call i2c_stop

    ;/START CONDITION
    i2c_start
    bsf SSPCON2,SEN
    call check
    nop
    nop
    return

    ;/I2C SEND
    i2c_send
    movwf SSPBUF
    call check
    nop
    nop
    return

    ;/STOP CONDITION
    i2c_stop
    bsf SSPCON2,PEN
    call check
    nop
    nop
    bz ending
    return

    ;/INTERRUPT
    check
    btfss PIR1,SSPIF
    goto check
    bcf PIR1,SSPIF
    nop
    nop
    return

    check_ack
    btfsc SSPCON2,ACKSTAT
    goto i2c_fail
    nop
    nop
    return

    i2c_restart
    bsf SSPCON2,RSEN
    call check
    nop
    nop
    return

    send_nack
    bsf SSPCON2,ACKDT
    bsf SSPCON2,ACKEN
    call check
    nop
    nop
    return

    receive_mode
    bsf SSPCON2,RCEN
    call check
    nop
    nop
    return

    i2c_fail
    call i2c_stop

    ending
    bra ending


    END
     
  5. Jul 31, 2013 #4
    This is my code. If i didn't add the restart condition, the 2nd data cannot be read. But the data sheet mention that the data can be transfer continuous without any restart. So I need to figure out the problem. Is it any problem in my code?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Problem in reading the 2nd data from pcf8563 real time clock by i2c
  1. Real world problem (Replies: 2)

Loading...