Test program for testing ADC channels, and 2004 LED display functions of W7500ECO-based LINAC MO monitor board

Dependencies:   TextLCD WIZnetInterface mbed

Fork of TCP_LED_Control-WIZwiki-W7500 by Kiyong Lee

Revision:
13:871176c55b12
Parent:
12:aee11a1d7f14
--- a/main.cpp	Mon Jul 20 07:54:18 2015 +0000
+++ b/main.cpp	Thu Dec 07 21:25:43 2017 +0000
@@ -1,111 +1,115 @@
+// Test of ADC, and LED/LCD control of LINAC MO Monitor
+// Hengjie Ma
+// BNL, NSLS-II, RF
+// Nov. 2, 2017
+//
 #include "mbed.h"
-#include "EthernetInterface.h"
+#include "TextLCD.h"
+#include <stdio.h>
+
+// Analog signal input channel gain scalling
+#define AIN_cal_CL1           1.0;             // RFIN_500M
+#define AIN_cal_CL2           1.0;             // SPB_500M
+#define AIN_cal_CL3           1.0;             // GUN_500M
+#define AIN_cal_CL4           1.0;             // PB_3G
+#define AIN_cal_CL5           1.0;             // K1_3G
+#define AIN_cal_CL6           1.0;             // K2_3G
+#define AIN_cal_OP1           1.0;             // K3_3G
+#define AIN_cal_OP2           1.0;             // 5V_OK
+#define AIN_cal_OP3           1.0;             // 15V_OK
+#define AIN_cal_OP4           1.0;             // AIN3_SPARE
+#define AIN_cal_OP5           1.0;             // AIN6_SPARE
+#define AIN_cal_OP6           1.0;             // AIN7_SPARE
+
+const char * msg[] = {
+    "RFIN500M ",
+    "SPB500M  ",
+    "GUN500M  ",
+    "PB_3G    ",
+    "K1_3G    ",
+    "K2_3G    ",
+    "K3_3G    ",
+    "5V_OK    ",
+    "15V_OK   ",
+    "AIN3_xxx ",
+    "AIN6_xxx ",
+    "AIN7_xxx " 
+};
+
+char trailer[16] = "me too !!!";    // test string
 
-#define ECHO_SERVER_PORT   7
+// I/O pin assignment
+DigitalOut myled(LED1);  // on-board blue LED, an idiot light for TCP sanity check
+// Primary group of analog inputs 
+AnalogIn   AIN0(P30);    // AIN0, RFIN_500M/K3_3G
+AnalogIn   AIN1(P29);    // AIN1, SPB_500M/5V_OK
+AnalogIn   AIN2(P28);    // AIN2, GUN_500M/15V_OK
+AnalogIn   AIN3(P27);    // AIN3, PB_3G/AIN3_SPARE
+AnalogIn   AIN6(P26);    // AIN6, K1_3G/AIN6_SPARE
+AnalogIn   AIN7(P25);    // AIN7, K2_3G/AIN7_SPARE
+DigitalOut MUX_CTL(P11); // PA11, 
+
+// TextLCD lcd(P9, P10, P5,P6, P7, P8, TextLCD::LCD20x4D, NC, NC, TextLCD::US2066_3V3);  // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=US2066
+TextLCD lcd(P9, P10, P5,P8, P7, P6, TextLCD::LCD20x4D, NC, NC, TextLCD::US2066_3V3);  // RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=US2066
+float meas[12];
+int idx, row, col;
 
-DigitalOut myled(LED1);
+void adc()
+{
+    // Update data 
+    MUX_CTL = 0;   // group 1
+    meas[0]  = AIN0.read() * AIN_cal_CL1; 
+    meas[1]  = AIN1.read() * AIN_cal_CL2; 
+    meas[2]  = AIN2.read() * AIN_cal_CL3;
+    meas[3]  = AIN3.read() * AIN_cal_CL4;     
+    meas[4]  = AIN6.read() * AIN_cal_CL5; 
+    meas[5]  = AIN7.read() * AIN_cal_CL6;     
+    MUX_CTL  = 1;   // group 2
+    meas[6]  = AIN0.read() * AIN_cal_OP1; 
+    meas[7]  = AIN1.read() * AIN_cal_OP2; 
+    meas[8]  = AIN2.read() * AIN_cal_OP3;
+    meas[9]  = AIN3.read() * AIN_cal_OP4;     
+    meas[10] = AIN6.read() * AIN_cal_OP5; 
+    meas[11] = AIN7.read() * AIN_cal_OP6;  
+}
 
-int compare_strings(char [], char []); 
+void display()
+{  
+    // update 20x4 LED/LCD display,  rolling  
+    lcd.cls();
+    for ( idx = 0; idx < 12; idx++)
+    { 
+        // lcd.locate(col,row); 
+        printf("%s %.2f V \r\n", msg[idx], meas[idx]);      // serial console
+        lcd.printf("%s %.2f V \r\n",msg[idx], meas[idx]);   // LCD/LED
+        wait(0.1);           // per line
+        if (row < 3)
+            {
+                row = row + 1;
+                lcd.locate(col,row);
+            }
+        else
+        {
+            row = 0;
+            wait(1.0);       // pause after each frame of 4 lines
+            lcd.cls();
+        }
+    }
+    // wait(1.0);           // every 4-screen, 12-line total, refresh 
+}
 
 int main (void) 
 {
-    myled = 1; // LED OFF in WIZwiki-W7500
-    int flag=1;
-
-    printf("Wait a second...\r\n");
-    uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x55, 0x51, 0x52}; 
-    EthernetInterface eth;
-    eth.init(mac_addr); //Use DHCP
-    eth.connect();
-    printf("Server IP Address is %s\r\n", eth.getIPAddress());
-    
-    TCPSocketServer server;
-    server.bind(ECHO_SERVER_PORT);
-    server.listen();
-    
-    while (true) 
+    row = 0;
+    col = 0;
+    printf("Test of ADC and LCD .....\r\n"); 
+    while(true)
     {
-        printf("Wait for new connection...\r\n");
-        TCPSocketConnection client;
-        server.accept(client);
-        client.set_blocking(false, 15000); // Timeout after (1.5)s
-        
-        printf("Connection from: %s\r\n", client.get_address());
-        char buffer[256];
-        while (true) {
-            int n = client.receive(buffer, sizeof(buffer));
-            if (n <= 0) break;
-            
-            // print received message to terminal
-            buffer[n] = '\0';
-            printf("Received message from Client :'%s'\r\n",buffer);
-
-          
-            // LED control if received message matches pre-defined command
-            /*
-            if ((buffer[0] == 'L') & (buffer[1] == '\0'))
-              myled = 0; // LED ON in WIZwiki-W7500
-            else
-              myled = 1;
-            */
-            
-            // LED control if received message matches pre-defined command
-            char command_buf[256] = {'L', 'E', 'D', '_', 'O', 'N', '\0'};
-
-            char string[256];
-            strcpy (string, command_buf);
-            printf("Received command : %s\n", string);
-
-            flag = compare_strings(buffer, command_buf);
-            
-            if (flag == 0) {
-              myled = 0; // LED ON in WIZwiki-W7500
-              printf("LED is turned on!\r\n");
-            }
-            else {
-              myled = 1;
-              printf("LED is turned off!\r\n");
-            }
+        // get new data
+        adc();
+        // display on serial terminal and LCD
+        display();
+    }
+}
 
 
-            // LED blink one time                        
-            //myled = 0; // LED ON in WIZwiki-W7500
-            //wait(1.0);
-            //myled = 1; // LED OFF in WIZwiki-W7500
-            
-            // reverse the message
-            char temp;
-            for(int f = 0, l = n-1; f<l; f++,l--){
-                temp = buffer[f];
-                buffer[f] = buffer[l];
-                buffer[l] = temp;
-                }
-            
-            // print reversed message to terminal
-            printf("Sending message to Client: '%s'\r\n",buffer);
-            
-            // Echo received message back to client
-            client.send_all(buffer, n);
-            if (n <= 0) break;
-        }
-        
-        client.close();
-    }
-    
-}
-
-int compare_strings(char a[], char b[])
-{
-   int c = 0;
- 
-   while (a[c] == b[c]) {
-      if (a[c] == '\0' || b[c] == '\0')
-         break;
-      c++;
-   }
- 
-   if (a[c] == '\0' && b[c] == '\0')
-      return 0;
-   else
-      return -1;
-}