miércoles, 28 de diciembre de 2016

PRACTICA # 9 LIGHT 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 luz ambiente cuyo protocolo es I2C e imprimiremos su valor en la LCD gráfica.
  •  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 luz para manejo de funciones de lectura y escritura.

DESARROLLO:
  •  Del manual Renesas RL78G14 RDK User's Manual ubicamos la dirección el sensor de luz:
  •  Del YRDKRL78G14 schematic ubicamos el sensor de luz:


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 sesnor de luz se encuentran en el archivo LightSensor.c

void LightSensor_Init(void)
{
    uint8_t cmd[2] = { LIGHTSENSOR_CMD, 0x00 };
    I2C_Request r;

    r.iAddr = LIGHTSENSOR_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();
}

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

    r.iAddr = LIGHTSENSOR_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[1] << 8) + target_data[0];
    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