Library for reading the BV4205, an i2c analog to digital, 10 channel 10 bit chip. in autoscan mode.
BV4205.cpp@0:2fe9e41f50bb, 2013-03-24 (annotated)
- Committer:
- Julepalme
- Date:
- Sun Mar 24 11:59:09 2013 +0000
- Revision:
- 0:2fe9e41f50bb
Library for reading the BV4205 ADC chip in autoscan mode.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Julepalme | 0:2fe9e41f50bb | 1 | #include "mbed.h" |
Julepalme | 0:2fe9e41f50bb | 2 | #include "BV4205.h" |
Julepalme | 0:2fe9e41f50bb | 3 | |
Julepalme | 0:2fe9e41f50bb | 4 | BV4205::BV4205(PinName sda, PinName scl, int devaddr) |
Julepalme | 0:2fe9e41f50bb | 5 | { |
Julepalme | 0:2fe9e41f50bb | 6 | device = devaddr; |
Julepalme | 0:2fe9e41f50bb | 7 | adc = new I2C(sda, scl); |
Julepalme | 0:2fe9e41f50bb | 8 | |
Julepalme | 0:2fe9e41f50bb | 9 | // Set SCL freq to 75Khz |
Julepalme | 0:2fe9e41f50bb | 10 | adc->frequency(75000); |
Julepalme | 0:2fe9e41f50bb | 11 | |
Julepalme | 0:2fe9e41f50bb | 12 | // Reset device. |
Julepalme | 0:2fe9e41f50bb | 13 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 14 | adc->write(device); |
Julepalme | 0:2fe9e41f50bb | 15 | adc->write(0x95); |
Julepalme | 0:2fe9e41f50bb | 16 | adc->stop(); |
Julepalme | 0:2fe9e41f50bb | 17 | |
Julepalme | 0:2fe9e41f50bb | 18 | // Enable ADC. |
Julepalme | 0:2fe9e41f50bb | 19 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 20 | adc->write(device); |
Julepalme | 0:2fe9e41f50bb | 21 | adc->write(0x05); |
Julepalme | 0:2fe9e41f50bb | 22 | adc->write(0x01); |
Julepalme | 0:2fe9e41f50bb | 23 | adc->stop(); |
Julepalme | 0:2fe9e41f50bb | 24 | |
Julepalme | 0:2fe9e41f50bb | 25 | // Start Autoscan. |
Julepalme | 0:2fe9e41f50bb | 26 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 27 | adc->write(device); |
Julepalme | 0:2fe9e41f50bb | 28 | adc->write(0x06); |
Julepalme | 0:2fe9e41f50bb | 29 | adc->write(0x01); |
Julepalme | 0:2fe9e41f50bb | 30 | adc->stop(); |
Julepalme | 0:2fe9e41f50bb | 31 | } |
Julepalme | 0:2fe9e41f50bb | 32 | |
Julepalme | 0:2fe9e41f50bb | 33 | int BV4205::readChannel(int ch) |
Julepalme | 0:2fe9e41f50bb | 34 | { |
Julepalme | 0:2fe9e41f50bb | 35 | if(ch >= 0 && ch <= 9) |
Julepalme | 0:2fe9e41f50bb | 36 | { |
Julepalme | 0:2fe9e41f50bb | 37 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 38 | adc->write(device); |
Julepalme | 0:2fe9e41f50bb | 39 | adc->write(0x07); |
Julepalme | 0:2fe9e41f50bb | 40 | adc->write(ch*2); |
Julepalme | 0:2fe9e41f50bb | 41 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 42 | adc->write(device+1); |
Julepalme | 0:2fe9e41f50bb | 43 | wait_us(50); |
Julepalme | 0:2fe9e41f50bb | 44 | int H = adc->read(1); |
Julepalme | 0:2fe9e41f50bb | 45 | int L = adc->read(0); |
Julepalme | 0:2fe9e41f50bb | 46 | adc->stop(); |
Julepalme | 0:2fe9e41f50bb | 47 | return (H<<8 | L); |
Julepalme | 0:2fe9e41f50bb | 48 | } else |
Julepalme | 0:2fe9e41f50bb | 49 | return 0; |
Julepalme | 0:2fe9e41f50bb | 50 | } |
Julepalme | 0:2fe9e41f50bb | 51 | |
Julepalme | 0:2fe9e41f50bb | 52 | int BV4205::readRange(int minch, int maxch, int *array) |
Julepalme | 0:2fe9e41f50bb | 53 | { |
Julepalme | 0:2fe9e41f50bb | 54 | if(minch >= 0 && minch <= 9 && maxch >= 0 && maxch <= 9 && maxch>=minch ) |
Julepalme | 0:2fe9e41f50bb | 55 | { |
Julepalme | 0:2fe9e41f50bb | 56 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 57 | adc->write(device); |
Julepalme | 0:2fe9e41f50bb | 58 | adc->write(0x07); |
Julepalme | 0:2fe9e41f50bb | 59 | adc->write(minch*2); |
Julepalme | 0:2fe9e41f50bb | 60 | adc->start(); |
Julepalme | 0:2fe9e41f50bb | 61 | adc->write(device+1); |
Julepalme | 0:2fe9e41f50bb | 62 | wait_us(50); |
Julepalme | 0:2fe9e41f50bb | 63 | |
Julepalme | 0:2fe9e41f50bb | 64 | int i = 0; |
Julepalme | 0:2fe9e41f50bb | 65 | while(i < maxch-minch) |
Julepalme | 0:2fe9e41f50bb | 66 | { |
Julepalme | 0:2fe9e41f50bb | 67 | int H = adc->read(1); |
Julepalme | 0:2fe9e41f50bb | 68 | int L = adc->read(1); |
Julepalme | 0:2fe9e41f50bb | 69 | array[i] = (H<<8 | L); |
Julepalme | 0:2fe9e41f50bb | 70 | i++; |
Julepalme | 0:2fe9e41f50bb | 71 | } |
Julepalme | 0:2fe9e41f50bb | 72 | int H = adc->read(1); |
Julepalme | 0:2fe9e41f50bb | 73 | int L = adc->read(0); |
Julepalme | 0:2fe9e41f50bb | 74 | adc->stop(); |
Julepalme | 0:2fe9e41f50bb | 75 | array[i] = (H<<8 | L); |
Julepalme | 0:2fe9e41f50bb | 76 | return 1; |
Julepalme | 0:2fe9e41f50bb | 77 | } else |
Julepalme | 0:2fe9e41f50bb | 78 | return 0; |
Julepalme | 0:2fe9e41f50bb | 79 | } |