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

main.cpp

Committer:
mahengjie
Date:
2017-12-07
Revision:
13:871176c55b12
Parent:
12:aee11a1d7f14

File content as of revision 13:871176c55b12:

// Test of ADC, and LED/LCD control of LINAC MO Monitor
// Hengjie Ma
// BNL, NSLS-II, RF
// Nov. 2, 2017
//
#include "mbed.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

// 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;

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

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) 
{
    row = 0;
    col = 0;
    printf("Test of ADC and LCD .....\r\n"); 
    while(true)
    {
        // get new data
        adc();
        // display on serial terminal and LCD
        display();
    }
}