Skip to content

Commit 1dbf406

Browse files
committed
Small magnetometer code tweaks
1 parent effd11b commit 1dbf406

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

libs/banglejs/jswrap_bangle.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,14 +1406,16 @@ void peripheralPollHandler() {
14061406
data_temp[1] = buf[2] | (buf[3]<<8);
14071407
data_temp[2] = buf[4] | (buf[5]<<8);
14081408
// adjust range to be in uTesla (0.8 scaling according to datasheet)
1409+
// NOTE: it is possible to read calibration values from OTP and apply those but maybe we don't care
14091410
mag.x = ((32768 - data_temp[0]) * 205) >> 8; // * 0.8
14101411
mag.y = ((data_temp[2] - data_temp[1]) * 205) >> 8; // * 0.8
14111412
mag.z = ((65536 - (data_temp[1] + data_temp[2])) * 276) >> 8; // * 1.35 * 0.8 (Z axis is scaled differently)
14121413
// TODO: there are calibration registers
14131414
newReading = true;
1415+
// TODO: should we call SET every so often to keep the sensor happy? example code does.
1416+
/* Write 0x01 to register 0x08, set TM_M bit high - kick off new reading */
1417+
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x08/*MMC36X0_REG_CTRL0*/, 0x01/*MMC36X0_CMD_TM_M*/);
14141418
}
1415-
/* Write 0x01 to register 0x08, set TM_M bit high - kick off new reading */
1416-
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x08/*MMC36X0_REG_CTRL0*/, 0x01/*MMC36X0_CMD_TM_M*/);
14171419
}
14181420
#endif
14191421
if (newReading) {
@@ -3275,23 +3277,23 @@ bool jswrap_banglejs_setCompassPower(bool isOn, JsVar *appId) {
32753277
#endif
32763278
#ifdef MAG_DEVICE_MMC36X0
32773279
if (MAG_DEVICE_MMC36X0_EN) {
3280+
// NOTE: What follows is based on MMC36X0 example code but *isn't*in the datasheet
32783281
/* Change the SET/RESET pulse width */
32793282
/* Write 0x00 to register 0x0A, set ULP_SEL bit low */
3280-
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x0A/*MMC36X0_REG_CTRL2*/, 0x00/*MMC36X0_CMD_OTP_NACT*/);
3281-
3283+
//jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x0A/*MMC36X0_REG_CTRL2*/, 0x00/*MMC36X0_CMD_OTP_NACT*/);
32823284
/* Write 0xE1 to register 0x0F, write password */
3283-
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x0F/*MMC36X0_REG_PASSWORD*/, 0xE1/*MMC36X0_CMD_PASSWORD*/);
3284-
3285+
//jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x0F/*MMC36X0_REG_PASSWORD*/, 0xE1/*MMC36X0_CMD_PASSWORD*/);
32853286
/* Read and write register 0x20, set SR_PW<1:0> = 00 = 1us */
3286-
unsigned char reg;
3287-
jsi2cReadReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x20/*MMC36X0_REG_SR_PWIDTH*/, 1, &reg);
3288-
reg = reg & 0xE7;
3289-
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x20/*MMC36X0_REG_SR_PWIDTH*/, reg);
3287+
//unsigned char reg;
3288+
//jsi2cReadReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x20/*MMC36X0_REG_SR_PWIDTH*/, 1, &reg);
3289+
//reg = reg & 0xE7;
3290+
//jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x20/*MMC36X0_REG_SR_PWIDTH*/, reg);
3291+
32903292
/* SET operation when using dual supply - Write 0x08 to register 0x08, set SET bit high */
32913293
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x08/*MMC36X0_REG_CTRL0*/, 0x08/*MMC36X0_CMD_SET*/);
3292-
/* Write register 0x09, Set BW<1:0> = 0x00, 0x01, 0x02, or 0x03 */
3294+
/* Set highest accuracy mode, Write register 0x09, Set BW<1:0> = 0x00, 0x01, 0x02, or 0x03 */
32933295
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x09/*MMC36X0_REG_CTRL1*/, 0/*MMC36X0_CMD_100HZ*/ );
3294-
/* Enable sensor when from pown down mode to normal mode, Write 0x01 to register 0x08, set TM_M bit high */
3296+
/* Enable sensor when from pown down mode to normal mode, Write 0x01 to register 0x08, set TM_M bit high to kick off a reading */
32953297
jsi2cWriteReg(MAG_I2C, MAG_MMC36X0_ADDR, 0x08/*MMC36X0_REG_CTRL0*/, 1/*MMC36X0_CMD_TM_M*/);
32963298
nrf_delay_ms(10);
32973299
}

0 commit comments

Comments
 (0)