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

Dependencies:   mbed ADS1256

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);
     }
 }