This commit is contained in:
William Clark 2023-12-22 08:26:10 +00:00
parent 509bae290b
commit 31bcd4d12f
4 changed files with 50 additions and 23 deletions

View File

@ -4,11 +4,23 @@
```
$ ./lis3dh
init OK
configure OK
poll OK
read OK
x: 0.552, y: -0.864, z: -0.152
mag: 1.04
deinit OK
x: 0.5520 g, y: -0.8800 g, z: 0.0760 g, mag: 1.0416
x: 0.5560 g, y: -0.9000 g, z: -0.0040 g, mag: 1.0579
x: 0.5840 g, y: -0.8680 g, z: 0.0360 g, mag: 1.0468
x: 0.5440 g, y: -0.8680 g, z: 0.0920 g, mag: 1.0285
x: 0.5240 g, y: -0.9000 g, z: -0.0600 g, mag: 1.0432
x: 0.6040 g, y: -0.8960 g, z: 0.1000 g, mag: 1.0852
x: 0.5440 g, y: -0.8680 g, z: 0.0000 g, mag: 1.0244
x: 0.5720 g, y: -0.9040 g, z: -0.0160 g, mag: 1.0699
x: 0.5480 g, y: -0.8680 g, z: 0.0200 g, mag: 1.0267
x: 0.5360 g, y: -0.9120 g, z: 0.0240 g, mag: 1.0581
x: 0.5600 g, y: -0.9040 g, z: 0.0000 g, mag: 1.0634
x: 0.5960 g, y: -0.8760 g, z: 0.0640 g, mag: 1.0615
x: 0.5360 g, y: -0.8960 g, z: -0.0040 g, mag: 1.0441
x: 0.5320 g, y: -0.8800 g, z: -0.0080 g, mag: 1.0283
x: 0.5520 g, y: -0.9000 g, z: -0.0440 g, mag: 1.0567
x: 0.5760 g, y: -0.8800 g, z: 0.0320 g, mag: 1.0522
x: 0.5560 g, y: -0.8840 g, z: -0.0240 g, mag: 1.0446
x: 0.5120 g, y: -0.9040 g, z: -0.0360 g, mag: 1.0395
x: 0.6000 g, y: -0.8720 g, z: 0.0320 g, mag: 1.0590
```

View File

@ -32,6 +32,7 @@ int lis3dh_init(lis3dh_t *lis3dh) {
int lis3dh_configure(lis3dh_t *lis3dh) {
uint8_t ctrl_reg1, ctrl_reg4;
uint8_t ref;
int err = 0;
/* last 0b111 enables Z, Y and X axis */
@ -46,9 +47,19 @@ int lis3dh_configure(lis3dh_t *lis3dh) {
ctrl_reg4 |= 0x08;
}
/* set LPen */
if (lis3dh->cfg.mode == LIS3DH_MODE_LP) {
ctrl_reg1 |= 0b1000;
}
err |= lis3dh->dev.write(REG_CTRL_REG1, ctrl_reg1);
err |= lis3dh->dev.write(REG_CTRL_REG4, ctrl_reg4);
/* read REFERENCE to clear internal filter struct */
err |= lis3dh->dev.read(REG_REFERENCE, &ref, 1);
/* sleep for a period TBD ~ ODR */
lis3dh->dev.sleep(5000); /* 5 ms */
return err;
}
@ -121,7 +132,7 @@ static uint8_t acc_sensitivity(lis3dh_t *lis3dh) {
if (mode == LIS3DH_MODE_LP) {
return 192;
} else if (mode == LIS3DH_MODE_NORMAL) {
return 148;
return 48;
} else {
return 12;
}
@ -145,6 +156,7 @@ int lis3dh_read(lis3dh_t *lis3dh) {
have the device auto-increment the address. */
err |= lis3dh->dev.read(REG_OUT_X_L | 0x80, data, 6);
/* x,y,z are now in mg */
x = (((int16_t)((data[0] << 8) | data[1])) >> scale) * sens;
y = (((int16_t)((data[2] << 8) | data[3])) >> scale) * sens;
z = (((int16_t)((data[4] << 8) | data[5])) >> scale) * sens;

View File

@ -4,6 +4,7 @@
#include <stdint.h>
/* rates */
#define LIS3DH_ODR_POWEROFF 0b0000
#define LIS3DH_ODR_1_HZ 0b0001
#define LIS3DH_ODR_10_HZ 0b0010
#define LIS3DH_ODR_25_HZ 0b0011

32
main.c
View File

@ -23,31 +23,33 @@ int main() {
lis.dev.deinit = i2c_deinit;
if (!lis3dh_init(&lis)) {
puts("init OK");
if (lis3dh_init(&lis)) {
puts("init ERR");
}
lis.cfg.mode = LIS3DH_MODE_NORMAL;
lis.cfg.range = LIS3DH_FS_2G;
lis.cfg.rate = LIS3DH_ODR_100_HZ;
if (!lis3dh_configure(&lis)) {
puts("configure OK");
if (lis3dh_configure(&lis)) {
puts("configure ERR");
}
if (!lis3dh_poll(&lis)) {
puts("poll OK");
for(int i=0; i<100; i++) {
if (lis3dh_poll(&lis)) {
puts("poll ERR");
}
if (lis3dh_read(&lis)) {
puts("read ERR");
}
printf("x: % 04.04f g, y: % 04.04f g, z: % 04.04f g, mag:% 04.04f\n",
lis.acc.x, lis.acc.y, lis.acc.z, accel_mag(&lis));
}
if (!lis3dh_read(&lis)) {
puts("read OK");
}
printf("x: %.3g, y: %.3g, z: %.3g\n", lis.acc.x, lis.acc.y, lis.acc.z);
printf("mag: %.3g\n", accel_mag(&lis));
if (!lis3dh_deinit(&lis)) {
puts("deinit OK");
if (lis3dh_deinit(&lis)) {
puts("deinit ERR");
}
return 0;