Bueno pues, como dice el tema, solo quiero enviar datos de un pic a otro, en una sola direccion, supongo que es mas sencillo, ahorita estoy probando con el PIC16F877A, aunque supongo podria adaptarme a cualquier otro pic. No es un puerto de alta velocidad o de una gran carga de datos, a lo mucho enviaria 6 bytes , con sus respectivos tiempos entre cada uno. Soy relativamente nuevo en pic's, conozco algo de como programarlos en C y ya he hecho algunos proyectos sencillos; pero ahorita nomas no puedo hacer que se comuniquen 2 pics, he hecho pruebas simulando en proteus y no funciona, he buscado en internet y usualmente la informacion o esta truncada, es decir nunca llegan a una conclusion, o siempre difiere, el manual de ccs me indica las funciones
Pero aunque he cambiado los codigos varias veces, no funciona. Esperaba que me pudieran ayudar a encontrar mi problema, que me falta o que me sobra, o simplemente la fomra en que se envian y adquieren los datos.
Pongo los ultimos codigos que hice:
Maestro:
Esclavo:
Aqui el maestro se supone envia 3 datos al esclavo, con 1 segundo de diferencia entre si, y el esclavo muestra que ha recibido un dato con un led oscilante en algun pin del puerto B.
Espero su ayuda, Gracias de antemano.
Código:
i2c_start()
i2c_poll()
i2c_stop()
i2c_write()
i2c_read()
Pongo los ultimos codigos que hice:
Maestro:
Código:
#INCLUDE <16F877.h>
#USE DELAY(clock=4000000)
#USE I2C (MASTER, SDA=PIN_C4, SCL=PIN_C3,ADDRESS=0XA0,SLOW,FORCE_HW)
#BYTE porta= 0x05
#BYTE portb= 0x06
#BYTE portc= 0x07
#BYTE porta_tris= 0x85
#BYTE portb_tris= 0x86
#BYTE portc_tris= 0x87
main()
{
porta_tris= 0x00;
portb_tris= 0b11111111;
portc_tris= 0x00;
i2c_start();
i2c_write(0b00111111);
i2c_stop();
delay_ms(1000);
i2c_start();
i2c_write(0XA1);
i2c_write(0b11111111);
i2c_stop();
delay_ms(1000);
i2c_start();
i2c_write(0XA0);
i2c_write(0b11111111);
i2c_stop();
delay_ms(1000);
}
Esclavo:
Código:
#INCLUDE <16F877.h>
#USE DELAY(clock=4000000)
#USE I2C (SLAVE, SDA=PIN_C4, SCL=PIN_C3,ADDRESS=0XA1,SLOW,FORCE_HW)
#BYTE porta= 0x05
#BYTE portb= 0x06
#BYTE porta_tris= 0x85
#BYTE portb_tris= 0x86
main()
{
INT R1;
porta_tris= 0x00;
portb_tris= 0x00;
portc_tris= 0b11111111;
R1=0;
if(i2c_poll())
{
R1=i2c_read();
output_toggle(PIN_B0);
}
if(i2c_poll())
{
R1=i2c_read();
output_toggle(PIN_B1);
}
if(i2c_poll())
{
R1=i2c_read();
output_toggle(PIN_B2);
}
}
Aqui el maestro se supone envia 3 datos al esclavo, con 1 segundo de diferencia entre si, y el esclavo muestra que ha recibido un dato con un led oscilante en algun pin del puerto B.
Espero su ayuda, Gracias de antemano.