viernes, 17 de febrero de 2017

PRACTICA # 10 ACELERÓMETRO 3 EJES (I2C)

OBJETIVO:
       Haremos uso de la interface RIIC0 con el que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. 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 YRDKRX63N schematic ubicamos el sensor acelerómetro y su dirección:
PASOS:
  •  Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F563NB, 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

#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)
/*---------------------------------------------------------------------------*
 * Routine:  Accelerometer_Init
 *---------------------------------------------------------------------------*
 * Description:
 *      Initialize the Accelerometer driver.
 * Inputs:
 *      void
 * Outputs:
 *      void
 *---------------------------------------------------------------------------*/
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:
1.- Bajar el código de:
--> Practica #10

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



VÍDEO:


No hay comentarios.:

Publicar un comentario