How to read & write to a 25aa1024 (1 Mbit SPI Bus Serial EEPROM) via 16F88


Closed Thread
Results 1 to 37 of 37

Hybrid View

  1. #1
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    I picked up a couple of these 24FC1025 and I am not having any luck either.

    A0 and A1 and WP are connected to VSS.
    A2 connected to VDD.
    10K pull up on SDA and SCL.
    Tried "start/stop" sequence before and after I2C commands...

    Out put to terminal is 0 no matter what.
    Code:
    '  18F6680  24FC1025
        DEFINE OSC 20
        @ __CONFIG    _CONFIG1H, _OSC_HS_1H
        @ __CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
        @ __CONFIG    _CONFIG4L, _LVP_OFF_4L
        
        TRISF = 0
        PORTF = 0
        DEFINE I2C_SLOW 1
        DEFINE I2C_SCLOUT 1
        DPIN    VAR PORTF.6    'I2C DATA PIN
        CPIN    VAR PORTF.7    'I2C CLOCK PIN
        CONTR   CON %10100001  'READ CONTROL
        CONTW   CON %10100000  'WRITE CONTROL
        ADDR    VAR WORD
        DATI    VAR BYTE
        DATO    VAR BYTE
        ADDR = %0000000000000000
        DATO = %11110000
        
        START:
        SEROUT2 PORTB.2, 16572,["TEST",$d,$a]
        PAUSE 1000
        
        HIGH CPIN:HIGH DPIN:LOW DPIN
        I2CWRITE DPIN,CPIN,CONTW,ADDR,[DATO]  
        HIGH CPIN:LOW DPIN:HIGH DPIN
        Pause 10                
    
        HIGH CPIN:HIGH DPIN:LOW DPIN
        I2CREAD DPIN,CPIN,CONTR,ADDR[DATI]        
        HIGH CPIN:LOW DPIN:HIGH DPIN
    
        Serout2 PORTB.2, 16572,["DATA IN ",BIN DATI]       
        SEROUT2 PORTB.2, 16572,[$d,$a]
    
        GOTO START
    Dave
    Always wear safety glasses while programming.

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    I give up...
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Mar 2010
    Location
    Minnesota, USA
    Posts
    41

    Default

    I give up...
    Haha! Well at least I learned the problem isn't me

    So does anyone out there know the assembly code to make this work???

  4. #4
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    When I get back tonight I am thinking of do some sort of bit banging, maybe that will work.
    Dave
    Always wear safety glasses while programming.

  5. #5
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166

    Default

    mackrackit, Why are you using 10 k's for the pullup's? I believe the spec. says 4.7K or lower.. Might be the problem....

    Dave Purola,
    N8NTA

  6. #6
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    The data sheet for this part call for 10k at 100 kHz and 2k for 400 kHz and 1 MHz.

    It did not work at the higher speeds so I was trying it at the slow.
    Dave
    Always wear safety glasses while programming.

  7. #7
    Join Date
    Mar 2010
    Location
    Minnesota, USA
    Posts
    41

    Default

    Quote Originally Posted by Dave View Post
    mackrackit, Why are you using 10 k's for the pullup's? I believe the spec. says 4.7K or lower.. Might be the problem....

    Dave Purola,
    N8NTA
    I am using 4.7K. Sorry I forgot to mention that I was doing that different from the schematic I posted.

    Did you get it to work?

  8. #8
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924

    Default

    I have tried several different resistor sizes and still nothing.
    I think I am actually communicating with it as it "ACK" backs at me...
    Here is my current mess...
    Code:
    '  18F6680  24FC1025
        DEFINE OSC 20
        @ __CONFIG    _CONFIG1H, _OSC_HS_1H
        @ __CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
        @ __CONFIG    _CONFIG4L, _LVP_OFF_4L
        
        TRISF = 0
        PORTF = 0
       
        DPIN    VAR PORTF.6    'I2C DATA PIN
        CPIN    VAR PORTF.7    'I2C CLOCK PIN
        CONTR   CON %10100001  'READ CONTROL
        CONTW   CON %10100000  'WRITE CONTROL
        ADDR_HB    VAR BYTE
        ADDR_LB    VAR BYTE
        DATI    VAR BYTE
        DATO    VAR BYTE
        ACK     VAR BIT
        ADDR_HB = %00000000
        ADDR_LB = %00000000
        DATO = %11100000
        CNT VAR BYTE
        CNT = 0
        
        START:CNT = CNT + 1
        GOSUB WRITE_DATA
        PAUSE 100
        GOSUB READ_DATA
        SEROUT2 PORTB.2, 16572,["TEST ",DEC CNT,$d,$a]
        Serout2 PORTB.2, 16572,["DATA IN ",BIN DATI]      
        SEROUT2 PORTB.2, 16572,[$d,$a]
        PAUSE 500
        GOTO START
        
        WRITE_DATA:  ACK=1   :Serout2 PORTB.2, 16572,["ACK ",BIN ACK,$d,$a] 
        GOSUB START_ROM
        SHIFTOUT DPIN,CPIN,1,[CONTW]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        Serout2 PORTB.2, 16572,["ACK ",BIN ACK,$d,$a] 
        SHIFTOUT DPIN,CPIN,1,[ADDR_HB]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        SHIFTOUT DPIN,CPIN,1,[ADDR_LB]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        SHIFTOUT DPIN,CPIN,1,[DATO]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        GOSUB STOP_ROM
        PAUSE 10
        RETURN
        
        READ_DATA:
        GOSUB START_ROM
        SHIFTOUT DPIN,CPIN,1,[CONTR]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        SHIFTOUT DPIN,CPIN,1,[ADDR_HB]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        SHIFTOUT DPIN,CPIN,1,[ADDR_LB]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        GOSUB START_ROM
        SHIFTOUT DPIN,CPIN,1,[CONTR]
        SHIFTIN DPIN,CPIN,0,[ACK\1]
        SHIFTIN DPIN,CPIN,0,[DATI\8]
        GOSUB STOP_ROM
        PAUSE 10
        RETURN
        
        START_ROM:
        HIGH CPIN:HIGH DPIN:LOW DPIN:RETURN
        STOP_ROM:
        HIGH CPIN:LOW DPIN:HIGH DPIN:RETURN
    Dave
    Always wear safety glasses while programming.

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