malcolm lear
/
PWRMONV01
Programmable Load V1
Fork of THzBiasControl08 by
main.cpp@10:6924c58f3a91, 2017-02-22 (annotated)
- Committer:
- malcolmlear
- Date:
- Wed Feb 22 14:53:00 2017 +0000
- Revision:
- 10:6924c58f3a91
- Parent:
- 9:d88699a0905a
- Child:
- 11:ceabd476b6cd
Working 22/02/2017
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 | 10:6924c58f3a91 | 6 | DigitalOut outen(p21); // active low pulse output enable |
malcolmlear | 10:6924c58f3a91 | 7 | DigitalOut outxpol(p23); // pulse output x polarity |
malcolmlear | 10:6924c58f3a91 | 8 | DigitalOut outypol(p22); // pulse output y polarity |
malcolmlear | 10:6924c58f3a91 | 9 | USBSerial serial; // USB serial communication |
malcolmlear | 10:6924c58f3a91 | 10 | |
malcolmlear | 10:6924c58f3a91 | 11 | int v = 0; // voltage 0 to 1023 = 0 to 102.3 V |
malcolmlear | 10:6924c58f3a91 | 12 | int t, i, e, len; |
malcolmlear | 10:6924c58f3a91 | 13 | char CmdIn[128]; |
malcolmlear | 10:6924c58f3a91 | 14 | char CmdP0[] = "P=0"; // polarity 0 |
malcolmlear | 10:6924c58f3a91 | 15 | char CmdP1[] = "P=1"; // polarity 1 |
malcolmlear | 10:6924c58f3a91 | 16 | char CmdP2[] = "P=2"; // polarity 2 |
malcolmlear | 10:6924c58f3a91 | 17 | char CmdP3[] = "P=3"; // polarity 3 |
malcolmlear | 10:6924c58f3a91 | 18 | char CmdO0[] = "O=0"; // output off |
malcolmlear | 10:6924c58f3a91 | 19 | char CmdO1[] = "O=1"; // output on |
malcolmlear | 10:6924c58f3a91 | 20 | char CmdVn[] = "V="; // voltage |
malcolmlear | 10:6924c58f3a91 | 21 | char CmdID[] = "ID"; // Identification |
malcolmlear | 10:6924c58f3a91 | 22 | |
malcolmlear | 10:6924c58f3a91 | 23 | void Voltage(int d) { |
malcolmlear | 10:6924c58f3a91 | 24 | d = (d<<4)&0x3fff; // value is bit 13 to 4 |
malcolmlear | 10:6924c58f3a91 | 25 | cs = 0; |
malcolmlear | 10:6924c58f3a91 | 26 | spi.write(d); |
malcolmlear | 10:6924c58f3a91 | 27 | cs = 1; |
malcolmlear | 10:6924c58f3a91 | 28 | } |
malcolmlear | 10:6924c58f3a91 | 29 | |
malcolmlear | 10:6924c58f3a91 | 30 | int main() { |
malcolmlear | 10:6924c58f3a91 | 31 | outen = 1; // output off |
malcolmlear | 10:6924c58f3a91 | 32 | outxpol = 0; |
malcolmlear | 10:6924c58f3a91 | 33 | outypol = 0; |
malcolmlear | 10:6924c58f3a91 | 34 | cs = 1; // spi not selected |
malcolmlear | 10:6924c58f3a91 | 35 | spi.format(16,2); |
malcolmlear | 10:6924c58f3a91 | 36 | spi.frequency(1000000); |
malcolmlear | 10:6924c58f3a91 | 37 | Voltage(v); |
samux | 7:5e693654d5b4 | 38 | while(1) |
samux | 7:5e693654d5b4 | 39 | { |
malcolmlear | 10:6924c58f3a91 | 40 | e = 1; // set error |
malcolmlear | 10:6924c58f3a91 | 41 | serial.scanf("%s", CmdIn); |
malcolmlear | 10:6924c58f3a91 | 42 | if (strcmp(CmdIn, CmdP0) == 0) { |
malcolmlear | 10:6924c58f3a91 | 43 | outxpol = 1; |
malcolmlear | 10:6924c58f3a91 | 44 | outypol = 1; |
malcolmlear | 10:6924c58f3a91 | 45 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 46 | } |
malcolmlear | 10:6924c58f3a91 | 47 | if (strcmp(CmdIn, CmdP1) == 0) { |
malcolmlear | 10:6924c58f3a91 | 48 | outxpol = 1; |
malcolmlear | 10:6924c58f3a91 | 49 | outypol = 0; |
malcolmlear | 10:6924c58f3a91 | 50 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 51 | } |
malcolmlear | 10:6924c58f3a91 | 52 | if (strcmp(CmdIn, CmdP2) == 0) { |
malcolmlear | 10:6924c58f3a91 | 53 | outxpol = 0; |
malcolmlear | 10:6924c58f3a91 | 54 | outypol = 0; |
malcolmlear | 10:6924c58f3a91 | 55 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 56 | } |
malcolmlear | 10:6924c58f3a91 | 57 | if (strcmp(CmdIn, CmdP3) == 0) { |
malcolmlear | 10:6924c58f3a91 | 58 | outxpol = 0; |
malcolmlear | 10:6924c58f3a91 | 59 | outypol = 1; |
malcolmlear | 10:6924c58f3a91 | 60 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 61 | } |
malcolmlear | 10:6924c58f3a91 | 62 | if (strcmp(CmdIn, CmdO0) == 0) { |
malcolmlear | 10:6924c58f3a91 | 63 | outen = 1; |
malcolmlear | 10:6924c58f3a91 | 64 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 65 | } |
malcolmlear | 10:6924c58f3a91 | 66 | if (strcmp(CmdIn, CmdO1) == 0) { |
malcolmlear | 10:6924c58f3a91 | 67 | outen = 0; |
malcolmlear | 10:6924c58f3a91 | 68 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 69 | } |
malcolmlear | 10:6924c58f3a91 | 70 | if (strncmp(CmdIn, CmdVn, 2) == 0) { |
malcolmlear | 10:6924c58f3a91 | 71 | v = 0; |
malcolmlear | 10:6924c58f3a91 | 72 | len = strlen(CmdIn); |
malcolmlear | 10:6924c58f3a91 | 73 | for(i=2; i<len; i++){ |
malcolmlear | 10:6924c58f3a91 | 74 | t = CmdIn[i] - '0'; |
malcolmlear | 10:6924c58f3a91 | 75 | if ((t >= 0) && (t <= 9)) { |
malcolmlear | 10:6924c58f3a91 | 76 | v = v * 10 + t; |
malcolmlear | 10:6924c58f3a91 | 77 | } |
malcolmlear | 10:6924c58f3a91 | 78 | else { |
malcolmlear | 10:6924c58f3a91 | 79 | v = -1; // on input error make v out of range |
malcolmlear | 10:6924c58f3a91 | 80 | break; |
malcolmlear | 10:6924c58f3a91 | 81 | } |
malcolmlear | 10:6924c58f3a91 | 82 | } |
malcolmlear | 10:6924c58f3a91 | 83 | if ((v >= 0) && (v <= 1023)) { |
malcolmlear | 10:6924c58f3a91 | 84 | Voltage(v); |
malcolmlear | 10:6924c58f3a91 | 85 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 86 | } |
malcolmlear | 10:6924c58f3a91 | 87 | } |
malcolmlear | 10:6924c58f3a91 | 88 | if (strcmp(CmdIn, CmdID) == 0) { |
malcolmlear | 10:6924c58f3a91 | 89 | serial.printf( "Bias Voltage Generator V1.0\n"); |
malcolmlear | 10:6924c58f3a91 | 90 | e = 0; |
malcolmlear | 10:6924c58f3a91 | 91 | } |
malcolmlear | 10:6924c58f3a91 | 92 | if (e == 1) { |
malcolmlear | 10:6924c58f3a91 | 93 | serial.printf( "Command Error "); |
malcolmlear | 10:6924c58f3a91 | 94 | serial.printf("%s\n", CmdIn); |
malcolmlear | 10:6924c58f3a91 | 95 | } |
malcolmlear | 10:6924c58f3a91 | 96 | else { |
malcolmlear | 10:6924c58f3a91 | 97 | serial.printf( "Command Executed\n"); |
malcolmlear | 10:6924c58f3a91 | 98 | } |
samux | 9:d88699a0905a | 99 | wait(1); |
samux | 7:5e693654d5b4 | 100 | } |
malcolmlear | 10:6924c58f3a91 | 101 | } |