Aplicación #9.- Lectura de acelerómetro con protocolo I2C

Anuncio
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;
}
Descargar