I2c write&read


Closed Thread
Results 1 to 16 of 16

Thread: I2c write&read

Hybrid View

  1. #1
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    thank Gusse,

    i replaced data address (I: in this case) by WORD . . and/or change R from 10K to 6K. ..it doesnot work.

    (in the data sheet of 24lc256 dooesnot mention anything data address.

    VOLTAGE drop across: R_SCL (10K or 6K) : ~5V (unchanged)
    R_SDA (10K or 6K): ~2.5V

    !! is it possible the EEPROM: DEATH??

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


    Did you find this post helpful? Yes | No

    Post

    Hi MInhle,

    If you are running with internal oscillator then speed is 4MHz, not 20MHz. Also you should tell that to compiler.
    14.2.6 INTERNAL 4 MHZ OSCILLATOR
    The internal RC oscillator provides a fixed 4 MHz
    (nominal) system clock at VDD = 5V and 25°C, see
    “Electrical Specifications” section for information on
    variation over voltage and temperature.
    Code:
    DEFINE OSC 4
    Quote Originally Posted by MINHLE View Post
    OSC: INTRO CLOCKOUT
    14.2.7 CLKOUT
    The PIC16F62X can be configured to provide a clock
    out signal by programming the configuration word. The
    oscillator frequency, divided by 4 can be used for test
    purposes or to synchronize other logic.
    CLKOUT is RA6, which is also your I2C data pin. Disable CLKOUT or change I2C data pin to other IO.

    If you are not using comparator then disable those.
    Code:
    CMCON = 7
    I hope these modifications will bring up some life to your EEPROM interface.

    BR,
    -Gusse-

  3. #3
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    hello GUSSE,

    i got a BONUS now. the led is on (pin2 only) and flash

    i lookk for error in teh program and let u knoow later

    thanks for your help

  4. #4
    Join Date
    Apr 2008
    Posts
    85


    Did you find this post helpful? Yes | No

    Default

    HI Gusse,

    the modifications were made.
    as indicated.

    defined OSC 4 ;no effect: ( INTCLOUT is set in the fuse window)
    SDA PORTA.3
    SCL PORRT.4
    ......

    R_SDA & R_SCL: 4.5k
    a led on portb flashed is due to error that i cannot see where it comes from


    not write nor read. i assume EEPROM???

  5. #5
    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-

  6. #6
    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,

  7. #7
    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-

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