THz Bias Controller

Dependencies:   USBDevice mbed

Fork of USBSerial_HelloWorld by Samuel Mokrani

Committer:
malcolmlear
Date:
Wed Oct 24 11:05:33 2018 +0000
Revision:
11:79e90b5d04c9
Parent:
10:6924c58f3a91
Example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 7:5e693654d5b4 1 #include "mbed.h"
samux 7:5e693654d5b4 2 #include "USBSerial.h"
malcolmlear 10:6924c58f3a91 3
malcolmlear 10:6924c58f3a91 4 SPI spi(p5, p6, p7); // DAC mosi, miso, sclk
malcolmlear 10:6924c58f3a91 5 DigitalOut cs(p8); // active low DAC enable
malcolmlear 11:79e90b5d04c9 6 DigitalOut outen(p21); // active high pulse output enable
malcolmlear 11:79e90b5d04c9 7 DigitalOut outxpol1(p23); // pulse output x1 polarity
malcolmlear 11:79e90b5d04c9 8 DigitalOut outxpol2(p22); // pulse output x2 polarity
malcolmlear 11:79e90b5d04c9 9 DigitalOut outypol1(p25); // pulse output y1 polarity
malcolmlear 11:79e90b5d04c9 10 DigitalOut outypol2(p24); // pulse output y2 polarity
malcolmlear 10:6924c58f3a91 11 USBSerial serial; // USB serial communication
malcolmlear 10:6924c58f3a91 12
malcolmlear 10:6924c58f3a91 13 int v = 0; // voltage 0 to 1023 = 0 to 102.3 V
malcolmlear 10:6924c58f3a91 14 int t, i, e, len;
malcolmlear 10:6924c58f3a91 15 char CmdIn[128];
malcolmlear 10:6924c58f3a91 16 char CmdP0[] = "P=0"; // polarity 0
malcolmlear 10:6924c58f3a91 17 char CmdP1[] = "P=1"; // polarity 1
malcolmlear 10:6924c58f3a91 18 char CmdP2[] = "P=2"; // polarity 2
malcolmlear 10:6924c58f3a91 19 char CmdP3[] = "P=3"; // polarity 3
malcolmlear 10:6924c58f3a91 20 char CmdO0[] = "O=0"; // output off
malcolmlear 10:6924c58f3a91 21 char CmdO1[] = "O=1"; // output on
malcolmlear 10:6924c58f3a91 22 char CmdVn[] = "V="; // voltage
malcolmlear 10:6924c58f3a91 23 char CmdID[] = "ID"; // Identification
malcolmlear 10:6924c58f3a91 24
malcolmlear 10:6924c58f3a91 25 void Voltage(int d) {
malcolmlear 10:6924c58f3a91 26 d = (d<<4)&0x3fff; // value is bit 13 to 4
malcolmlear 10:6924c58f3a91 27 cs = 0;
malcolmlear 10:6924c58f3a91 28 spi.write(d);
malcolmlear 10:6924c58f3a91 29 cs = 1;
malcolmlear 10:6924c58f3a91 30 }
malcolmlear 10:6924c58f3a91 31
malcolmlear 10:6924c58f3a91 32 int main() {
malcolmlear 11:79e90b5d04c9 33 outen = 0; // output off
malcolmlear 11:79e90b5d04c9 34 outxpol1 = 0;
malcolmlear 11:79e90b5d04c9 35 outxpol2 = 0;
malcolmlear 11:79e90b5d04c9 36 outypol1 = 0;
malcolmlear 11:79e90b5d04c9 37 outypol2 = 0;
malcolmlear 10:6924c58f3a91 38 cs = 1; // spi not selected
malcolmlear 10:6924c58f3a91 39 spi.format(16,2);
malcolmlear 10:6924c58f3a91 40 spi.frequency(1000000);
malcolmlear 10:6924c58f3a91 41 Voltage(v);
samux 7:5e693654d5b4 42 while(1)
samux 7:5e693654d5b4 43 {
malcolmlear 10:6924c58f3a91 44 e = 1; // set error
malcolmlear 10:6924c58f3a91 45 serial.scanf("%s", CmdIn);
malcolmlear 10:6924c58f3a91 46 if (strcmp(CmdIn, CmdP0) == 0) {
malcolmlear 11:79e90b5d04c9 47 outxpol1 = 1;
malcolmlear 11:79e90b5d04c9 48 outxpol2 = 0;
malcolmlear 11:79e90b5d04c9 49 outypol1 = 1;
malcolmlear 11:79e90b5d04c9 50 outypol2 = 0;
malcolmlear 10:6924c58f3a91 51 e = 0;
malcolmlear 10:6924c58f3a91 52 }
malcolmlear 10:6924c58f3a91 53 if (strcmp(CmdIn, CmdP1) == 0) {
malcolmlear 11:79e90b5d04c9 54 outxpol1 = 1;
malcolmlear 11:79e90b5d04c9 55 outxpol2 = 0;
malcolmlear 11:79e90b5d04c9 56 outypol1 = 0;
malcolmlear 11:79e90b5d04c9 57 outypol2 = 1;
malcolmlear 10:6924c58f3a91 58 e = 0;
malcolmlear 10:6924c58f3a91 59 }
malcolmlear 10:6924c58f3a91 60 if (strcmp(CmdIn, CmdP2) == 0) {
malcolmlear 11:79e90b5d04c9 61 outxpol1 = 0;
malcolmlear 11:79e90b5d04c9 62 outxpol2 = 1;
malcolmlear 11:79e90b5d04c9 63 outypol1 = 0;
malcolmlear 11:79e90b5d04c9 64 outypol2 = 1;
malcolmlear 10:6924c58f3a91 65 e = 0;
malcolmlear 10:6924c58f3a91 66 }
malcolmlear 10:6924c58f3a91 67 if (strcmp(CmdIn, CmdP3) == 0) {
malcolmlear 11:79e90b5d04c9 68 outxpol1 = 0;
malcolmlear 11:79e90b5d04c9 69 outxpol2 = 1;
malcolmlear 11:79e90b5d04c9 70 outypol1 = 1;
malcolmlear 11:79e90b5d04c9 71 outypol2 = 0;
malcolmlear 10:6924c58f3a91 72 e = 0;
malcolmlear 10:6924c58f3a91 73 }
malcolmlear 10:6924c58f3a91 74 if (strcmp(CmdIn, CmdO0) == 0) {
malcolmlear 11:79e90b5d04c9 75 outen = 0;
malcolmlear 10:6924c58f3a91 76 e = 0;
malcolmlear 10:6924c58f3a91 77 }
malcolmlear 10:6924c58f3a91 78 if (strcmp(CmdIn, CmdO1) == 0) {
malcolmlear 11:79e90b5d04c9 79 outen = 1;
malcolmlear 10:6924c58f3a91 80 e = 0;
malcolmlear 10:6924c58f3a91 81 }
malcolmlear 10:6924c58f3a91 82 if (strncmp(CmdIn, CmdVn, 2) == 0) {
malcolmlear 10:6924c58f3a91 83 v = 0;
malcolmlear 10:6924c58f3a91 84 len = strlen(CmdIn);
malcolmlear 10:6924c58f3a91 85 for(i=2; i<len; i++){
malcolmlear 10:6924c58f3a91 86 t = CmdIn[i] - '0';
malcolmlear 10:6924c58f3a91 87 if ((t >= 0) && (t <= 9)) {
malcolmlear 10:6924c58f3a91 88 v = v * 10 + t;
malcolmlear 10:6924c58f3a91 89 }
malcolmlear 10:6924c58f3a91 90 else {
malcolmlear 10:6924c58f3a91 91 v = -1; // on input error make v out of range
malcolmlear 10:6924c58f3a91 92 break;
malcolmlear 10:6924c58f3a91 93 }
malcolmlear 10:6924c58f3a91 94 }
malcolmlear 10:6924c58f3a91 95 if ((v >= 0) && (v <= 1023)) {
malcolmlear 10:6924c58f3a91 96 Voltage(v);
malcolmlear 10:6924c58f3a91 97 e = 0;
malcolmlear 10:6924c58f3a91 98 }
malcolmlear 10:6924c58f3a91 99 }
malcolmlear 10:6924c58f3a91 100 if (strcmp(CmdIn, CmdID) == 0) {
malcolmlear 10:6924c58f3a91 101 serial.printf( "Bias Voltage Generator V1.0\n");
malcolmlear 10:6924c58f3a91 102 e = 0;
malcolmlear 10:6924c58f3a91 103 }
malcolmlear 10:6924c58f3a91 104 if (e == 1) {
malcolmlear 10:6924c58f3a91 105 serial.printf( "Command Error ");
malcolmlear 10:6924c58f3a91 106 serial.printf("%s\n", CmdIn);
malcolmlear 10:6924c58f3a91 107 }
malcolmlear 10:6924c58f3a91 108 else {
malcolmlear 10:6924c58f3a91 109 serial.printf( "Command Executed\n");
malcolmlear 10:6924c58f3a91 110 }
samux 9:d88699a0905a 111 wait(1);
samux 7:5e693654d5b4 112 }
malcolmlear 10:6924c58f3a91 113 }