Eugene Mwangi
/
ads1256-test-program
This is a test program for the ADS1256 ADC transducer together with the DISCO-L475G STM32 board.
main.cpp@0:e5807af79fca, 2019-08-05 (annotated)
- Committer:
- Eugene0469
- Date:
- Mon Aug 05 09:14:29 2019 +0000
- Revision:
- 0:e5807af79fca
- Child:
- 2:4b6ca4d9c0c7
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Eugene0469 | 0:e5807af79fca | 1 | #include "mbed.h" |
Eugene0469 | 0:e5807af79fca | 2 | #include "ADS1256.h" |
Eugene0469 | 0:e5807af79fca | 3 | |
Eugene0469 | 0:e5807af79fca | 4 | #define SPI_MOSI D11 |
Eugene0469 | 0:e5807af79fca | 5 | #define SPI_MISO D12 |
Eugene0469 | 0:e5807af79fca | 6 | #define SPI_SCLK D13 |
Eugene0469 | 0:e5807af79fca | 7 | #define CHIP_SLCT D9 |
Eugene0469 | 0:e5807af79fca | 8 | #define CHANNEL_NUM 4 |
Eugene0469 | 0:e5807af79fca | 9 | |
Eugene0469 | 0:e5807af79fca | 10 | |
Eugene0469 | 0:e5807af79fca | 11 | #define DRTYPE 1 // 0 - readDataSync, 1 - readDataMux |
Eugene0469 | 0:e5807af79fca | 12 | |
Eugene0469 | 0:e5807af79fca | 13 | DigitalIn ndrdy = D10; |
Eugene0469 | 0:e5807af79fca | 14 | DigitalOut cs = CHIP_SLCT; |
Eugene0469 | 0:e5807af79fca | 15 | |
Eugene0469 | 0:e5807af79fca | 16 | Serial pc(USBTX, USBRX); |
Eugene0469 | 0:e5807af79fca | 17 | |
Eugene0469 | 0:e5807af79fca | 18 | SPI spi(SPI_MOSI, SPI_MISO, SPI_SCLK); |
Eugene0469 | 0:e5807af79fca | 19 | ADS1256 ads(&spi, &ndrdy, &cs); |
Eugene0469 | 0:e5807af79fca | 20 | |
Eugene0469 | 0:e5807af79fca | 21 | //extern uint8_t ads.channel; /* The current channel*/ |
Eugene0469 | 0:e5807af79fca | 22 | int32_t ads_sum = 0; |
Eugene0469 | 0:e5807af79fca | 23 | |
Eugene0469 | 0:e5807af79fca | 24 | #if !DRTYPE |
Eugene0469 | 0:e5807af79fca | 25 | /* |
Eugene0469 | 0:e5807af79fca | 26 | @brief: Settling time using Synchronization. |
Eugene0469 | 0:e5807af79fca | 27 | */ |
Eugene0469 | 0:e5807af79fca | 28 | void readDataSync() |
Eugene0469 | 0:e5807af79fca | 29 | { |
Eugene0469 | 0:e5807af79fca | 30 | ads.isr(); |
Eugene0469 | 0:e5807af79fca | 31 | pc.printf("The value read is %d\n", ads.adcNow[3]); // Specifically for channel 0. |
Eugene0469 | 0:e5807af79fca | 32 | wait_us(1000); |
Eugene0469 | 0:e5807af79fca | 33 | } |
Eugene0469 | 0:e5807af79fca | 34 | |
Eugene0469 | 0:e5807af79fca | 35 | #else |
Eugene0469 | 0:e5807af79fca | 36 | /* |
Eugene0469 | 0:e5807af79fca | 37 | @brief: Settling time using the Input Multiplexer. |
Eugene0469 | 0:e5807af79fca | 38 | */ |
Eugene0469 | 0:e5807af79fca | 39 | void readDataMux() |
Eugene0469 | 0:e5807af79fca | 40 | { |
Eugene0469 | 0:e5807af79fca | 41 | while(ads.channel < CHANNEL_NUM) |
Eugene0469 | 0:e5807af79fca | 42 | { |
Eugene0469 | 0:e5807af79fca | 43 | ads.readDiffChannel(++ads.channel); |
Eugene0469 | 0:e5807af79fca | 44 | } |
Eugene0469 | 0:e5807af79fca | 45 | ads.channel = 0; |
Eugene0469 | 0:e5807af79fca | 46 | for (int i=0; i<CHANNEL_NUM; i++) |
Eugene0469 | 0:e5807af79fca | 47 | { |
Eugene0469 | 0:e5807af79fca | 48 | ads_sum+= ads.adcNow[i]; |
Eugene0469 | 0:e5807af79fca | 49 | } |
Eugene0469 | 0:e5807af79fca | 50 | pc.printf("The total value read is %d\n", ads_sum); |
Eugene0469 | 0:e5807af79fca | 51 | ads_sum=0; |
Eugene0469 | 0:e5807af79fca | 52 | wait_us(1000); |
Eugene0469 | 0:e5807af79fca | 53 | } |
Eugene0469 | 0:e5807af79fca | 54 | #endif |
Eugene0469 | 0:e5807af79fca | 55 | |
Eugene0469 | 0:e5807af79fca | 56 | int main() |
Eugene0469 | 0:e5807af79fca | 57 | { |
Eugene0469 | 0:e5807af79fca | 58 | /* @brief Set the configuration parameters: |
Eugene0469 | 0:e5807af79fca | 59 | channel == 0(0x01h), |
Eugene0469 | 0:e5807af79fca | 60 | PGA gain == 64, |
Eugene0469 | 0:e5807af79fca | 61 | Buffer == 1 (enabled), |
Eugene0469 | 0:e5807af79fca | 62 | Datarate == 2.5SPS. |
Eugene0469 | 0:e5807af79fca | 63 | Auto_calibration has also been enabled |
Eugene0469 | 0:e5807af79fca | 64 | */ |
Eugene0469 | 0:e5807af79fca | 65 | ads.cfgADC(); |
Eugene0469 | 0:e5807af79fca | 66 | ads.setDiffChannel(); // Redundancy feature just toensure that the channel is set correctly. |
Eugene0469 | 0:e5807af79fca | 67 | pc.printf("The set gain value is %d\n", ads.getGainVal()); |
Eugene0469 | 0:e5807af79fca | 68 | |
Eugene0469 | 0:e5807af79fca | 69 | /*TODO: Calibration*/ |
Eugene0469 | 0:e5807af79fca | 70 | ads.selfCal(); |
Eugene0469 | 0:e5807af79fca | 71 | ads.sysOffCal(); |
Eugene0469 | 0:e5807af79fca | 72 | |
Eugene0469 | 0:e5807af79fca | 73 | while(1) |
Eugene0469 | 0:e5807af79fca | 74 | { |
Eugene0469 | 0:e5807af79fca | 75 | #if !DRTYPE |
Eugene0469 | 0:e5807af79fca | 76 | readDataSync(); |
Eugene0469 | 0:e5807af79fca | 77 | #else |
Eugene0469 | 0:e5807af79fca | 78 | readDataMux(); |
Eugene0469 | 0:e5807af79fca | 79 | #endif |
Eugene0469 | 0:e5807af79fca | 80 | } |
Eugene0469 | 0:e5807af79fca | 81 | } |