This is a test program for the ADS1256 ADC transducer together with the DISCO-L475G STM32 board.

Dependencies:   mbed ADS1256

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?

UserRevisionLine numberNew 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 }