Skip to content

Commit

Permalink
samples/shields: x-nucleo-iks4a1: Add lis2dux12 accel and temp test
Browse files Browse the repository at this point in the history
Add sample display for lis2duxs12 accel and temp sensors.

(cherry picked from commit 02fa47f)

Original-Signed-off-by: Armando Visconti <armando.visconti@st.com>
GitOrigin-RevId: 02fa47f
Cr-Build-Id: 8727359303490889121
Cr-Build-Url: https://cr-buildbucket.appspot.com/build/8727359303490889121
Copybot-Job-Name: zephyr-main-copybot-downstream
Change-Id: I7f06ce5630895e083460db028a8d7c4c1940a0e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/zephyr/+/6128080
Commit-Queue: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
Tested-by: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
Bot-Commit: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
  • Loading branch information
Armando Visconti authored and Chromeos LUCI committed Dec 28, 2024
1 parent 902cde6 commit 245e435
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 1 deletion.
5 changes: 5 additions & 0 deletions samples/shields/x_nucleo_iks4a1/standard/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ periodically reads and displays data from the shield sensors:
- LSM6DSO16IS 6-Axis acceleration and angular velocity
- LPS22DF ambient temperature and atmospheric pressure
- LIS2MDL 3-Axis magnetic field intensity
- LIS2DUXS12 3-Axis acceleration

Requirements
************
Expand Down Expand Up @@ -53,10 +54,14 @@ Sample Output
LSM6DSV16X: GYro (dps): x: -0.000, y: 0.000, z: 0.005
LPS22DF: Temperature: 25.2 C
LPS22DF: Pressure:98.121 kpa
LIS2DUXS12: Accel (m.s-2): x: 0.689, y: -0.306, z: 9.571
LIS2DUXS12: Temperature: 23.9 C
10:: lis2mdl trig 1839
10:: lsm6dso16is acc trig 3892
10:: lsm6dsv16x acc trig 4412
10:: lps22df trig 174
10:: lis2duxs12 acc trig 3681
<updated endlessly every 2 seconds>
Expand Down
4 changes: 3 additions & 1 deletion samples/shields/x_nucleo_iks4a1/standard/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ CONFIG_SENSOR=y
CONFIG_SENSOR_LOG_LEVEL_DBG=y
CONFIG_LIS2MDL_TRIGGER_OWN_THREAD=y
CONFIG_LPS2XDF_TRIGGER_OWN_THREAD=y
CONFIG_LSM6DSO16IS_TRIGGER_OWN_THREAD=y
CONFIG_LSM6DSO16IS_TRIGGER_NONE=y
CONFIG_LSM6DSO16IS_ENABLE_TEMP=y
CONFIG_LSM6DSV16X_TRIGGER_OWN_THREAD=y
CONFIG_LSM6DSV16X_ENABLE_TEMP=y
CONFIG_LIS2DUX12_TRIGGER_OWN_THREAD=y
CONFIG_LIS2DUX12_ENABLE_TEMP=y
CONFIG_CBPRINTF_FP_SUPPORT=y
68 changes: 68 additions & 0 deletions samples/shields/x_nucleo_iks4a1/standard/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,17 @@ static void lsm6dsv16x_acc_trig_handler(const struct device *dev,
}
#endif

#ifdef CONFIG_LIS2DUX12_TRIGGER
static int lis2duxs12_acc_trig_cnt;

static void lis2duxs12_acc_trig_handler(const struct device *dev,
const struct sensor_trigger *trig)
{
sensor_sample_fetch_chan(dev, SENSOR_CHAN_ALL);
lis2duxs12_acc_trig_cnt++;
}
#endif

static void lis2mdl_config(const struct device *lis2mdl)
{
struct sensor_value odr_attr;
Expand Down Expand Up @@ -214,6 +225,37 @@ static void lps22df_config(const struct device *lps22df)
#endif
}

static void lis2duxs12_config(const struct device *lis2duxs12)
{
struct sensor_value odr_attr, fs_attr;

/* set LSM6DSV16X accel sampling frequency to 200 Hz */
odr_attr.val1 = 200;
odr_attr.val2 = 0;

if (sensor_attr_set(lis2duxs12, SENSOR_CHAN_ACCEL_XYZ,
SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) {
printk("Cannot set sampling frequency for LSM6DSV16X accel\n");
return;
}

sensor_g_to_ms2(16, &fs_attr);

if (sensor_attr_set(lis2duxs12, SENSOR_CHAN_ACCEL_XYZ,
SENSOR_ATTR_FULL_SCALE, &fs_attr) < 0) {
printk("Cannot set fs for LSM6DSV16X accel\n");
return;
}

#ifdef CONFIG_LIS2DUX12_TRIGGER
struct sensor_trigger trig;

trig.type = SENSOR_TRIG_DATA_READY;
trig.chan = SENSOR_CHAN_ACCEL_XYZ;
sensor_trigger_set(lis2duxs12, &trig, lis2duxs12_acc_trig_handler);
#endif
}

int main(void)
{
struct sensor_value lis2mdl_magn[3], lis2mdl_temp, lps22df_press, lps22df_temp;
Expand All @@ -225,10 +267,12 @@ int main(void)
struct sensor_value lsm6dsv16x_temp;
#endif
struct sensor_value lsm6dsv16x_xl[3], lsm6dsv16x_gy[3];
struct sensor_value lis2duxs12_xl[3], lis2duxs12_temp;
const struct device *const lis2mdl = DEVICE_DT_GET_ONE(st_lis2mdl);
const struct device *const lsm6dso16is = DEVICE_DT_GET_ONE(st_lsm6dso16is);
const struct device *const lsm6dsv16x = DEVICE_DT_GET_ONE(st_lsm6dsv16x);
const struct device *const lps22df = DEVICE_DT_GET_ONE(st_lps22df);
const struct device *const lis2duxs12 = DEVICE_DT_GET_ONE(st_lis2duxs12);
int cnt = 1;

if (!device_is_ready(lsm6dso16is)) {
Expand All @@ -247,11 +291,16 @@ int main(void)
printk("%s: device not ready.\n", lps22df->name);
return 0;
}
if (!device_is_ready(lis2duxs12)) {
printk("%s: device not ready.\n", lis2duxs12->name);
return 0;
}

lis2mdl_config(lis2mdl);
lsm6dso16is_config(lsm6dso16is);
lsm6dsv16x_config(lsm6dsv16x);
lps22df_config(lps22df);
lis2duxs12_config(lis2duxs12);

while (1) {
/* Get sensor samples */
Expand Down Expand Up @@ -280,6 +329,12 @@ int main(void)
return 0;
}
#endif
#ifndef CONFIG_LIS2DUX12_TRIGGER
if (sensor_sample_fetch(lis2duxs12) < 0) {
printf("LIS2DUXS12 XL Sensor sample update error\n");
return 0;
}
#endif

/* Get sensor data */
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_XYZ, lis2mdl_magn);
Expand All @@ -298,6 +353,8 @@ int main(void)
sensor_channel_get(lps22df, SENSOR_CHAN_PRESS, &lps22df_press);
sensor_channel_get(lps22df, SENSOR_CHAN_AMBIENT_TEMP, &lps22df_temp);

sensor_channel_get(lis2duxs12, SENSOR_CHAN_ACCEL_XYZ, lis2duxs12_xl);
sensor_channel_get(lis2duxs12, SENSOR_CHAN_DIE_TEMP, &lis2duxs12_temp);
/* Display sensor data */

/* Erase previous */
Expand Down Expand Up @@ -349,6 +406,14 @@ int main(void)
printf("LPS22DF: Temperature: %.1f C\n", sensor_value_to_double(&lps22df_temp));
printf("LPS22DF: Pressure:%.3f kpa\n", sensor_value_to_double(&lps22df_press));

printf("LIS2DUXS12: Accel (m.s-2): x: %.3f, y: %.3f, z: %.3f\n",
sensor_value_to_double(&lis2duxs12_xl[0]),
sensor_value_to_double(&lis2duxs12_xl[1]),
sensor_value_to_double(&lis2duxs12_xl[2]));

printf("LIS2DUXS12: Temperature: %.1f C\n",
sensor_value_to_double(&lis2duxs12_temp));

#if defined(CONFIG_LIS2MDL_TRIGGER)
printk("%d: lis2mdl trig %d\n", cnt, lis2mdl_trig_cnt);
#endif
Expand All @@ -363,6 +428,9 @@ int main(void)
#ifdef CONFIG_LPS2XDF_TRIGGER
printk("%d: lps22df trig %d\n", cnt, lps22df_trig_cnt);
#endif
#ifdef CONFIG_LIS2DUX12_TRIGGER
printk("%d:: lis2duxs12 acc trig %d\n", cnt, lis2duxs12_acc_trig_cnt);
#endif

cnt++;
k_sleep(K_MSEC(2000));
Expand Down

0 comments on commit 245e435

Please sign in to comment.