Based off of an article (Serial EEPROM Part #1) by mackrackit, I have been attempting to read/write to a 24FC1025 EEPROM. I have done this in the past using an 18f4620 and everything worked as expected. I am trying to run the same code on a 18f14k22 and I can't get any read/writes to work when using the I2cread/write commands, but it works flawlessly with the shiftin/out examples. all the bytes I am reading is using the I2cread command come in as decimal 16. I tried slowing down the micro and that didn't change anything. Anyone have any ideas?


Code:
' *** I2C EEPROM using Siftin/out   
START_Shiftin:     
 READ_DATA:
   lcdout Lcdcmd , Line4, "Reading EEPROM Data " 
   For ADDR_LB = 0 To 50 
      GOSUB INT_ROM
      GOSUB START_ROM
      SHIFTOUT DPIN,CPIN,1,[ExtMem0R]
      SHIFTIN DPIN,CPIN,0,[ACK\1,DATI\8]
      SHIFTOUT DPIN,CPIN,1,[%1\1]
      GOSUB STOP_ROM
      lcdout Lcdcmd , Line3, "ADDR:",DEC ADDR_LB,"   "
      lcdout Lcdcmd , Line3+10, "DATA:",DEC DATI,"   "
      PAUSE 250
   NEXT ADDR_LB
Return
    
INT_ROM:
   GOSUB START_ROM
   SHIFTOUT DPIN,CPIN,1,[ExtMem0W]
   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]
RETURN
    
START_ROM:
   HIGH CPIN:HIGH DPIN:LOW DPIN
RETURN
   
STOP_ROM:
   HIGH CPIN:LOW DPIN:HIGH DPIN
RETURN

end


' *** I2C EEPROM using PicBasic I2C commands    
START_I2C:                
    lcdout Lcdcmd , Line4, "Reading EEPROM Data "
    For ADDR = 0 To 50   
       I2CREAD DPIN,CPIN,$A0,ADDR,[DATI]       
       lcdout Lcdcmd , Line3, "ADDR:",DEC ADDR,"   "
       lcdout Lcdcmd , Line3+10, "DATA:",DEC DATI,"   "
       PAUSE 250
    Next ADDR
Return