Originally Posted by
Darrel Taylor
In your previous code with the F88, 3 is not a valid I2C address.
In the current code, $B is not a valid I2C address.
They should be a multiple of 2.
Bit 0 is reserved for the R/W bit.
Hi Darrel,
Thanks for replying, I did some testing on 1Master and 1Slave with these address($02,$04,$06,$08,$10,$12,$14) and works fine. But when I trying to add Slave #2 I get "0 0 0 0 0 0". It only reads on the Slave #1 correct (displays "1 2 3 4 5 6").
This is how I code to read the 2nd Slave.
Code:
DEFINE OSC 40
DEFINE I2C_HOLD 1
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
PAUSE 100
LCDOUT $FE,1,$FE,2
ADCON1=001111
CMCON=000111
scl VAR PORTC.3
sda VAR PORTC.4
i2c_address VAR BYTE
i2c_address2 VAR BYTE
i2c_data VAR BYTE[6]
i2c_data2 VAR BYTE[6]
main:
i2c_address=$10
pause 200
I2CREAD sda,scl,i2c_address,[STR i2c_data\6]
LCDOUT $FE,$80,"1> ",DEC i2c_data[0]
LCDOUT " ", DEC i2c_data[1]
LCDOUT " ", DEC i2c_data[2]
LCDOUT " ", DEC i2c_data[3]
LCDOUT " ", DEC i2c_data[4]
LCDOUT " ", DEC i2c_data[5]
PAUSE 500
LCDOUT $FE,1
'*********************************************
i2c_address2=$14
pause 200
I2CREAD sda,scl,i2c_address2,[STR i2c_data2\6]
LCDOUT $FE,$80,"2> ",DEC i2c_data2[0]
LCDOUT " ", DEC i2c_data2[1]
LCDOUT " ", DEC i2c_data2[2]
LCDOUT " ", DEC i2c_data2[3]
LCDOUT " ", DEC i2c_data2[4]
LCDOUT " ", DEC i2c_data2[5]
PAUSE 500
LCDOUT $FE,1
GOTO main
BTW the code for Slave1 and Slave2 are identical (Slave#1 is address $10 and Slave#2 is address $14)
What I'm doing wrong in the code? I appreciate very much your help.
Thanks,
Tacbanon
Bookmarks