Analog Devices 16 channels, 1MSPS, 12bit ADC with SPI interface
Analog Devices' AD7490 A/D converter chip is a great choice to increase ADC channels to mbed. I wrote a C++ class library, which allows multiple chips on the same SPI serial bus line.
main.cpp - usage of sequential mode (use 2 ADCs)
#include "mbed.h" #include "AD7490.h" DigitalOut myled(LED1); SPI spi(p11,p12,p13); int main() { // set up SPI interface. // should be set before call AD7490 constructer spi.format(16,0); spi.frequency(1000000); // construct AD7490 instances AD7490 ad1(spi, p9); AD7490 ad2(spi, p10); // start ad conversion with sequential mode ad1.sequential(); ad2.sequential(); while(1) { short ad_data[32]; // user buffer area myled = 1; ad1.read(&ad_data[ 0]); // save the first ADC data to buffer ad2.read(&ad_data[16]); // save the second ADC data to buffer myled = 0; for(int i=0; i<32; i++) printf("ch[%2d]: %d\n", i, ad_data[i]); puts(""); wait(1); } }
API
AD7490 | |
AD7490(SPI _spi, PinName _cs) | Constructor. needs SPI instance and the Chip select pin |
unsigned short convert(int ch=0) | Single channel (one shot) conversion. |
void convert(short data[]); | All channels conversion with multiple 'one shot conversion' |
unsigned short sequential(int ch=15); | Start sequential mode, from channel 0 to 'ch'. ch=15 is default |
void read(short buffer[]); | Read data channel [0] to [ch], and copy them to user buffer area |
AD7490.h@2:a547c48d2152, 2012-08-29 (annotated)
- Committer:
- ykuroda
- Date:
- Wed Aug 29 14:19:06 2012 +0000
- Revision:
- 2:a547c48d2152
- Parent:
- 1:ac3b7f978aa3
- Child:
- 3:b7e72acaade2
Comments inserted.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ykuroda | 0:95be7403a10c | 1 | // |
ykuroda | 2:a547c48d2152 | 2 | // AD7490 ... Analog Devices 16 channels, 1MSPS, 12bit ADC |
ykuroda | 2:a547c48d2152 | 3 | // |
ykuroda | 2:a547c48d2152 | 4 | // 2012.08.29 ... Originaly written by Yoji KURODA |
ykuroda | 0:95be7403a10c | 5 | // |
ykuroda | 0:95be7403a10c | 6 | #ifndef _AD7490_H |
ykuroda | 0:95be7403a10c | 7 | #define _AD7490_H |
ykuroda | 0:95be7403a10c | 8 | |
ykuroda | 0:95be7403a10c | 9 | class AD7490 { |
ykuroda | 0:95be7403a10c | 10 | protected: |
ykuroda | 1:ac3b7f978aa3 | 11 | enum CREG { |
ykuroda | 1:ac3b7f978aa3 | 12 | CREG_WRITE = 0x800, |
ykuroda | 1:ac3b7f978aa3 | 13 | CREG_SEQ = 0x400, |
ykuroda | 1:ac3b7f978aa3 | 14 | CREG_ADD3 = 0x200, |
ykuroda | 1:ac3b7f978aa3 | 15 | CREG_ADD2 = 0x100, |
ykuroda | 1:ac3b7f978aa3 | 16 | CREG_ADD1 = 0x080, |
ykuroda | 1:ac3b7f978aa3 | 17 | CREG_ADD0 = 0x040, |
ykuroda | 1:ac3b7f978aa3 | 18 | CREG_PM1 = 0x020, |
ykuroda | 1:ac3b7f978aa3 | 19 | CREG_PM0 = 0x010, |
ykuroda | 1:ac3b7f978aa3 | 20 | CREG_SHADOW = 0x008, |
ykuroda | 1:ac3b7f978aa3 | 21 | CREG_WEAK = 0x004, |
ykuroda | 1:ac3b7f978aa3 | 22 | CREG_RANGE = 0x002, |
ykuroda | 1:ac3b7f978aa3 | 23 | CREG_CODING = 0x001 |
ykuroda | 1:ac3b7f978aa3 | 24 | }; |
ykuroda | 1:ac3b7f978aa3 | 25 | |
ykuroda | 0:95be7403a10c | 26 | SPI spi; |
ykuroda | 0:95be7403a10c | 27 | DigitalOut cs; |
ykuroda | 0:95be7403a10c | 28 | |
ykuroda | 0:95be7403a10c | 29 | public: |
ykuroda | 0:95be7403a10c | 30 | AD7490(SPI _spi, PinName _cs); |
ykuroda | 0:95be7403a10c | 31 | ~AD7490(); |
ykuroda | 0:95be7403a10c | 32 | unsigned short convert(int ch=0); |
ykuroda | 0:95be7403a10c | 33 | void convert(short data[]); |
ykuroda | 0:95be7403a10c | 34 | |
ykuroda | 0:95be7403a10c | 35 | unsigned short sequential(int ch=15); |
ykuroda | 0:95be7403a10c | 36 | unsigned short read(void); |
ykuroda | 0:95be7403a10c | 37 | void read(short data[]); |
ykuroda | 0:95be7403a10c | 38 | }; |
ykuroda | 0:95be7403a10c | 39 | |
ykuroda | 1:ac3b7f978aa3 | 40 | #endif // _AD7490_H |