Analog Devices 16 channels, 1MSPS, 12bit ADC with SPI interface
Embed:
(wiki syntax)
Show/hide line numbers
AD7490.cpp
00001 // 00002 // AD7490 ... Analog Devices 16 channels, 1MSPS, 12bit ADC 00003 // 00004 // 2012.08.29 ... Originaly written by Yoji KURODA 00005 // 00006 #include "mbed.h" 00007 #include "AD7490.h" 00008 00009 AD7490::AD7490(SPI _spi, PinName _cs) 00010 : spi(_spi), 00011 cs(_cs) 00012 { 00013 unsigned short x = 0; 00014 00015 for(int i=0; i<3; i++){ 00016 00017 x = 0; 00018 x |= CREG_WRITE; 00019 // x |= CREG_SEQ; 00020 // x |= CREG_SHADOW; 00021 x |= CREG_ADD3; 00022 x |= CREG_ADD2; 00023 x |= CREG_ADD1; 00024 x |= CREG_ADD0; 00025 x |= CREG_PM1; 00026 x |= CREG_PM0; 00027 x |= CREG_RANGE; 00028 x |= CREG_CODING; 00029 00030 cs = 0; 00031 unsigned short ret = spi.write(x<<4); 00032 cs = 1; 00033 00034 // printf("INIT: send = 0x%X, ret = 0x%X\n", x, ret); 00035 } 00036 } 00037 00038 unsigned short 00039 AD7490::convert(int ch) 00040 { 00041 unsigned short x = 0; 00042 00043 x |= CREG_WRITE; 00044 // x |= CREG_SEQ; 00045 // x |= CREG_SHADOW; 00046 // x |= CREG_ADD3; 00047 // x |= CREG_ADD2; 00048 // x |= CREG_ADD1; 00049 x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); 00050 00051 x |= CREG_PM1; 00052 x |= CREG_PM0; 00053 x |= CREG_RANGE; 00054 x |= CREG_CODING; 00055 00056 cs = 0; 00057 unsigned short ret = spi.write(x<<4); 00058 cs = 1; 00059 00060 // printf("send = 0x%X, ch = %2d, ret = %d\n", x, (ret>>12)&0xF, ret&0xFFF); 00061 00062 return ret; 00063 } 00064 00065 void 00066 AD7490::convert(short data[]) 00067 { 00068 for(int ch=0; ch<16; ch++) data[ch]=0; 00069 for(int ch=0; ch<16; ch++){ 00070 unsigned short ret = convert(ch); 00071 00072 data[ ret>>12&0xF ] = ret&0xFFF; 00073 } 00074 } 00075 00076 00077 unsigned short 00078 AD7490::sequential(int ch) 00079 { 00080 unsigned short x = 0; 00081 00082 x |= CREG_WRITE; 00083 x |= CREG_SEQ; 00084 x |= CREG_SHADOW; 00085 // x |= CREG_ADD3; 00086 // x |= CREG_ADD2; 00087 // x |= CREG_ADD1; 00088 x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); 00089 00090 x |= CREG_PM1; 00091 x |= CREG_PM0; 00092 x |= CREG_RANGE; 00093 x |= CREG_CODING; 00094 00095 cs = 0; 00096 unsigned short ret = spi.write(x<<4); 00097 cs = 1; 00098 00099 return ret; 00100 } 00101 00102 00103 00104 unsigned short 00105 AD7490::read(void) 00106 { 00107 unsigned short x = 0; 00108 00109 // x |= CREG_WRITE; 00110 // x |= CREG_SEQ; 00111 // x |= CREG_SHADOW; 00112 // x |= CREG_ADD3; 00113 // x |= CREG_ADD2; 00114 // x |= CREG_ADD1; 00115 // x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); 00116 00117 // x |= CREG_PM1; 00118 // x |= CREG_PM0; 00119 // x |= CREG_RANGE; 00120 // x |= CREG_CODING; 00121 00122 cs = 0; 00123 unsigned short ret = spi.write(x<<4); 00124 cs = 1; 00125 00126 // printf("send = 0x%X, ch = %2d, ret = %d\n", x, (ret>>12)&0xF, ret&0xFFF); 00127 00128 return ret; 00129 } 00130 00131 void 00132 AD7490::read(short data[]) 00133 { 00134 for(int ch=0; ch<16; ch++) data[ch]=0; 00135 for(int ch=0; ch<16; ch++){ 00136 unsigned short ret = read(); 00137 00138 data[ ret>>12&0xF ] = ret&0xFFF; 00139 } 00140 }
Generated on Thu Jul 21 2022 23:06:18 by 1.7.2