Módulo I2C Autor : Pierre Launay per.launay en free.fr El bus I2C es un bus serie sincrono desarollado por Philips Descripción del bus I2C aqui Entender el bus I2C aqui Aqui se muestran las funciones para poder trabajar con el módulo I2C Maestro Interno de los PIC. Antes de usar este módulos se debe definir la frecuencia usada con el comando. #define FOSC_HZ 4000000 #include <i2c.h> Se han realizado algunas definiciones como: #define I2C_400K i2c_find_frec(400000) //frecuencia de 400Khz #define I2C_100K i2c_find_frec(100000) //frecuencia de 100Khz #define I2C_40K i2c_find_frec(40000) //frecuencia de 40Khz #define I2C_10K i2c_find_frec(10000) //frecuencia de 10Khz #define I2C_4K i2c_find_frec(4000) //frecuencia de 4Khz #define I2C_1K i2c_find_frec(1000) //frecuencia de 1Khz Estas definiciones pueden ser usandas en la función init_i2c i2c_init Configura el puerto Serie sincrono void i2c_init(unsigned char SPEED_I2C); SPEED_I2C es el registro SSPADD, reloj_I2C=FOSC_HZ/(4*(SSPADD+1)) i2c_wait_for_idle Espera a que el bus esté libre void i2c_wait_for_idle(void); i2c_start principio de trama, secuencia de inicio void i2c_start(void); i2c_restart Devolver una trama, fin de trama y principio de trama permite poner dos tramas para leer . Ver i2c_read() Ejemplo para leer las segundas en una trama : Principio de trama (start), escribir la dirección del circuito I2C, escribir el registro de las segundas, Devolver una trama (restart), escribir la dirección del circuito I2C, leer el registro de las segundas. fin de trama (stop) void i2c_restart(void); i2c_stop fin de trama, secuencia de parada void i2c_stop(void); i2c_delay Tiempo de espera entre fin de trama y principio de trama >=4.7 us (Frecuencia Reloj SCL = 100KHz) void i2c_stop(void); i2c_ack_read recepción del pulso de reconocimiento unsigned char i2c_ack_read (void); "0" buena recepción "1" mala recepción i2c_ack_write emisión. del pulso de reconocimiento void i2c_ack_write(unsigned char ack); "0" la trama puede continuar "1" la trama se para i2c_write el maestro escribe en el esclavo el caracter c, el caracter c puede ser una dirección, una registro interno, un dato void i2c_write(unsigned char c); i2c_write_with_ack El maestro escribe el caracter c en el esclavo y remite el reconocimiento (ack). Esta rutina junta i2c_write(c) y reception_ack() unsigned char i2c_write_with_ack(unsigned char c) ; i2c_read El maestro lee el caracter enviado por el esclavo unsigned char i2c_read(void); i2c_read_with_ack el maestro lee el caracter enviado por el esclavo y envia el reconocimiento (ack). unsigned char i2c_read_with_ack(unsigned char ack); Ejemplo de Módulo I2C para compilar necesitas los siguientes comandos Ejemplo de compilacion : ./compila.sh ej_i2c 16f877a ej_i2c.c int main(void) { return 0; }