martes, 27 de diciembre de 2016

PRACTICA # 10 TEMPERATURE SENSOR (I2C)

OBJETIVO:

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

DESARROLLO:
  • Del manual Renesas RL78G14 RDK User's Manual ubicamos la dirección del sensor de temperatura:

  • Del YRDKRL78G14 schematic ubicamos el sensor de temperatura:


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


  • Configurar proyecto:
1.- Clic derecho en el proyecto generado y seleccionar Properties



2.- Seleccionar C/C++ Build / Settings / Linker / Device y establecer los siguientes parámetros:
OCD = 85
Option Byte = efffe8
Palomear: Use range of debug monitor area. Nota: No establecer ningún valor solo dejarlo en blanco.
Apply y después OK.



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

void Temperature_Init(void)
{
    /* Declare error flag */
    uint8_t cmd[2] = { ADT7410_CONFIG_REG, 0x00 };
    I2C_Request r;

    r.iAddr = ADT7410_ADDR>>1;
    r.iSpeed = 100; /* kHz */
    r.iWriteData = cmd;
    r.iWriteLength = 2;
    r.iReadData = 0;
    r.iReadLength = 0;

            I2C_Start();
            I2C_Write(&r, 0);
            delay_ms(10);
            G_100usTimer = 0;
            G_msTimer = 0;
            R_IT_Start();
            while (I2C_IsBusy() && G_msTimer < 20)
            {
                        __nop();
            }
            R_IT_Stop();
}

unsigned int Temperature_Get(void)
{
    uint8_t target_reg;
    uint8_t target_data[2] = {0x00, 0x00};
    uint16_t temp = 0;
    I2C_Request r;

    r.iAddr = ADT7410_ADDR>>1;
    r.iSpeed = 100;
    r.iWriteData = &target_reg;
            r.iWriteLength = 1;
            r.iReadData = target_data;
            r.iReadLength = 2;
            I2C_Write(&r, 0);
            delay_ms(10);
            G_100usTimer = 0;
            G_msTimer = 0;
            R_IT_Start();
            while (I2C_IsBusy() && G_msTimer < 20)
            {
                        __nop();
            }
            R_IT_Stop();
            I2C_Read(&r, 0);
            delay_ms(10);
            G_100usTimer = 0;
            G_msTimer = 0;
            R_IT_Start();
            while (I2C_IsBusy() && G_msTimer < 20)
            {
                        __nop();
            }
            R_IT_Stop();

    /* Convert the device measurement into a decimal number and insert
     into a temporary string to be displayed */
    temp = (target_data[0] << 8) + target_data[1];

    return temp;
}

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

·          void I2C_Start(void);
·          void I2C_Stop(void);
·          void I2C_Read(I2C_Request *iRequest, void(*callback)(void));
·          void I2C_Write(I2C_Request *iRequest, void(*callback)(void));
·          _Bool I2C_IsBusy(void);

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

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



VÍDEO:

No hay comentarios.:

Publicar un comentario