Hello Nordic community,
I have a nrf52-DK with SDK15.2.0 and I'm trying to communicate with ST HTS221 sensor. I have the original STEVAL-MKI141V2 evaluation board.
I use the twi_sensor example, provided in the SDK. I added the hts221 driver from the SDK and used the default functions for initialization:
#include <stdio.h>
#include "boards.h"
#include "app_util_platform.h"
#include "app_error.h"
#include "nrf_drv_twi.h"
#include "nrf_delay.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#include "hts221.h"
#include "nrf_twi_mngr.h"
/* TWI instance ID. */
#define TWI_INSTANCE_ID 0
#define MAX_PENDING_TRANSACTIONS 33
void sen_init();
void read_th();
NRF_TWI_MNGR_DEF(m_nrf_twi_mngr, MAX_PENDING_TRANSACTIONS, TWI_INSTANCE_ID);
NRF_TWI_SENSOR_DEF(m_nrf_twi_sensor, &m_nrf_twi_mngr, HTS221_MIN_QUEUE_SIZE);
HTS221_INSTANCE_DEF(m_hts221, &m_nrf_twi_sensor, HTS221_BASE_ADDRESS);
////static hts221_data_t m_sample;
//void print_identity(ret_code_t r, void *p_register_data)
//{
// NRF_LOG_INFO("Identity: %d", *((uint8_t *)p_register_data));
//}
void sen_init ()
{
uint32_t err;
nrf_drv_twi_config_t const config = {
.scl = 27,
.sda = 26,
.frequency = NRF_DRV_TWI_FREQ_100K,
.interrupt_priority = APP_IRQ_PRIORITY_LOWEST,
.clear_bus_init = false
};
APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
NRF_LOG_DEFAULT_BACKENDS_INIT();
NRF_LOG_INFO("TWI sensor example started.");
NRF_LOG_FLUSH();
err = nrf_twi_mngr_init(&m_nrf_twi_mngr, &config);
APP_ERROR_CHECK(err);
err = nrf_twi_sensor_init(&m_nrf_twi_sensor);
APP_ERROR_CHECK(err);
err = hts221_init(&m_hts221);
APP_ERROR_CHECK(err);
err = hts221_avg_cfg (&m_hts221, HTS221_TEMP_SAMPLES_8, HTS221_HUMIDITY_SAMPLES_16);
APP_ERROR_CHECK(err);
// err = hts221_data_rate_cfg (&m_hts221, HTS221_ODR_ONESHOT);
// APP_ERROR_CHECK(err);
uint8_t reg;
err = hts221_who_am_i_read (&m_hts221, NULL, ®);
APP_ERROR_CHECK(err);
NRF_LOG_INFO("WHO AM I: %d ", reg);
NRF_LOG_FLUSH();
}
void read_th()
{
uint32_t err;
int16_t temperature = 0;
int16_t humidity = 0;
int16_t rawtemp;
int16_t rawhum;
err = hts221_temp_read(&m_hts221, NULL ,&rawtemp);
APP_ERROR_CHECK(err);
NRF_LOG_INFO("RAW TEMP : %d\n", rawtemp);
temperature = hts221_temp_process(&m_hts221, rawtemp) /8;
err = hts221_hum_read(&m_hts221, NULL , &rawhum);
APP_ERROR_CHECK(err);
NRF_LOG_INFO("RAW HUMIDITY : %d\n", rawhum);
humidity = hts221_hum_process(&m_hts221, rawhum) /2;
NRF_LOG_INFO("Temp: %d || Humidity: %d\n", temperature, humidity);
}
/**
* @brief Function for main application entry.
*/
int main(void)
{
sen_init();
NRF_LOG_INFO("Here.");
NRF_LOG_FLUSH();
//APP_ERROR_CHECK(err);
while(1)
{
nrf_delay_ms(500);
// read_th();
//NRF_LOG_FLUSH();
}
}
/** @} */
When I try to read the whoami register, I get value 0. When I try to read the temperature and humidity data, always get the same value.
I tried to communicate with ST LIS2DH12 accelerometer the same way with the same example and everything is normal. Is it possible the problem to be in the hts221 libraries?