Eugene Mwangi
/
ads1256-test-program
This is a test program for the ADS1256 ADC transducer together with the DISCO-L475G STM32 board.
Diff: main.cpp
- Revision:
- 2:4b6ca4d9c0c7
- Parent:
- 0:e5807af79fca
- Child:
- 3:d9b97ff44d28
--- a/main.cpp Mon Aug 05 09:18:18 2019 +0000 +++ b/main.cpp Wed Aug 21 11:02:36 2019 +0000 @@ -8,7 +8,9 @@ #define CHANNEL_NUM 4 -#define DRTYPE 1 // 0 - readDataSync, 1 - readDataMux +//#define DRTYPE 0 // 0 - readDataSync, 1 - readDataMux +//#define SINGLE_CHANNEL 0 //1 - single channel, 0 - multiple channel +#define NO_OF_SENSORS 4 // 1- 1 sensor, 2- 2 sensors, 3- 3 sensors, 4- 4 sensors DigitalIn ndrdy = D10; DigitalOut cs = CHIP_SLCT; @@ -21,37 +23,126 @@ //extern uint8_t ads.channel; /* The current channel*/ int32_t ads_sum = 0; -#if !DRTYPE -/* - @brief: Settling time using Synchronization. -*/ -void readDataSync() -{ - ads.isr(); - pc.printf("The value read is %d\n", ads.adcNow[3]); // Specifically for channel 0. - wait_us(1000); -} +//#if SINGLE_CHANNEL +// /* +// @brief: Read Data from a single channel +// */ +// void readDataSingleChannel() +// { +// ads.readSingleChannel(); +// pc.printf("The value read is %d\n", ads.adcNow[ads.channel]); // Specifically for channel 0. +// wait_us(1000); +// } +//#else + /* + @brief: Read data from multiple channels + */ +// #if !DRTYPE +// /* +// @brief: Settling time using Synchronization. +// */ +// void readDataSync() +// { +// for(int i=ads.channel;i<CHANNEL_NUM;i++) +// { +// ads.channel = i; +// ads.waitDRDY(); +// ads.isr(); +// } +// ads.channel = 0; +// for (int i=0; i<CHANNEL_NUM; i++) +// { +// ads_sum+= ads.adcNow[i]; +// } +// pc.printf("The total value read is %d\n", ads_sum); +// ads_sum=0; +// wait_us(1000); +// } +// #else +// /* +// @brief: Settling time using the Input Multiplexer. +// */ +#if NO_OF_SENSORS == 1 + void readDataMux() + { + uint8_t channel = 0; + ads.readDiffChannel(channel); -#else -/* - @brief: Settling time using the Input Multiplexer. -*/ -void readDataMux() + for (int i=0; i<CHANNEL_NUM; i++) + { + ads_sum+= ads.adcNow[i]; + } + } +#elif NO_OF_SENSORS == 2 + void readDataMux() + { + uint8_t channel = 0; + while(channel < (CHANNEL_NUM-2)) + { + ads.readDiffChannel(++channel); + } + channel = 0; + for (int i=0; i<CHANNEL_NUM; i++) + { + ads_sum+= ads.adcNow[i]; + } + } +#elif NO_OF_SENSORS == 3 + void readDataMux() { - while(ads.channel < CHANNEL_NUM) + uint8_t channel = 0; + while(channel < CHANNEL_NUM-1) { - ads.readDiffChannel(++ads.channel); + ads.readDiffChannel(++channel); } - ads.channel = 0; + channel = 0; for (int i=0; i<CHANNEL_NUM; i++) { ads_sum+= ads.adcNow[i]; } +} +#elif NO_OF_SENSORS == 4 + void readDataMux() + { + uint8_t channel = 0; + while(channel < CHANNEL_NUM) + { + ads.readDiffChannel(++channel); + } + channel = 0; + for (int i=0; i<CHANNEL_NUM; i++) + { + ads_sum+= ads.adcNow[i]; + } + } +#else + void readDataMux() + { + pc.printf("INVALID NUMBER OF SENSORS INITIALIZED\n"); + } +#endif + +// #endif +//#endif +void process(void) +{ +// #if SINGLE_CHANNEL +// readDataSingleChannel(); +// #else +// #if !DRTYPE +// readDataSync(); +// #else + readDataMux(); pc.printf("The total value read is %d\n", ads_sum); ads_sum=0; wait_us(1000); +// #endif +// #endif + pc.printf("The value in adcNow[0] is %d\n", ads.adcNow[0]); + pc.printf("The value in adcNow[1] is %d\n", ads.adcNow[1]); + pc.printf("The value in adcNow[2] is %d\n", ads.adcNow[2]); + pc.printf("The value in adcNow[3] is %d\n", ads.adcNow[3]); } -#endif int main() { @@ -63,7 +154,8 @@ Auto_calibration has also been enabled */ ads.cfgADC(); - ads.setDiffChannel(); // Redundancy feature just toensure that the channel is set correctly. + pc.printf("Device configuration is successful\n"); + ads.setDiffChannel(); // Redundancy feature just to ensure that the channel is set correctly. pc.printf("The set gain value is %d\n", ads.getGainVal()); /*TODO: Calibration*/ @@ -72,10 +164,7 @@ while(1) { - #if !DRTYPE - readDataSync(); - #else - readDataMux(); - #endif + process(); + wait_ms(500); } }