Aplicación #9.- Lectura de acelerómetro con protocolo I2C La función de esta aplicación es: Familiarizarse con el uso de dispositivos que se comunican a través del protocolo I2C. Para ello utilizamos el módulo Mod-AcelA y Mod-Led. Dependiendo de la inclinación en un eje del acelerómetro el led que esta encendido cambiara su posición dependiendo de la inclinación del acelerómetro. Nota: Puedes obtener mas información de Mod-AcelA en http://www.intesc.mx/productos/modacel Material utilizado: - Mod-AcelA - Mod-Led librerías Activadas: -Software_I2C Programa en MikroC: //conecionnes SDA=PA2, SLC=PA1, Int1=PA0 sbit Soft_I2C_Scl at RA1_bit; sbit Soft_I2C_Sda at RA2_bit; sbit Soft_I2C_Scl_Direction at TRISA1_bit; sbit Soft_I2C_Sda_Direction at TRISA2_bit; short eje_y; //Funciones para iniciar, leer y escribir en el Mod-AcelA void acel_init(); void escritura_acel(unsigned short registro, unsigned short dato); short lectura_acel_y(); void main() { ADCON1 = 0B00001111; TRISB = 0B00000000; TRISA.B0 = 1; soft_I2C_Init(); acel_init(); //Todos los pines del Pic son Digitales //Configura puerto B como salidas. //Inicia el Protocolo I2C //Inicia el acelerometro while(1){ if (porta.f0==1){ eje_y=lectura_acel_y(); if (eje_y<-20){latb=0b00000001;} else if (eje_y<-15){latb=0b00000010;} else if (eje_y<-10){latb=0b00000100;} else if (eje_y<-5){latb=0b00001000;} else if (eje_y>20){latb=0b10000000;} else if (eje_y>15){latb=0b01000000;} else if (eje_y>10){latb=0b00100000;} else if (eje_y>5){latb=0b00010000;} } else { latb= 0b00000000; } } } void acel_init(){ escritura_acel(0x0B, 0x01); escritura_acel(0x2A, 0x20); escritura_acel(0x2B, 0x19); escritura_acel(0x2C, 0x02); escritura_acel(0x2D, 0x01); escritura_acel(0x2E, 0x01); escritura_acel(0x2A, 0x21); } void escritura_acel(unsigned short registro, unsigned short dato) { Soft_I2C_Start(); Soft_I2C_Write(0x3A); Soft_I2C_Write(registro); Soft_I2C_Write(dato); Soft_I2C_Stop(); } short lectura_acel_y(){ short y; Soft_I2C_Start(); Soft_I2C_Write(0x3A); Soft_I2C_Write(0x03); Soft_I2C_Start(); Soft_I2C_Write(0x3B); y = Soft_I2C_Read(0); Soft_I2C_Stop(); return y; }