I2c write&read


Closed Thread
Results 1 to 16 of 16

Thread: I2c write&read

Hybrid View

  1. #1
    Join Date
    Dec 2007
    Location
    Finland
    Posts
    191


    Did you find this post helpful? Yes | No

    Post Test script

    Hi MInhle,

    Below is very simple I2C write and read test script.

    Code:
    <code><font color="#000000">CMCON = 7
    TRISA = %11000000
    TRISB = %00000000
    
    SDA                 <b>VAR </b>PortA.3
    SCL                 <b>VAR </b>PortA.4     
    LED                 <b>VAR </b>PortB.0     <font color="#000080"><i>'Indicator LED (change if needed)    
    
    </i></font>I2CDeviceEEprom     <b>VAR BYTE    
    </b>I2CAddressEEprom    <b>VAR WORD
    </b>TEMP1               <b>VAR BYTE
    </b>TEMP2               <b>VAR BYTE
    
    </b>I2CDeviceEEprom=$A0     <font color="#000080"><i>'DeviceID 10100000 = $A0 = %1010 A2=0, A1=0, A0=0 R/W=0
    
    </i></font><b>DEFINE </b>OSC 4
        
    Main:
        I2CAddressEEprom = 0
        TEMP1 = 1
        <b>GOSUB </b>Write_I2C
        <b>PAUSE </b>10
        <b>GOSUB </b>Read_I2C
        <b>IF </b>TEMP1 = TEMP2 <b>THEN
                HIGH </b>LED        <font color="#000080"><i>'If OK then 0.5s LED blink
                </i></font><b>PAUSE </b>500
                <b>LOW </b>LED
            <b>ELSE
                HIGH </b>LED        <font color="#000080"><i>'If FAIL then 2s LED blink
                </i></font><b>PAUSE </b>2000
                <b>LOW </b>LED
        <b>ENDIF
        GOTO </b>Main   
        
    Write_I2C:
        <b>I2CWRITE </b>SDA, SCL, I2CDeviceEEprom, I2CAddressEEprom,[ TEMP1 ]
        <b>RETURN
    
    </b>Read_I2C:
        <b>I2CREAD </b>SDA, SCL, I2CDeviceEEprom, I2CAddressEEprom,[ TEMP2 ]
        <b>RETURN
        
    END
    </b></code>
    If write and read are successfully executed then LED will blink for 0.5s.
    2s LED blink will be an indication of fail.

    BR,
    -Gusse-

  2. #2
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    hello Gusse,

    I copy you program. run ---> the light is solid.,



    i tr to put direcly data into EEProm, the out put is whatever,,,

    i.e.

    i = 0 ; data address
    b0 = $2a ; data to be stored

    i2cwrite .......... i, [b0]

    b0 = 0
    i2cread .........i,[b0]

    run ----> whatever... output (BONUS ONLY)

    i have to replace the EEPROm
    thanks for your time

    regards,

  3. #3
    Join Date
    Dec 2007
    Location
    Finland
    Posts
    191


    Did you find this post helpful? Yes | No

    Post Small bug

    Hi,

    Sorry, I had one bug there. One pause missing.

    Code:
    <code><font color="#000000">CMCON = 7
    TRISA = %11000000
    TRISB = %00000000
    
    SDA                 <b>VAR </b>PortA.3
    SCL                 <b>VAR </b>PortA.4     
    LED                 <b>VAR </b>PortB.0     <font color="#000080"><i>'Indicator LED (change if needed)    
    
    </i></font>I2CDeviceEEprom     <b>VAR BYTE    
    </b>I2CAddressEEprom    <b>VAR WORD
    </b>TEMP1               <b>VAR BYTE
    </b>TEMP2               <b>VAR BYTE
    
    </b>I2CDeviceEEprom=$A0     <font color="#000080"><i>'DeviceID 10100000 = $A0 = %1010 A2=0, A1=0, A0=0 R/W=0
    
    </i></font><b>DEFINE </b>OSC 4
        
    Main:
        I2CAddressEEprom = 0
        TEMP1 = 1
        <b>GOSUB </b>Write_I2C
        <b>PAUSE </b>10
        <b>GOSUB </b>Read_I2C
        <b>IF </b>TEMP1 = TEMP2 <b>THEN
                HIGH </b>LED        <font color="#000080"><i>'If OK then 0.5s LED blink
                </i></font><b>PAUSE </b>500
                <b>LOW </b>LED
            <b>ELSE
                HIGH </b>LED        <font color="#000080"><i>'If FAIL then 2s LED blink
                </i></font><b>PAUSE </b>2000
                <b>LOW </b>LED
        <b>ENDIF</b>
        <b>PAUSE </b>1000        <font color="#000080"><i>'PAUSE ADDED</i></font>
        <b>GOTO </b>Main   
        
    Write_I2C:
        <b>I2CWRITE </b>SDA, SCL, I2CDeviceEEprom, I2CAddressEEprom,[ TEMP1 ]
        <b>RETURN
    
    </b>Read_I2C:
        <b>I2CREAD </b>SDA, SCL, I2CDeviceEEprom, I2CAddressEEprom,[ TEMP2 ]
        <b>RETURN
        
    END
    </b></code>
    Now it will blink.

    BR,
    -Gusse-

  4. #4
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    Hello Gusse,

    thanks for your help,

    the eeprom is wrong. I replace a another one. it is ok now.

    and the R_SCL and R_SDA are either 13K or 3,3 k the light intensity and frequency does not change (by naked eyes)

    thanks again
    Minh le

  5. #5
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    Hello Gusse,
    actually it is not necessary to " define OSC 4" it is defined in fuse ("INTCLOUT.."

    the 24lc256 it takes only 5ms to write

    thanks
    regards

Similar Threads

  1. I2C Master/Slave 16F88/16F767 working code
    By DanPBP in forum Code Examples
    Replies: 2
    Last Post: - 23rd October 2012, 22:31
  2. HARDWARE I2C SAMPLE CODE question
    By Michael Wakileh in forum Code Examples
    Replies: 2
    Last Post: - 16th June 2009, 21:07
  3. PIC16F877 I2C programme
    By cooqo in forum mel PIC BASIC
    Replies: 3
    Last Post: - 21st April 2008, 10:02
  4. I2C Master Slave issues.
    By cpayne in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 29th March 2008, 19:33
  5. Please help with i2cslave i2c slave
    By cycle_girl in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 1st December 2005, 13:55

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts