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:
2.- New/ C Project
- Configurar proyecto:
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;
}
·
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:
--> Practica #9
VÍDEO:
No hay comentarios.:
Publicar un comentario