lis3dh/README.md

59 lines
1.6 KiB
Markdown
Raw Normal View History

2023-12-19 10:21:40 +00:00
# LIS3DH
2023-12-27 19:54:47 +00:00
A C89 driver for the 3-axis accelerometer LIS3DH. Supports both i2c and SPI.
> ### Features
> - FIFO
> - HP filter
> - 2G, 4G, 8G and 16G
> - All power modes
> - Interrupt generation
> - Free-fall detection (soon)
> - Single-click detection
2024-01-01 13:08:06 +00:00
> - Double-click detection
> - 4D/6D orientation detection (soon)
## Examples
See the examples/ dir for complete code examples
2023-12-27 20:59:47 +00:00
## Implementation
This driver requires the user to provide pointers to the following abstractely named functions:
2023-12-27 19:54:47 +00:00
2023-12-27 20:59:47 +00:00
This project has example interface code for I2C used on Raspberry Pi.
```c
/* initialise the "interface" */
int init(void);
/* read from device register `reg`, `size` amount of bytes and write them to `dst` */
int read(uint8_t reg, uint8_t *dst, uint32_t size);
/* write `value` to device register `reg` */
int write(uint8_t reg, uint8_t value);
/* sleep for `dur_us` microseconds */
int sleep(uint32_t dur_us);
/* deinitalise the "interface" */
int deinit(void);
```
All above functions return `0` on success.
2023-12-27 19:54:47 +00:00
2023-12-29 23:24:15 +00:00
The `init` and `deinit` pointers can both be set to `NULL` and they won't be run.
2023-12-27 19:54:47 +00:00
### Using i2c on STM32
Simple example code
```c
#define LIS3DH_I2C_ADDR 0x18
int i2c_write(uint8_t reg, uint8_t value) {
2023-12-27 19:59:29 +00:00
uint8_t buf[2] = { reg, value };
HAL_I2C_Master_Transmit(&hi2c2, LIS3DH_I2C_ADDR << 1, buf, 2, HAL_MAX_DELAY);
return 0;
}
int i2c_read(uint8_t reg, uint8_t *dst, uint32_t size) {
2023-12-27 19:59:29 +00:00
uint8_t send[2] = { reg, 0x00 };
HAL_I2C_Master_Transmit(&hi2c2, LIS3DH_I2C_ADDR << 1, send, 2, HAL_MAX_DELAY);
HAL_I2C_Master_Receive(&hi2c2, LIS3DH_I2C_ADDR << 1, dst, size, HAL_MAX_DELAY);
return 0;
}
2023-12-27 19:54:47 +00:00
```