Library for reading the BV4205, an i2c analog to digital, 10 channel 10 bit chip. in autoscan mode.

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?

UserRevisionLine numberNew 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 }