malcolm lear
/
THzBiasControl08
THz Bias Controller
Fork of USBSerial_HelloWorld by
main.cpp@11:79e90b5d04c9, 2018-10-24 (annotated)
- Committer:
- malcolmlear
- Date:
- Wed Oct 24 11:05:33 2018 +0000
- Revision:
- 11:79e90b5d04c9
- Parent:
- 10:6924c58f3a91
Example
Who changed what in which revision?
User | Revision | Line number | New 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 | } |