Práctica 6 Miuva Pro: Sensor de temperatura TMP102

Miuva Pro cuenta con un sensor de temperatura TMP102 integrado en la tarjeta, el cual se comunica por medio del protocolo I2C. Por lo tanto en esta práctica aprenderemos a utilizar este recuerso.

Lo primero que haremos será declarar en nuestro código que utilizaremos dicho protocolo:

#use I2C(MASTER, SCL=PIN_D6, SDA=PIN_D5)

Indicamos que Miuva Pro será el dispositivo maestro y la ubicación a donde esta conectado el sensor.

Es importante recordar que cuando se utiliza I2C tenemos que conocer la dirección esclava del dispositivo a utilizar, tanto para escritura como para lectura, en este caso las declararemos de la siguiente forma:

#define dir_lec   0x91        //dirección esclava de lectura
#define dir_esc   0x90        //dirección esclava de escritura

Crearemos también una función que reciba información del sensor, los pasos para recibir información por I2C son:

Recepción de información

1. Enviar condición de incio

2. Enviar dirección esclava de escritura

3. Registro que se va a leer

4. Condición de inicio

5. Enviar dirección esclava de lectura

6. Recibe información del registro

7. Condición de paro

i2c_start();
i2c_write(dir_esc);
i2c_write(0);
i2c_start();
i2c_write(dir_lec;
x = i2c_read(0);
i2c_stop();

El registro 0 del sensor tiene la información de la temperatura detectada.

Por lo tanto el código quedaría de la siguiente forma:

#include <18F87J50.h>
#fuses HSPLL, NOWDT, NOPROTECT, NODEBUG, PLL2
#use delay (clock=24M)       
#include <stdlib.h>
#use I2C(MASTER, SCL=PIN_D6, SDA=PIN_D5)
#define dir_lec   0x91        //dirección esclava de lectura
#define dir_esc   0x90        //dirección esclava de escritura
#include<MPLCD.c>

int temp;      //Variable temporal para almacenar valor de temperatura
int lectura_Temp();  //Prototipo de funcion de lectura de temperatura

void main(){
   lcd_init();                                  //Inicializa LCD
   lcd_gotoxy(1,1);                             //Escribe en la dirección 1,1 de la LCD
   printf(lcd_putc, "Sensor TMP102");           //Sensor TMP102
   while(true){                                 //Bucle infinito
      temp = lectura_Temp();                    //Ejecuta la función lectura_Temp
      lcd_gotoxy(1,2);                          //Escribe en la posición 1,2 de la LCD
      printf(lcd_putc, "Temp. = %d", temp);     //Temp. = "TEMPERATURA"
   }
}

int lectura_Temp(){            //Función lectura_Temp
   int x;                        //Variable  para recibir información del sensor
   i2c_start();                  //Condición de inicio
   i2c_write(dir_esc);           //Dirección esclava para escritura
   i2c_write(0);                 //Registro a leer (0)
   i2c_start();                  //Condición repetida de inicio
   i2c_write(dir_lec);           //Dirección esclava para lectura
   x = i2c_read();               //Recibe byte
   i2c_stop();                   //Condición de paro
   return x;                     //Regresa el valor de temperatura
}

Observa el video demostrativo

…PROXIMAMENTE…

Menú