Uno ser el maestro, que enviar la informacin al pic esclavo para que la gestione. En concreto, en este ejemplo, el pic maestro toma el valor introducido por un teclado numrico. El valor de la tecla pulsada se enviar va I2c al pic esclavo que la presentar en una pantalla lcd. Pulsando la tecla del asterisco (*), la informacin mostrada en la pantalla se borrar.
#use I2C
en la que se establecen las condiciones de la trasmisin como velocidad, pines del pic, direccin del pic esclavo, etc.
Se est indicando que se establece al pic como esclavo (slave) , el pin C4 es la linea SDA del bus , el pin C3 es la linea SCL, se utiliza la velocidad de transmisin baja (slow) y la direccin como esclavo ser A0h.
En el caso del pic maestro, en la directiva se indica MASTER en lugar de SLAVE, y se ignora la opcin ADDRESS:
Para enviar la informacin con el pic maestro emplearemos este grupo de instrucciones:
i2c_start();
i2c_write(0xa0); //...con la direccin del PIC esclavo... i2c_write(tecla); // Enva dato i2c_stop(); //Finalizacin de la transmisin
Para saber cuando el pic esclavo recibe informacin emplearemos la funcin i2c_poll(). Esta funcin devuelve un 1 cuando se ha recibido el dato en el buffer. Comprobando su estado ciclicamente sabremos cuando hay que procesar la informacin recibida.
// Si se ha recibido informacin... //...la guarda en la variable "dato" //Muestra dato recibido por pantalla
//////////////////////////////////////////////////////////////////////////////// // // // // // // // // (c) RobotyPic Aplicacin para PIC MAESTRO // El PIC maestro lee teclado y enva el dato al PIC esclavo via I2C // que lo mostrar en un lcd. // // // COMUNICACIN I2C EN TRE DOS PIC // // //
////////////////////////////////////////////////////////////////////////////////
#include <16F876a.h>
#fuses XT,HS,PUT,NOPROTECT,BROWNOUT,NOLVP,NOWDT
int tecla;
//Dato a transmitir
i2c_start();
i2c_write(0xa0);
void main(){
kbd_init();
port_b_pullups(TRUE);
while (true){
// Lectura del teclado tecla=kbd_getc(); if(tecla!=0){ envio_I2C(); //En "tecla" valor de la tecla pulsada //Si se pulsa teclado... //...se enva el dato
delay_ms(100);
} } }
//////////////////////////////////////////////////////////////////////////////// // // // // // // // // (c) RobotyPic Aplicacin para PIC ESCLAVO // El PIC maestro lee teclado y enva el dato al PIC esclavo via I2C // que lo mostrar en un lcd. // // // COMUNICACIN I2C EN TRE DOS PIC // // //
////////////////////////////////////////////////////////////////////////////////
#include <16F876a.h>
#use standard_io(c)
void main() {
while (1) {
// Recepcin por comunicacin I2C if(i2c_poll()) { dato=i2c_read(); lcd_putc(dato); //Muestra dato recibido por pantalla