Hola foreros,
Estoy intentando conectar dos pic via i2c.
Mejor dicho lo único que necesito es enviar una cadena de un pic a otro. ( He descartado la conexión serie para tenerla libre para otras tareas. ).
La idea es un pic dedicado a correr el programa, las entradas, las conversiones a/d, la conexión serie, etc ...
Y el segundo pic simplemente recibiría un valor via i2c del primero.
En función de este valor activará o desactivará alguno de los 20 relés integrados en la misma placa.
Es la primera vez que trabajo con I2C, lo tengo practicamente funcionando pero los valores que leo en pic esclavo no concuerdan con los que le envío desde el maestro. ( Es más no cambia el valor recibido aunque cambie el que le envío ).
El codigo que utilizo es el siguiente
Maestro
Include "modedefs.bas" " Include serial modes
DPIN var PORTc.4 " I2C data pin
CPIN var PORTc.3 " I2C clock pin
b0 var byte
b0="Q"
pause 10
:loop
I2CWRITE DPIN,CPIN,2,2,[b0]
pause 250
goto loop
end
Esclavo
"valores lcd
DEFINE LCD_DREG PORTD
" Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
" Set LCD Register Select port
DEFINE LCD_RSREG PORTb
" Set LCD Register Select bit
DEFINE LCD_RSBIT 5
" Set LCD Enable port
DEFINE LCD_EREG PORTb
" Set LCD Enable bit
DEFINE LCD_EBIT 6
" Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
" Set number of lines on LCD
DEFINE LCD_LINES 2
" Set command delay time in us
DEFINE LCD_COMMANDUS 2000
" Set data delay time in us
DEFINE LCD_DATAUS 50
Include "modedefs.bas" " Include serial modes
DPIN var PORTc.4 " I2C data pin
CPIN var PORTc.3 " I2C clock pin
B0 var byte
:loop
I2CREAD DPIN,CPIN,2,2,[B0]
LCDOUT $FE,1,"SEÑAL " , b0 , " ", DEC b0
pause 250
Goto loop
end
Cuando intento correrlo siempre me muestra el valor 16 en el lcd.
un saludo y gracias anticipadas
raul l. cobos