Library for reading the BV4205, an i2c analog to digital, 10 channel 10 bit chip. in autoscan mode.
BV4205.cpp
- Committer:
- Julepalme
- Date:
- 2013-03-24
- Revision:
- 0:2fe9e41f50bb
File content as of revision 0:2fe9e41f50bb:
#include "mbed.h" #include "BV4205.h" BV4205::BV4205(PinName sda, PinName scl, int devaddr) { device = devaddr; adc = new I2C(sda, scl); // Set SCL freq to 75Khz adc->frequency(75000); // Reset device. adc->start(); adc->write(device); adc->write(0x95); adc->stop(); // Enable ADC. adc->start(); adc->write(device); adc->write(0x05); adc->write(0x01); adc->stop(); // Start Autoscan. adc->start(); adc->write(device); adc->write(0x06); adc->write(0x01); adc->stop(); } int BV4205::readChannel(int ch) { if(ch >= 0 && ch <= 9) { adc->start(); adc->write(device); adc->write(0x07); adc->write(ch*2); adc->start(); adc->write(device+1); wait_us(50); int H = adc->read(1); int L = adc->read(0); adc->stop(); return (H<<8 | L); } else return 0; } int BV4205::readRange(int minch, int maxch, int *array) { if(minch >= 0 && minch <= 9 && maxch >= 0 && maxch <= 9 && maxch>=minch ) { adc->start(); adc->write(device); adc->write(0x07); adc->write(minch*2); adc->start(); adc->write(device+1); wait_us(50); int i = 0; while(i < maxch-minch) { int H = adc->read(1); int L = adc->read(1); array[i] = (H<<8 | L); i++; } int H = adc->read(1); int L = adc->read(0); adc->stop(); array[i] = (H<<8 | L); return 1; } else return 0; }