mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-22 15:39:01 +00:00
lsm303agr: fix I2C address auto increment for multi data read
fixes: #475
This commit is contained in:
committed by
Ron Evans
parent
2bca84b8d1
commit
c5dbe18be1
@@ -137,7 +137,7 @@ func (d *Device) Configure(cfg Configuration) (err error) {
|
|||||||
// -1000000.
|
// -1000000.
|
||||||
func (d *Device) ReadAcceleration() (x, y, z int32, err error) {
|
func (d *Device) ReadAcceleration() (x, y, z int32, err error) {
|
||||||
data := d.buf[:6]
|
data := d.buf[:6]
|
||||||
err = d.bus.ReadRegister(uint8(d.AccelAddress), ACCEL_OUT_X_L_A, data)
|
err = d.bus.ReadRegister(uint8(d.AccelAddress), ACCEL_OUT_AUTO_INC, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@ func (d *Device) ReadMagneticField() (x, y, z int32, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data := d.buf[0:6]
|
data := d.buf[0:6]
|
||||||
d.bus.ReadRegister(uint8(d.MagAddress), MAG_OUT_X_L_M, data)
|
d.bus.ReadRegister(uint8(d.MagAddress), MAG_OUT_AUTO_INC, data)
|
||||||
|
|
||||||
x = int32(int16((uint16(data[1])<<8 | uint16(data[0]))))
|
x = int32(int16((uint16(data[1])<<8 | uint16(data[0]))))
|
||||||
y = int32(int16((uint16(data[3])<<8 | uint16(data[2]))))
|
y = int32(int16((uint16(data[3])<<8 | uint16(data[2]))))
|
||||||
@@ -219,7 +219,7 @@ func (d *Device) ReadCompass() (h int32, err error) {
|
|||||||
func (d *Device) ReadTemperature() (t int32, err error) {
|
func (d *Device) ReadTemperature() (t int32, err error) {
|
||||||
|
|
||||||
data := d.buf[:2]
|
data := d.buf[:2]
|
||||||
err = d.bus.ReadRegister(uint8(d.AccelAddress), OUT_TEMP_L_A, data)
|
err = d.bus.ReadRegister(uint8(d.AccelAddress), OUT_TEMP_AUTO_INC, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ const (
|
|||||||
ACCEL_ADDRESS = 0x19
|
ACCEL_ADDRESS = 0x19
|
||||||
MAG_ADDRESS = 0x1E
|
MAG_ADDRESS = 0x1E
|
||||||
|
|
||||||
|
// i2C 8-bit subaddress (SUB): the 7 LSb represent the actual register address
|
||||||
|
// while the MSB enables address auto increment.
|
||||||
|
// If the MSb of the SUB field is 1, the SUB (register address) is
|
||||||
|
// automatically increased to allow multiple data read/writes.
|
||||||
|
ADDR_AUTO_INC_MASK = 0x80
|
||||||
|
|
||||||
// accelerometer registers.
|
// accelerometer registers.
|
||||||
ACCEL_WHO_AM_I = 0x0F
|
ACCEL_WHO_AM_I = 0x0F
|
||||||
ACCEL_CTRL_REG1_A = 0x20
|
ACCEL_CTRL_REG1_A = 0x20
|
||||||
@@ -16,6 +22,7 @@ const (
|
|||||||
ACCEL_OUT_Y_H_A = 0x2B
|
ACCEL_OUT_Y_H_A = 0x2B
|
||||||
ACCEL_OUT_Z_L_A = 0x2C
|
ACCEL_OUT_Z_L_A = 0x2C
|
||||||
ACCEL_OUT_Z_H_A = 0x2D
|
ACCEL_OUT_Z_H_A = 0x2D
|
||||||
|
ACCEL_OUT_AUTO_INC = ACCEL_OUT_X_L_A | ADDR_AUTO_INC_MASK
|
||||||
|
|
||||||
// magnetic sensor registers.
|
// magnetic sensor registers.
|
||||||
MAG_WHO_AM_I = 0x4F
|
MAG_WHO_AM_I = 0x4F
|
||||||
@@ -26,11 +33,13 @@ const (
|
|||||||
MAG_OUT_Y_H_M = 0x6B
|
MAG_OUT_Y_H_M = 0x6B
|
||||||
MAG_OUT_Z_L_M = 0x6C
|
MAG_OUT_Z_L_M = 0x6C
|
||||||
MAG_OUT_Z_H_M = 0x6D
|
MAG_OUT_Z_H_M = 0x6D
|
||||||
|
MAG_OUT_AUTO_INC = MAG_OUT_X_L_M | ADDR_AUTO_INC_MASK
|
||||||
|
|
||||||
// temperature sensor registers.
|
// temperature sensor registers.
|
||||||
TEMP_CFG_REG_A = 0x1F
|
TEMP_CFG_REG_A = 0x1F
|
||||||
OUT_TEMP_L_A = 0x0C
|
OUT_TEMP_L_A = 0x0C
|
||||||
OUT_TEMP_H_A = 0x0D
|
OUT_TEMP_H_A = 0x0D
|
||||||
|
OUT_TEMP_AUTO_INC = OUT_TEMP_L_A | ADDR_AUTO_INC_MASK
|
||||||
|
|
||||||
// accelerometer power mode.
|
// accelerometer power mode.
|
||||||
ACCEL_POWER_NORMAL = 0x00 // default
|
ACCEL_POWER_NORMAL = 0x00 // default
|
||||||
|
|||||||
Reference in New Issue
Block a user