TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rachelies en 18 de Julio de 2010, 15:10:15
-
Hola:
Tengo un pic como esclavo que lee un valor analogico y lo envia al master cuando este se lo pide por i2c. Ahora lo que quiero es enviar 3bytes, de 3 variables analogicas, pero no se como hacerlo. Este es el código que utilizaba hasta ahora par un byte:
MAESTRO para solicitar dato
i2c_start();
i2c_write(0x0A+1);
tempoB1=i2c_read(0);
i2c_stop();
ESCLAVO para enviar dato cuando el maestro lo solicita
#INT_SSP
void ssp_interrupt()
{
state=i2c_isr_state();
if(state==0x80){
i2c_write(buffer[0x00]);
No se como modificarlo para solicitar/enviar 3 bytes.
Gracias y un saludo
-
Sencillo, esto debería de funcionar:
MAESTRO:
i2c_start();
i2c_write(0x0A+1);
tempoB=i2c_read();
tempoB0=i2c_read();
tempoB1=i2c_read(0);
i2c_stop();
ESCLAVO
#INT_SSP
void ssp_interrupt()
{
state=i2c_isr_state();
if(state==0x80){
i2c_write(buffer[0x00]);
i2c_write(buffer[0x01]);
i2c_write(buffer[0x02]);
Saludos!
-
Muchas gracias!!!!
Eso lo habia probado, pero me sobraba el "0" que metia en todos los "i2c_read()".
Funciona, muchas gracias.
Un saludo
-
Siempre es recomendable tener la ayuda de CCS a mano, el 0 se coloca para enviar un No Ack por parte del master y terminar la operación de lectura.
Saludos!
-
Sigo dando vueltas a esto, ya que simulando en proteus funciona a la perfeccion, pero haciendo el montaje con los pic no funciona. Si envío un solo byte si, pero los 3 de esta forma no.
-
Sigo probando, y el primer byte si que se recibe, pero el resto ya no, y se queda pillado el master en segundo i2c_read();
-
Ya se que es muy tarde para preguntar... pero pudiste solucionarlo??
:( :(