TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rachelies en 18 de Julio de 2010, 15:10:15

Título: Recibir 3 bytes por I2C en un pic
Publicado 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
Código: [Seleccionar]
                        i2c_start();
i2c_write(0x0A+1);
tempoB1=i2c_read(0);
i2c_stop();

ESCLAVO para enviar dato cuando el maestro lo solicita
Código: [Seleccionar]
#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
Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: Suky en 18 de Julio de 2010, 18:57:06
Sencillo, esto debería de funcionar:

MAESTRO:
Código: [Seleccionar]
                        i2c_start();
i2c_write(0x0A+1);
tempoB=i2c_read();
tempoB0=i2c_read();
tempoB1=i2c_read(0);
i2c_stop();

ESCLAVO
Código: [Seleccionar]
#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!

Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: rachelies en 19 de Julio de 2010, 02:51:14
Muchas gracias!!!!
Eso lo habia probado, pero me sobraba el "0" que metia en todos los "i2c_read()".

Funciona, muchas gracias.
Un saludo
Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: Suky en 19 de Julio de 2010, 15:18:05
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!
Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: rachelies en 28 de Julio de 2010, 13:55:30
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.
Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: rachelies en 28 de Julio de 2010, 14:32:23
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();
Título: Re: Recibir 3 bytes por I2C en un pic
Publicado por: f-traxx en 22 de Octubre de 2010, 08:46:13
Ya se que es muy tarde para preguntar... pero pudiste solucionarlo??

 :( :(