Haremos uso de la interface RIIC0 con el que cuenta el MCU R5F562N8 de la tarjeta de evaluación YRDKRX62N. Haremos funcionar el sensor acelerómetro ADXL345 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 acelerómetro para manejo de sus funciones.
DESARROLLO:
- Del YRDKRX62N schematic ubicamos el sensor acelerómetro y su dirección:
PASOS:
- Creación de un proyecto:
2.- New/ C Project / Renesas RXC ToolChain
3.- Seleccionar el target R5F562N8, debug hardware Segger jLink, después next
4.- Seleccionar C/C++ Source file y por ultimo Finish.
5.- Las rutinas de lectura del sensor acelerómetro se encuentran en el archivo accelerometer.c
/* ADXL345 IIC Registers */
#define ACCEL_ADDR_XYZ 0x3Au
#define DATA_FORMAT_REG 0x31u
#define POWER_CTL_REG 0x2Du
#define FIFO_CTL_REG 0x38u
#define DATAX_REG 0x32u
#define DATAY_REG 0x34u
#define DATAZ_REG 0x36u
#define SELF_TEST 0x80u
#define DATA_FORMAT 0x03u
#define PWR_CFG 0x08u
#define FIFO_CFG 0x00u
const uint8_t
acc_reg_addr[3] = { DATAX_REG, DATAY_REG, DATAZ_REG };
#define
ACCEL_ADDR (ACCEL_ADDR_XYZ >> 1)
void Accelerometer_Init(void)
{
uint8_t
accel_data[2];
/* accelerometer
data format */
/* range +/-
16g */
/* right justified
with sign extension */
accel_data[0] = DATA_FORMAT_REG; /* Full resolution mode */
accel_data[1] = 0x0B;
I2C_Write(ACCEL_ADDR, accel_data, 2, true);
accel_data[0] = POWER_CTL_REG; /* take accelerometer out of standby
mode */
accel_data[1] = 0x08;
I2C_Write(ACCEL_ADDR, accel_data, 2, true);
accel_data[0] = FIFO_CTL_REG; /* put FIFO into bypass mode */
accel_data[1] = 0x00;
I2C_Write(ACCEL_ADDR, accel_data, 2, true);
}
unsigned short *Accelerometer_Get(void)
{
unsigned short u16AcelerometerValues[3];
uint8_t target_reg, acc_axis;
uint8_t target_data[2] = {0x00, 0x00};
for(acc_axis=0; acc_axis<3; acc_axis++)
{
target_reg
= acc_reg_addr[acc_axis];
I2C_Write(ACCEL_ADDR,
&target_reg, 1, true);
I2C_Read(ACCEL_ADDR,
target_data, 2, true);
u16AcelerometerValues[acc_axis] = (target_data[1] << 8) +
target_data[0];
}
return u16AcelerometerValues;
}
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)
- Agregar código, compilar y debug:
--> Practica #10
2.- Compilar con el icono del martillo y debug con el icono del insecto:
VÍDEO:
No hay comentarios.:
Publicar un comentario