Other Parts Discussed in Thread: LP-MSPM0L1306, , MSPM0L1306, SYSCONFIG
Tool/software:
Hello Support-Team,
I assembled the HDC2010 on my product launchpad LP-MSPM0L1306 and now i am trying to get it worked. So, I am not using the EVM.
Is there somewhere an example code for the HDC2010 with the MSPM0L1306 (or another MCU from TI)?
I found these files attached to this question. Is there a latest updated version of these codes?
Thank you very much
Best regards
Maunil Chopra
/*
* ======== config.c ========
* Configuration-specific definitions
*
* DO NOT EDIT - This file is generated by the SysConfig tool for
* the TI Sensors in this application.
*/
#include <stdint.h>
#include "HDC2010.h"
#include "config.h"
/*
* ======== HDC2010_0 ========
* HDC2010 Sensor configuration settings
*/
static HDC2010_State HDC2010_0_state = {
.intConfig = (HDC2010_INT_CONFIG_DRDY_EN_DISABLE | \
HDC2010_INT_CONFIG_TH_EN_DISABLE | \
HDC2010_INT_CONFIG_TL_EN_DISABLE | \
HDC2010_INT_CONFIG_HH_EN_DISABLE | \
HDC2010_INT_CONFIG_HL_EN_DISABLE),
.tempOffset = 0x00U,
.humOffset = 0x00U,
.tempThresLow = 0x00U,
.tempThresHigh = 0xFFU,
.humThresLow = 0x00U,
.humThresHigh = 0xFFU,
.config = (HDC2010_CONFIG_SOFT_RES_DISABLE | \
HDC2010_CONFIG_AMM_DISABLED | \
HDC2010_CONFIG_HEAT_EN_DISABLE | \
HDC2010_CONFIG_DRDY_INT_EN_DISABLE | \
HDC2010_CONFIG_INT_POL_LOW | \
HDC2010_CONFIG_INT_MODE_LEVEL),
.measConfig = (HDC2010_MEAS_CONFIG_TRES_14BIT | \
HDC2010_MEAS_CONFIG_HRES_14BIT | \
HDC2010_MEAS_CONFIG_MEAS_CONF_HT | \
HDC2010_MEAS_CONFIG_MEAS_TRIG_NA),
/* I2C bus ID */
.busId = 0,
/* Sensor address on the I2C bus */
.devAddr = 0x40U,
/* Conversion time for temperature (in ms) */
.convWaitTemp = 1,
/* Conversion time for humidity (in ms) */
.convWaitHum = 1,
};
const HDC2010_Handle HDC2010_0 = &HDC2010_0_state;
/*
* ======== HDC2010.c ========
* HDC2010 APIs for initialization and use of the HDC2010 peripheral
*
* DO NOT EDIT - This file is generated by the SysConfig tool for
* the TI Sensors in this application.
*/
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "HDC2010.h"
#include "mcu.h"
/*
* ======== HDC2010_config ========
* Configure device with current settings.
*/
void HDC2010_config(HDC2010_Handle sensor)
{
uint8_t txBuf[9];
/* Initialize the bus containing this sensor */
mcu_i2cInit(sensor->busId);
/* Write all eight registers 0x07 -> 0x0E in one transfer */
txBuf[0] = HDC2010_INT_CONFIG;
memcpy(&txBuf[1], &sensor->intConfig, 8);
mcu_i2cTransfer(sensor->busId, sensor->devAddr,
txBuf, 9, NULL, 0);
/* Write Measurement Configuration Register last (0x0F) */
txBuf[0] = HDC2010_MEAS_CONFIG;
if (sensor->config & HDC2010_CONFIG_AMM_MASK) {
txBuf[1] = sensor->measConfig | HDC2010_MEAS_CONFIG_MEAS_TRIG_START;
}
else {
txBuf[1] = sensor->measConfig;
}
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 2, NULL, 0);
}
/*
* ======== HDC2010_read ========
* Read temperature and humidity registers
*/
void HDC2010_read(HDC2010_Handle sensor, uint32_t result[])
{
uint8_t txBuf[2];
uint8_t rxBuf[4] = {0};
/* If AMM is disabled trigger conversion */
if (!(sensor->config & HDC2010_CONFIG_AMM_MASK)) {
/* Reset AMM to start measurement */
txBuf[0] = HDC2010_MEAS_CONFIG;
txBuf[1] = sensor->measConfig | HDC2010_MEAS_CONFIG_MEAS_TRIG_START;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 2, NULL, 0);
/* Wait for conversion to complete */
mcu_msWait(sensor->convWaitHum);
}
/* Read registers, LOW and HIGH bytes */
txBuf[0] = HDC2010_TEMP_LOW;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 1, rxBuf, 4);
result[0] = (uint16_t)rxBuf[1] << 8 | rxBuf[0];
result[1] = (uint16_t)rxBuf[3] << 8 | rxBuf[2];
}
/*
* ======== HDC2010_humRead ========
* Read humidity register
*/
uint16_t HDC2010_humRead(HDC2010_Handle sensor)
{
uint8_t txBuf[2];
uint8_t rxBuf[2] = {0};
uint32_t hum;
/* If AMM is disabled trigger conversion */
if (!(sensor->config & HDC2010_CONFIG_AMM_MASK)) {
/* Reset AMM to start measurement */
txBuf[0] = HDC2010_MEAS_CONFIG;
txBuf[1] = sensor->measConfig | HDC2010_MEAS_CONFIG_MEAS_TRIG_START;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 2, NULL, 0);
/* Wait for conversion to complete */
mcu_msWait(sensor->convWaitHum);
}
/* Read humidity registers, LOW and HIGH bytes */
txBuf[0] = HDC2010_HUM_LOW;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 1, rxBuf, 2);
hum = (uint16_t)rxBuf[1] << 8 | rxBuf[0];
return (hum);
}
/*
* ======== HDC2010_humToFloatRelative ========
* Convert humidity to a relative percentage
*/
float HDC2010_humToFloatRelative(uint16_t x)
{
return ((float)x * (100.0f / 65536.0f));
}
/*
* ======== HDC2010_humToIntRelative ========
* Convert raw humidity register value to the relative humidity rounded
* to the nearest whole number; a range of 0 to 100.
*/
uint32_t HDC2010_humToIntRelative(uint16_t x)
{
/* round relative humidity to nearest whole number */
return ((25 * (uint32_t)x + 0x2000) >> 14);
}
/*
* ======== HDC2010_humToPermille ========
* Convert raw humidity register value to integral value equal to
* ten times the relative humidity
*/
uint32_t HDC2010_humToPermille(uint16_t x)
{
/* compute (relative humidity * 10) and truncate to a whole number */
return ((125 * (uint32_t)x) >> 13);
}
/*
* ======== HDC2010_tempRead ========
* Read temperature register
*/
uint16_t HDC2010_tempRead(HDC2010_Handle sensor)
{
uint8_t txBuf[2];
uint8_t rxBuf[2] = {0};
uint16_t tmp;
/* If AMM is disabled trigger conversion */
if (!(sensor->config & HDC2010_CONFIG_AMM_MASK)) {
/* Reset AMM to start measurement */
txBuf[0] = HDC2010_MEAS_CONFIG;
txBuf[1] = sensor->measConfig | HDC2010_MEAS_CONFIG_MEAS_TRIG_START;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 2, NULL, 0);
/* Wait for conversion to complete */
mcu_msWait(sensor->convWaitTemp);
}
/* Read temperature registers, LOW and HIGH */
txBuf[0] = HDC2010_TEMP_LOW;
mcu_i2cTransfer(sensor->busId, sensor->devAddr, txBuf, 1, rxBuf, 2);
tmp = (uint16_t)rxBuf[1] << 8 | rxBuf[0];
return (tmp);
}
/*
* ======== HDC2010_tempToFloatCelsius ========
* Convert temperature to celsius
*/
float HDC2010_tempToFloatCelsius(uint16_t x)
{
return ((float)x * (165.0f / 65536.0f) - 40.0f);
}
/*
* ======== HDC2010_tempToIntCelsius ========
* Convert raw temperature register value to whole degrees Celsius
*/
int32_t HDC2010_tempToIntCelsius(uint16_t raw)
{
int32_t x;
/* add bias so truncation rounds to the nearest whole value */
x = ((int32_t)raw * 165 + 32768) >> 16;
/* shift result so result is Celsius */
return (x - 40);
}
/*
* ======== HDC2010_tempToMilliCelsius ========
* Convert raw temperature register value to milli-degrees Celsius
*/
int32_t HDC2010_tempToMilliCelsius(uint16_t x)
{
/* Scale conversion for milli-degrees and truncate rather than round */
return ((20625 * (int32_t)x) >> 13) - 40000;
}
/*
* ======== main.c ========
* Simple example that uses the Sensors APIs
*/
#include "HDC2010.h"
#include "mcu.h" /* for mcu_msWait() */
#include "config.h" /* for sensor handle names */
uint16_t hdc20100Temp;
float hdc20100TempAsFloatCelsius;
long int hdc20100TempAsIntCelsius;
long int hdc20100TempAsMilliCelsius;
uint16_t hdc20100Hum;
float hdc20100HumAsFloatRelative;
unsigned int hdc20100HumAsIntRelative;
/*
* ======== main ========
*/
int main(void)
{
HDC2010_config(HDC2010_0);
for (;;) {
/* Note: in continuous modes (CC), polling rate should
* not exceed sensor conversion rate
*/
mcu_msWait(1000); /* delay 1 sec */
/* Read HDC2010_0 temperature */
hdc20100Temp = HDC2010_tempRead(HDC2010_0);
hdc20100TempAsFloatCelsius = HDC2010_tempToFloatCelsius(hdc20100Temp);
hdc20100TempAsMilliCelsius = HDC2010_tempToMilliCelsius(hdc20100Temp);
hdc20100TempAsIntCelsius = HDC2010_tempToIntCelsius(hdc20100Temp);
/* Read HDC2010_0 humidity */
hdc20100Hum = HDC2010_humRead(HDC2010_0);
hdc20100HumAsFloatRelative = HDC2010_humToFloatRelative(hdc20100Hum);
hdc20100HumAsIntRelative = HDC2010_humToIntRelative(hdc20100Hum);
}
}
/*
* Include Generic Header Files Here
*/
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "mcu.h"
/*
* Include MCU Specific Header Files Here
*/
/*
* Include MCU Specific Header Files Here
*/
/********* MCU SPECIFIC I2C CODE STARTS HERE **********/
void mcu_i2cInit(uint8_t busId)
{
/* Add MCU specific init necessary for I2C to be used */
}
int8_t mcu_i2cTransfer( uint8_t busId, uint8_t i2cAddr,
uint8_t *dataToWrite, uint8_t writeLength,
uint8_t *dataToRead, uint8_t readLength)
{
/*
* Add MCU specific I2C read/write code here.
*/
/*
* Add MCU specific return code for error handling
*/
return (0);
}
/********* MCU SPECIFIC I2C CODE ENDS HERE **********/
/********* MCU SPECIFIC DELAY CODE STARTS HERE ************/
void mcu_msWait(uint16_t msWait)
{
/*
* Add MCU specific wait loop for msWait. The unit is in milli-seconds
*/
}
void mcu_usWait(uint16_t usWait)
{
/*
* Add MCU specific wait loop for usWait. The unit is in micro-seconds
*/
}
/********* MCU SPECIFIC DELAY CODE ENDS HERE ************/