Sei sulla pagina 1di 2

Aplicación #6.

- Uso de sensor TMP102


La práctica 6 hace uso del protocolo I2C para comunicarse con el sensor TMP102 de
temperatura en Miuva PRO. El sensor está conectado, al igual que el acelerómetro/giroscopio, a los
pines RD5 y RD6 haciendo uso del Hardware interno en el PIC18F87J50 por lo que se usarán las
funciones que hacen uso del módulo de Hardware MSSP (Master Synchronous Serial Port).

Materiales necesarios:

LCD de 2x16 caracteres

Programa en MikroC:

#define dir_temp_lec 0x91 //dirección esclava de lectura


#define dir_temp_esc 0x90 //dirección esclava de escritura

//Configura bits para LCD


sbit LCD_RS at RE1_bit;
sbit LCD_EN at RE3_bit;
sbit LCD_D7 at RE7_bit;
sbit LCD_D6 at RE6_bit;
sbit LCD_D5 at RE5_bit;
sbit LCD_D4 at RE4_bit;
sbit LCD_RS_Direction at TRISE1_bit;
sbit LCD_EN_Direction at TRISE3_bit;
sbit LCD_D7_Direction at TRISE7_bit;
sbit LCD_D6_Direction at TRISE6_bit;
sbit LCD_D5_Direction at TRISE5_bit;
sbit LCD_D4_Direction at TRISE4_bit;

int temp_byte ;
char temp_buf[7];

int lectura_Temp(); //prototipo de función. Descripción al final del código

void main(){

ADCON0 = 0b00011111 ;
TRISJ = 0x00; //puerto J como salida
TRISE2_bit = 0; //en Miuva PRO, el bit RW en la LCD está conectado al bit 2 del Puerto E
LATE2_bit = 0; //MikroC no usa el bit RW, por lo que debemos enviar un 0 lógico
Lcd_Init(); //inicialización del visualizador LCD
Lcd_Cmd(_LCD_CURSOR_OFF); //comando LCD (apagar el cursor)
Lcd_Cmd(_LCD_CLEAR); //comando LCD (borrar el LCD)
I2C2_Init(400000); //inicializa I2C en Hardware a 400KHz
Lcd_Out(1,1,"Sensor TMP102"); //envía mensaje a LCD
while(1)
{
temp_byte = lectura_temp(); //hace lectura del TMP102 usando las funciones del protocolo I2C
LATJ = temp_byte; //se envía la información leida a LEDs
InttoStr(temp_byte, temp_buf); //se hace la conversión de temperatura a string
Lcd_Out(2,1,"Temp. = "); //se envía mensaje a LCD
Lcd_Out(2,10,temp_buf); //se envía temperatura a LCD

}
}

//Función para lectura de temperatura de sensor TMP102. Para mayor información, revisar
//especificaciones de protocolo I2C y ayuda de MikroC
int lectura_temp(){
int x; //variable que almacena información de temperatura
I2C2_Start(); //condición de inicio de I2C
I2C2_Wr(dir_temp_esc); //envía dirección esclava de escritura
I2C2_Wr(0); //envío dirección de registro que se leerá
I2C2_Repeated_Start(); //condición de repetición de inicio de I2C
I2C2_Wr(dir_temp_lec); //envía dirección esclava de lectura
x = I2C2_Rd(0); //lectura de registro de TMP102
I2C2_Stop(); //condición de paro de I2C
return x;
}

Potrebbero piacerti anche