Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AD7490.cpp@4:f059fdd25051, 2012-09-24 (annotated)
- Committer:
- ykuroda
- Date:
- Mon Sep 24 21:47:05 2012 +0000
- Revision:
- 4:f059fdd25051
- Parent:
- 2:a547c48d2152
set destructor virtual
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ykuroda | 2:a547c48d2152 | 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 | 2:a547c48d2152 | 5 | // |
| ykuroda | 0:95be7403a10c | 6 | #include "mbed.h" |
| ykuroda | 0:95be7403a10c | 7 | #include "AD7490.h" |
| ykuroda | 0:95be7403a10c | 8 | |
| ykuroda | 0:95be7403a10c | 9 | AD7490::AD7490(SPI _spi, PinName _cs) |
| ykuroda | 0:95be7403a10c | 10 | : spi(_spi), |
| ykuroda | 0:95be7403a10c | 11 | cs(_cs) |
| ykuroda | 0:95be7403a10c | 12 | { |
| ykuroda | 1:ac3b7f978aa3 | 13 | unsigned short x = 0; |
| ykuroda | 0:95be7403a10c | 14 | |
| ykuroda | 0:95be7403a10c | 15 | for(int i=0; i<3; i++){ |
| ykuroda | 0:95be7403a10c | 16 | |
| ykuroda | 0:95be7403a10c | 17 | x = 0; |
| ykuroda | 0:95be7403a10c | 18 | x |= CREG_WRITE; |
| ykuroda | 0:95be7403a10c | 19 | // x |= CREG_SEQ; |
| ykuroda | 0:95be7403a10c | 20 | // x |= CREG_SHADOW; |
| ykuroda | 0:95be7403a10c | 21 | x |= CREG_ADD3; |
| ykuroda | 0:95be7403a10c | 22 | x |= CREG_ADD2; |
| ykuroda | 0:95be7403a10c | 23 | x |= CREG_ADD1; |
| ykuroda | 0:95be7403a10c | 24 | x |= CREG_ADD0; |
| ykuroda | 0:95be7403a10c | 25 | x |= CREG_PM1; |
| ykuroda | 0:95be7403a10c | 26 | x |= CREG_PM0; |
| ykuroda | 0:95be7403a10c | 27 | x |= CREG_RANGE; |
| ykuroda | 0:95be7403a10c | 28 | x |= CREG_CODING; |
| ykuroda | 0:95be7403a10c | 29 | |
| ykuroda | 0:95be7403a10c | 30 | cs = 0; |
| ykuroda | 1:ac3b7f978aa3 | 31 | unsigned short ret = spi.write(x<<4); |
| ykuroda | 0:95be7403a10c | 32 | cs = 1; |
| ykuroda | 0:95be7403a10c | 33 | |
| ykuroda | 0:95be7403a10c | 34 | // printf("INIT: send = 0x%X, ret = 0x%X\n", x, ret); |
| ykuroda | 0:95be7403a10c | 35 | } |
| ykuroda | 0:95be7403a10c | 36 | } |
| ykuroda | 0:95be7403a10c | 37 | |
| ykuroda | 0:95be7403a10c | 38 | unsigned short |
| ykuroda | 0:95be7403a10c | 39 | AD7490::convert(int ch) |
| ykuroda | 0:95be7403a10c | 40 | { |
| ykuroda | 0:95be7403a10c | 41 | unsigned short x = 0; |
| ykuroda | 0:95be7403a10c | 42 | |
| ykuroda | 0:95be7403a10c | 43 | x |= CREG_WRITE; |
| ykuroda | 0:95be7403a10c | 44 | // x |= CREG_SEQ; |
| ykuroda | 0:95be7403a10c | 45 | // x |= CREG_SHADOW; |
| ykuroda | 0:95be7403a10c | 46 | // x |= CREG_ADD3; |
| ykuroda | 0:95be7403a10c | 47 | // x |= CREG_ADD2; |
| ykuroda | 0:95be7403a10c | 48 | // x |= CREG_ADD1; |
| ykuroda | 0:95be7403a10c | 49 | x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); |
| ykuroda | 0:95be7403a10c | 50 | |
| ykuroda | 0:95be7403a10c | 51 | x |= CREG_PM1; |
| ykuroda | 0:95be7403a10c | 52 | x |= CREG_PM0; |
| ykuroda | 0:95be7403a10c | 53 | x |= CREG_RANGE; |
| ykuroda | 0:95be7403a10c | 54 | x |= CREG_CODING; |
| ykuroda | 0:95be7403a10c | 55 | |
| ykuroda | 0:95be7403a10c | 56 | cs = 0; |
| ykuroda | 1:ac3b7f978aa3 | 57 | unsigned short ret = spi.write(x<<4); |
| ykuroda | 0:95be7403a10c | 58 | cs = 1; |
| ykuroda | 0:95be7403a10c | 59 | |
| ykuroda | 0:95be7403a10c | 60 | // printf("send = 0x%X, ch = %2d, ret = %d\n", x, (ret>>12)&0xF, ret&0xFFF); |
| ykuroda | 0:95be7403a10c | 61 | |
| ykuroda | 0:95be7403a10c | 62 | return ret; |
| ykuroda | 0:95be7403a10c | 63 | } |
| ykuroda | 0:95be7403a10c | 64 | |
| ykuroda | 0:95be7403a10c | 65 | void |
| ykuroda | 0:95be7403a10c | 66 | AD7490::convert(short data[]) |
| ykuroda | 0:95be7403a10c | 67 | { |
| ykuroda | 0:95be7403a10c | 68 | for(int ch=0; ch<16; ch++) data[ch]=0; |
| ykuroda | 0:95be7403a10c | 69 | for(int ch=0; ch<16; ch++){ |
| ykuroda | 0:95be7403a10c | 70 | unsigned short ret = convert(ch); |
| ykuroda | 0:95be7403a10c | 71 | |
| ykuroda | 0:95be7403a10c | 72 | data[ ret>>12&0xF ] = ret&0xFFF; |
| ykuroda | 0:95be7403a10c | 73 | } |
| ykuroda | 0:95be7403a10c | 74 | } |
| ykuroda | 0:95be7403a10c | 75 | |
| ykuroda | 0:95be7403a10c | 76 | |
| ykuroda | 0:95be7403a10c | 77 | unsigned short |
| ykuroda | 0:95be7403a10c | 78 | AD7490::sequential(int ch) |
| ykuroda | 0:95be7403a10c | 79 | { |
| ykuroda | 0:95be7403a10c | 80 | unsigned short x = 0; |
| ykuroda | 0:95be7403a10c | 81 | |
| ykuroda | 0:95be7403a10c | 82 | x |= CREG_WRITE; |
| ykuroda | 0:95be7403a10c | 83 | x |= CREG_SEQ; |
| ykuroda | 0:95be7403a10c | 84 | x |= CREG_SHADOW; |
| ykuroda | 0:95be7403a10c | 85 | // x |= CREG_ADD3; |
| ykuroda | 0:95be7403a10c | 86 | // x |= CREG_ADD2; |
| ykuroda | 0:95be7403a10c | 87 | // x |= CREG_ADD1; |
| ykuroda | 0:95be7403a10c | 88 | x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); |
| ykuroda | 0:95be7403a10c | 89 | |
| ykuroda | 0:95be7403a10c | 90 | x |= CREG_PM1; |
| ykuroda | 0:95be7403a10c | 91 | x |= CREG_PM0; |
| ykuroda | 0:95be7403a10c | 92 | x |= CREG_RANGE; |
| ykuroda | 0:95be7403a10c | 93 | x |= CREG_CODING; |
| ykuroda | 0:95be7403a10c | 94 | |
| ykuroda | 0:95be7403a10c | 95 | cs = 0; |
| ykuroda | 1:ac3b7f978aa3 | 96 | unsigned short ret = spi.write(x<<4); |
| ykuroda | 0:95be7403a10c | 97 | cs = 1; |
| ykuroda | 0:95be7403a10c | 98 | |
| ykuroda | 0:95be7403a10c | 99 | return ret; |
| ykuroda | 0:95be7403a10c | 100 | } |
| ykuroda | 0:95be7403a10c | 101 | |
| ykuroda | 0:95be7403a10c | 102 | |
| ykuroda | 0:95be7403a10c | 103 | |
| ykuroda | 0:95be7403a10c | 104 | unsigned short |
| ykuroda | 0:95be7403a10c | 105 | AD7490::read(void) |
| ykuroda | 0:95be7403a10c | 106 | { |
| ykuroda | 0:95be7403a10c | 107 | unsigned short x = 0; |
| ykuroda | 0:95be7403a10c | 108 | |
| ykuroda | 0:95be7403a10c | 109 | // x |= CREG_WRITE; |
| ykuroda | 0:95be7403a10c | 110 | // x |= CREG_SEQ; |
| ykuroda | 0:95be7403a10c | 111 | // x |= CREG_SHADOW; |
| ykuroda | 0:95be7403a10c | 112 | // x |= CREG_ADD3; |
| ykuroda | 0:95be7403a10c | 113 | // x |= CREG_ADD2; |
| ykuroda | 0:95be7403a10c | 114 | // x |= CREG_ADD1; |
| ykuroda | 0:95be7403a10c | 115 | // x |= (CREG_ADD0|CREG_ADD1|CREG_ADD2|CREG_ADD3) & (ch<<6); |
| ykuroda | 0:95be7403a10c | 116 | |
| ykuroda | 0:95be7403a10c | 117 | // x |= CREG_PM1; |
| ykuroda | 0:95be7403a10c | 118 | // x |= CREG_PM0; |
| ykuroda | 0:95be7403a10c | 119 | // x |= CREG_RANGE; |
| ykuroda | 0:95be7403a10c | 120 | // x |= CREG_CODING; |
| ykuroda | 0:95be7403a10c | 121 | |
| ykuroda | 0:95be7403a10c | 122 | cs = 0; |
| ykuroda | 1:ac3b7f978aa3 | 123 | unsigned short ret = spi.write(x<<4); |
| ykuroda | 0:95be7403a10c | 124 | cs = 1; |
| ykuroda | 0:95be7403a10c | 125 | |
| ykuroda | 0:95be7403a10c | 126 | // printf("send = 0x%X, ch = %2d, ret = %d\n", x, (ret>>12)&0xF, ret&0xFFF); |
| ykuroda | 0:95be7403a10c | 127 | |
| ykuroda | 0:95be7403a10c | 128 | return ret; |
| ykuroda | 0:95be7403a10c | 129 | } |
| ykuroda | 0:95be7403a10c | 130 | |
| ykuroda | 0:95be7403a10c | 131 | void |
| ykuroda | 0:95be7403a10c | 132 | AD7490::read(short data[]) |
| ykuroda | 0:95be7403a10c | 133 | { |
| ykuroda | 0:95be7403a10c | 134 | for(int ch=0; ch<16; ch++) data[ch]=0; |
| ykuroda | 0:95be7403a10c | 135 | for(int ch=0; ch<16; ch++){ |
| ykuroda | 0:95be7403a10c | 136 | unsigned short ret = read(); |
| ykuroda | 0:95be7403a10c | 137 | |
| ykuroda | 0:95be7403a10c | 138 | data[ ret>>12&0xF ] = ret&0xFFF; |
| ykuroda | 0:95be7403a10c | 139 | } |
| ykuroda | 0:95be7403a10c | 140 | } |