For the really last time, i'm still sure your SDA/SCL are reverted and/or you don't have the right Pull-Up resistors on SDA & SCL, and i also endorse the A<2:0> setting.
OK why i stick to it ?
1. Because i already used something like that in one of my Radio Decode Dongle to confirm the end-user haven't swap the SDA/SCL line when reading in circuit the target I2C EEprom inside the radio.
2. Let's say i use a at24c1024 here with the following...
Code:
CONT CON %10100000
ADDR VAR WORD
ByteA VAR BYTE
SDA var PORTC.4
SCL var PORTC.3
PAUSE 500
Start:
for addr = 0 to 10
ByteA=ADDR.LOWBYTE
I2CWRITE SDA,SCL,CONT,ADDR,[ByteA]
PAUSE 20
NEXT
FOR ADDR=0 TO 10
I2CREAD SDA,SCL,CONT,ADDR,[ByteA]
HSEROUT ["ADDR=", DEC ADDR,_
" ByteA=", DEC ByteA,13,10]
NEXT
I got the expected..
Code:
ADDR=0 ByteA=0
ADDR=1 ByteA=1
ADDR=2 ByteA=2
ADDR=3 ByteA=3
ADDR=4 ByteA=4
ADDR=5 ByteA=5
ADDR=6 ByteA=6
ADDR=7 ByteA=7
ADDR=8 ByteA=8
ADDR=9 ByteA=9
ADDR=10 ByteA=10
But now if in my code i swap the SDA, SCL definition to...
Code:
SDA var PORTC.3
SCL var PORTC.4
i got...
Code:
ADDR=0 ByteA=8
ADDR=1 ByteA=8
ADDR=2 ByteA=8
ADDR=3 ByteA=8
ADDR=4 ByteA=8
ADDR=5 ByteA=8
ADDR=6 ByteA=8
ADDR=7 ByteA=8
ADDR=8 ByteA=8
ADDR=9 ByteA=8
ADDR=10 ByteA=8
Amazing how close to your problem it is huh?
Let's do it much funky now... let's totally remove the EEPROM from the circuit. With the pull-up installed i still have all those 8, without pull-up i got all 0.
Now, with the right code, but the EEPROM have the wrong A<2:0> setting...
i got all 16, reverted... all 8.
Enjoy!
Bookmarks