haa, por error de Sesion tuve que escribir el mensaje original,
Tengo un problema para implementar la comunicacion i2c, y antes de implementar la SPI, que en el foro parece ser mas viable que i2c. me gustaria saber si alguien me podria ayudar para que el maestro lea un esclavo.
Detalles, ya sea ha logrado la comunicacion, de maestro - esclavo ( el siempre inicia la comunicacion y un esclavo espera por tal y si la direccino le corresponde atiende la peticion).. con ello implemente el codigo del lado del maestro de la siguiente manera:
Funcion del Maestro para leer un dato del esclavo:
void receive_i2c(int8 dir1)
{
i2c_start();
i2c_write(dir1); //Direccion del unico pic esclavo definida por sofware, direccion 0XB8
valore = i2c_read(); //aqui solicito un dato
i2c_stop();
delay_ms(2);
}
Funcion del Esclavo
#int_SSP
VOID SSP_isr()
{
estado=i2c_isr_state();
if((estado>0)&&(estado<0x80))
{
dato=i2c_read();
datot=dato;
}
if(estado == 0x80) //Master is requesting data
{
i2c_write(0X01);
}
}
Todo anda muy bien cuando el maestro eenvio su dato al esclavo, lo visualizo en el puerto del del esclavo asi como del maestro, pero el detalle cuando pido un dato al esclavo, pareciera ser que si coje algun dato obvio no el 0x01 QUE LE envio, pesca en si 191, despues de eso todo se cuelga, ya no puedo enviarle un dato al sclavo solo reseteando la comunicacion vuelve a funcionar en el sentido maestro esclavo.
Ya hice mi busqueda de i2c en este foro me arrojo 44 paginas que en promedio son 10 temas por pagina,
llegue a la pagina 4 y encontre que hay que usar la funcion i2c poll pero solo lo muestra para el esclavo. Ya he leido literatura de ic2 y tengo por alli teoria, que podria servirle a quien apenas empieza, ya que este tema se apila en primer instancia, y quien como yo esta empezando en esto de los pics, que la verad son apacionantes son las horas de dormir 4am apox y aqui sigo, y que tengo examen de redes, pero aca ando asi que pues si algun persona con la experiencia de esto me ayude. (nota se que tengo que leer el pdf de el pic, y trabajar con los registros si hay necesidad de ello pero no se como hacerlo en el compilador, como darles la direcciones de cada registro).
Saludos y Gracias
Notas: CCS 4.002, PIC18F4550
maestro
#FUSES XT,NOWDT
#use delay(clock=8000000)
#use i2c(Master,Fast,sda=PIN_B2,scl=PIN_B3,force_hw)
esclavo
#use delay(clock=8000000)
#use i2c(Slave,Fast,sda=PIN_B0,scl=PIN_B1,force_hw,address=0xB8)