Programmable Load V1

Dependencies:   USBDevice mbed

Fork of THzBiasControl08 by malcolm lear

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?

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