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:
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 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;
}
·
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 #10
No hay comentarios.:
Publicar un comentario