Library for TI's DRV2667
DRV2667.cpp
- Committer:
- takuhachisu
- Date:
- 2018-02-07
- Revision:
- 0:faa5d89e9dac
- Child:
- 1:a57042b30965
File content as of revision 0:faa5d89e9dac:
#include "DRV2667.h" DRV2667::DRV2667(I2C &i2c, InputMux im, Gain gn, Timeout to) { _i2c = &i2c; wait_ms(1); // Wait for 1 ms for the DRV2667 device to power-up before attempting an I2C write i2cWriteByte(0x02, 0x00); // Exit low-power standby mode if(im != Digital || gn != GNx1) { char temp = (i2cReadByte(0x01) | im) | gn; i2cWriteByte(0x01, temp); } if(to != TOx1 || im != Digital) { char temp = (i2cReadByte(0x02) | to) | (im>>1); i2cWriteByte(0x02, temp); } } void DRV2667::i2cWriteByte(char reg, char value) { char buff[2] = {reg, value}; _i2c->write(SLAVE_ADDR_7_BIT<<1, buff, 2); } uint8_t DRV2667::i2cReadByte(char reg) { char result; // Temp result storage _i2c->write(SLAVE_ADDR_7_BIT<<1, ®, 1, true); _i2c->read(SLAVE_ADDR_7_BIT<<1, &result, 1); return result; } void DRV2667::play() { i2cWriteByte(0x02, i2cReadByte(0x02) | 1); } void DRV2667::stop() { i2cWriteByte(0x02, i2cReadByte(0x02) & ~1); } void DRV2667::setWaveform(char* id, char setNum) { for(int i = 0; i < setNum && i < 8; i++) i2cWriteByte(0x03 + i, id[i]); if(setNum < 7) i2cWriteByte(0x03 + setNum, 0); } void DRV2667::loadFIFO(signed char data, char size) { } void DRV2667::setWSP(char data[][4], char waveNum) { i2cWriteByte(0xFF, 0x01); i2cWriteByte(0x00, waveNum / 4 * 5); for(int i = 0; i < waveNum / 4; i++){ i2cWriteByte(0x01 + i * 5, 0x81); i2cWriteByte(0x02 + i * 5, 0x00 + i * 4); i2cWriteByte(0x03 + i * 5, 0x01); i2cWriteByte(0x04 + i * 5, 0x03 + i * 4); i2cWriteByte(0x05 + i * 5, 1); } i2cWriteByte(0xFF, 0x02); for(int i = 0; i < waveNum / 4; i++){ i2cWriteByte(0x00 + i * 4, data[i][0]); i2cWriteByte(0x01 + i * 4, char(data[i][1] / 7.8125)); i2cWriteByte(0x02 + i * 4, data[i][2]); i2cWriteByte(0x03 + i * 4, data[i][3]); } i2cWriteByte(0xFF, 0x00); }