sábado, 18 de febrero de 2017

PRACTICA # 9 TEMPERATURE SENSOR (I2C)

OBJETIVO:
       Haremos uso de la interface RIIC0 con el que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. Haremos funcionar el sensor de temperatura ADT7410 cuyo protocolo es I2C e imprimiremos su valor en la LCD gráfica en grados Celsius.
  • Inicializaremos el módulo RIIC0
  • Se crearán rutinas de lectura y escritura I2C
  • Se implementará la API del sensor de temperatura para manejo de sus funciones.

DESARROLLO:
  • Del YRDKRX63N schematic ubicamos el sensor de temperatura y su dirección:

PASOS:
  • Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F563NB, debug hardware Segger jLink, después next


4.- Seleccionar C/C++ Source file y por ultimo Finish.


5.- Las rutinas de lectura del sensor de temperatura se encuentran en el archivo TemperatureSensor.c

/* ADT7420 IIC Registers */
#define ADT7420_ADDR                0x90
#define ADT7420_TEMP_MSB_REG        0x00
#define ADT7420_CONFIG_REG          0x03
#define   BSP_TEMP_ADDR  (ADT7420_ADDR >> 1)


void Temperature_Init(void)
{
            uint8_t temp_data[2];

            temp_data[0] = ADT7420_CONFIG_REG; /* configure temperature sensor                   */
            temp_data[1] = 0x00;
            I2C_Write(BSP_TEMP_ADDR, &temp_data[0], 2, true);
}

unsigned int Temperature_Get(void)
{
            uint8_t temp_data[2];
            uint16_t temp;

            temp_data[0] = ADT7420_TEMP_MSB_REG;
            I2C_Write(BSP_TEMP_ADDR, &temp_data[0], 1, false);

            I2C_Read(BSP_TEMP_ADDR, &temp_data[0], 2, false);
            temp = temp_data[0] << 8;
            temp += temp_data[1];

            return temp;
}


6.- La API I2C se encuentra en el archivo I2C.c cuyas rutinas son:

void I2C_Start(void);
void I2C_Read(uint8_t  addr, uint8_t *p_data, uint32_t   len, bool  start)
void I2C_Write(uint8_t  addr, uint8_t *p_data, uint32_t   len, bool  stop)

7.- La función main queda como sigue:

void main(void)
{
            set_ipl( 0 );       // enable interrupts
            SR_Oscilador();     // configura oscilador a 96 Mhz
            SR_TIMER_0();       // Inicializa el Timer 0 en cascada para 16 bits para libreria delay
            SR_LCD_GRAPH();     //  LCD 96x64
            SR_TEMPERATURE_SENSOR(); // sensor de Temperatura I2C ADT7410TRZ

            while(1)
            {
                        u16TemperatureSensor = Temperature_Get(); // consigue el valor de temperatura
                        fValueTemp = u16TemperatureSensor / 100.0;

                        LCDPrintf(0, 0, "Microcarsil ");
                        LCDPrintf(1, 0, "    2017    ");
                        LCDPrintf(2, 0, "Carlos Silva");
                        LCDPrintf(3, 0, "            ");
                        LCDPrintf(4, 0, "Practica #9");
                        LCDPrintf(5, 0, "            ");
                        LCDPrintf(6, 0, "Temp = %.2f", fValueTemp);
                        LCDPrintf(7, 0, "   Celsius  ");
                        delay_ms(100);
            }
}


  • Agregar código, compilar y debug:
1.- Bajar el código de:
--> Practica #9

2.- Compilar con el icono del martillo y debug con el icono del insecto:





VÍDEO:



No hay comentarios.:

Publicar un comentario