Firmware for MAXREFDES1213

Dependencies:   max32630fthr USBDevice

Committer:
venkik
Date:
Thu Jul 18 21:03:58 2019 +0000
Revision:
9:29c618fec8fc
Parent:
8:d2b660bf5f94
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
switches 0:60a522ae2e35 1 #include "mbed.h"
switches 2:57500e991166 2 #include "max32630fthr.h"
switches 1:6923b075c8d7 3 #include "USBSerial.h"
venkik 9:29c618fec8fc 4 #include "MAX11311_Electronic_Load.h"
venkik 9:29c618fec8fc 5 #include "string"
venkik 9:29c618fec8fc 6 #include <stdlib.h>
venkik 9:29c618fec8fc 7 #include "math.h"
switches 0:60a522ae2e35 8
switches 6:684c51f32c1d 9 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
switches 0:60a522ae2e35 10
venkik 9:29c618fec8fc 11 /*
venkik 9:29c618fec8fc 12 //Defining SPI
venkik 9:29c618fec8fc 13 SPI spi(P5_1,P5_2,P5_0); // mosi, miso, sclk
venkik 9:29c618fec8fc 14 DigitalOut cs(P5_3);
venkik 9:29c618fec8fc 15 */
venkik 9:29c618fec8fc 16
venkik 9:29c618fec8fc 17 // Hardware serial port over microUSB
venkik 9:29c618fec8fc 18 Serial daplink(P2_1, P2_0); //tx,rx
switches 1:6923b075c8d7 19
switches 3:601c11238ccb 20 // Virtual serial port over USB
venkik 9:29c618fec8fc 21 USBSerial microUSB;
venkik 9:29c618fec8fc 22 DigitalOut redLed(LED_RED, LED_OFF);
venkik 9:29c618fec8fc 23 DigitalOut grnLed(LED_GREEN, LED_OFF);
venkik 9:29c618fec8fc 24 DigitalOut bluLed(LED_BLUE, LED_OFF);
venkik 9:29c618fec8fc 25
venkik 9:29c618fec8fc 26 Ticker pixi_ticker;
venkik 9:29c618fec8fc 27
venkik 9:29c618fec8fc 28
venkik 9:29c618fec8fc 29 //Variables
venkik 9:29c618fec8fc 30 PwmOut CNVST(P3_4); //CNVST signal generating 512 HZ
venkik 9:29c618fec8fc 31 InterruptIn INT(P3_5); //INT pin
venkik 9:29c618fec8fc 32 uint16_t Device_ID, Receive_Voltageword;
venkik 9:29c618fec8fc 33 bool SPI_flag, Serial_flag = false, string_complete;
venkik 9:29c618fec8fc 34 const double LSB_size = 0.01;
venkik 9:29c618fec8fc 35 float voltage;
venkik 9:29c618fec8fc 36 string rx_buffer = "";
venkik 9:29c618fec8fc 37 volatile char c;
venkik 9:29c618fec8fc 38 const int P3_DAC_address = 0x65;
venkik 9:29c618fec8fc 39 const int P5_DAC_address = 0x67;
venkik 9:29c618fec8fc 40 const int P11_DAC_address = 0x70;
venkik 9:29c618fec8fc 41 const int P9_DAC_address = 0x6E;
venkik 9:29c618fec8fc 42 const int P10_DAC_address = 0x6F;
venkik 9:29c618fec8fc 43 const int port_config_p3 = 0x25; /// 0x25 r/w port_cfg_p3 PIXI port P3 configuration register
venkik 9:29c618fec8fc 44 const int port_config_p4 = 0x26; /// 0x26 r/w port_cfg_p4 PIXI port P4 configuration register
venkik 9:29c618fec8fc 45 const int port_config_p5 = 0x27; /// 0x27 r/w port_cfg_p5 PIXI port P5 configuration register
venkik 9:29c618fec8fc 46 uint8_t Address_0x00, P3_DAC_Input_code_MSB_Byte, P3_DAC_Input_code_LSB_Byte;
venkik 9:29c618fec8fc 47 uint8_t dummy_byte = 0;
venkik 9:29c618fec8fc 48 uint16_t Receive_LCurrentword, Receive_HCurrentword,Interrupt_reg, P3_DAC_Input_code, P5_DAC_Input_code, P9_DAC_Input_code, P10_DAC_Input_code, P11_DAC_Input_code;
venkik 9:29c618fec8fc 49 bool TM_LR_Loop, TM_HR_Loop;
venkik 9:29c618fec8fc 50 bool Update_CC_Flag; //Interrupt flag coming from the PIXI
venkik 9:29c618fec8fc 51 float CC_Low_range_DAC_input, CC_HIGH_range_DAC_input, Low_range_current, High_range_current, TM_Low_range_DAC_input, TM_HIGH_range_DAC_input, T_ON, T_OFF, Duty_Cycle, Time_Period, Frequency, Ramp_up, Ramp_down;
venkik 9:29c618fec8fc 52
venkik 9:29c618fec8fc 53
venkik 9:29c618fec8fc 54 bool run = false;
venkik 9:29c618fec8fc 55 bool high_mode = false;
venkik 9:29c618fec8fc 56
venkik 9:29c618fec8fc 57
venkik 9:29c618fec8fc 58
venkik 9:29c618fec8fc 59
venkik 9:29c618fec8fc 60
venkik 9:29c618fec8fc 61 //Interrupt service routines
venkik 9:29c618fec8fc 62
venkik 9:29c618fec8fc 63 //SPI ISR
venkik 9:29c618fec8fc 64
venkik 9:29c618fec8fc 65 void SPI_ISR()
venkik 9:29c618fec8fc 66 {
venkik 9:29c618fec8fc 67 SPI_flag = true;
venkik 9:29c618fec8fc 68 }
venkik 9:29c618fec8fc 69
venkik 9:29c618fec8fc 70
venkik 9:29c618fec8fc 71 void Rx_Interrupt()
venkik 9:29c618fec8fc 72 {
venkik 9:29c618fec8fc 73 Serial_flag = true;
venkik 9:29c618fec8fc 74 // SPI_flag = false;
venkik 9:29c618fec8fc 75 }
venkik 9:29c618fec8fc 76
venkik 9:29c618fec8fc 77
switches 3:601c11238ccb 78
venkik 9:29c618fec8fc 79 void pixi_interrupt()
venkik 9:29c618fec8fc 80 {
venkik 9:29c618fec8fc 81 static int state = 0;
venkik 9:29c618fec8fc 82 static int ticks = 0;
venkik 9:29c618fec8fc 83 static bool last_mode;
venkik 9:29c618fec8fc 84
venkik 9:29c618fec8fc 85 switch (state)
venkik 9:29c618fec8fc 86 {
venkik 9:29c618fec8fc 87 case 0:
venkik 9:29c618fec8fc 88 if (run)
venkik 9:29c618fec8fc 89 {
venkik 9:29c618fec8fc 90 grnLed = LED_ON;
venkik 9:29c618fec8fc 91 if (high_mode)
venkik 9:29c618fec8fc 92 {
venkik 9:29c618fec8fc 93 if (last_mode != high_mode)
venkik 9:29c618fec8fc 94 {
venkik 9:29c618fec8fc 95 last_mode = high_mode;
venkik 9:29c618fec8fc 96 bluLed = LED_OFF;
venkik 9:29c618fec8fc 97 }
venkik 9:29c618fec8fc 98 // send high mode 1st command
venkik 9:29c618fec8fc 99 P11_DAC_Input_code = 2047 - rint((Ramp_up) / 0.025);
venkik 9:29c618fec8fc 100 MAX11300regWrite(P11_DAC_address, P11_DAC_Input_code);
venkik 9:29c618fec8fc 101 redLed = LED_ON;
venkik 9:29c618fec8fc 102 ticks = T_ON;
venkik 9:29c618fec8fc 103 }
venkik 9:29c618fec8fc 104 else
venkik 9:29c618fec8fc 105 {
venkik 9:29c618fec8fc 106 if (last_mode != high_mode)
venkik 9:29c618fec8fc 107 {
venkik 9:29c618fec8fc 108 last_mode = high_mode;
venkik 9:29c618fec8fc 109 redLed = LED_OFF;
venkik 9:29c618fec8fc 110 }
venkik 9:29c618fec8fc 111 // send low mode 1st command
venkik 9:29c618fec8fc 112 P11_DAC_Input_code = 2047 - rint((Ramp_up) / 0.25);
venkik 9:29c618fec8fc 113 MAX11300regWrite(P11_DAC_address, P11_DAC_Input_code);
venkik 9:29c618fec8fc 114 bluLed = LED_ON;
venkik 9:29c618fec8fc 115 ticks = T_ON;
venkik 9:29c618fec8fc 116 }
venkik 9:29c618fec8fc 117 state = 1;
venkik 9:29c618fec8fc 118 }
venkik 9:29c618fec8fc 119 else
venkik 9:29c618fec8fc 120 {
venkik 9:29c618fec8fc 121 // set output inactive
venkik 9:29c618fec8fc 122 grnLed = LED_OFF;
venkik 9:29c618fec8fc 123 state = 0;
venkik 9:29c618fec8fc 124 }
venkik 9:29c618fec8fc 125 break;
venkik 9:29c618fec8fc 126
venkik 9:29c618fec8fc 127 case 1:
venkik 9:29c618fec8fc 128 if (--ticks == 0)
venkik 9:29c618fec8fc 129 {
venkik 9:29c618fec8fc 130 if (high_mode)
venkik 9:29c618fec8fc 131 {
venkik 9:29c618fec8fc 132 if (last_mode != high_mode)
venkik 9:29c618fec8fc 133 {
venkik 9:29c618fec8fc 134 last_mode = high_mode;
venkik 9:29c618fec8fc 135 bluLed = LED_OFF;
venkik 9:29c618fec8fc 136 }
venkik 9:29c618fec8fc 137 // send high mode 2nd command
venkik 9:29c618fec8fc 138 P11_DAC_Input_code = 2047 + rint((-Ramp_down) / 0.025);
venkik 9:29c618fec8fc 139 MAX11300regWrite(P11_DAC_address, P11_DAC_Input_code);
venkik 9:29c618fec8fc 140 redLed = LED_OFF;
venkik 9:29c618fec8fc 141 ticks = T_OFF;
venkik 9:29c618fec8fc 142 }
venkik 9:29c618fec8fc 143 else
venkik 9:29c618fec8fc 144 {
venkik 9:29c618fec8fc 145 if (last_mode != high_mode)
venkik 9:29c618fec8fc 146 {
venkik 9:29c618fec8fc 147 last_mode = high_mode;
venkik 9:29c618fec8fc 148 redLed = LED_OFF;
venkik 9:29c618fec8fc 149 }
venkik 9:29c618fec8fc 150 // send low mode 2nd command
venkik 9:29c618fec8fc 151 P11_DAC_Input_code = 2047 + rint((-Ramp_down) / 0.25);
venkik 9:29c618fec8fc 152 MAX11300regWrite(P11_DAC_address, P11_DAC_Input_code);
venkik 9:29c618fec8fc 153 bluLed = LED_OFF;
venkik 9:29c618fec8fc 154 ticks = T_OFF;
venkik 9:29c618fec8fc 155 }
venkik 9:29c618fec8fc 156 state = 2;
venkik 9:29c618fec8fc 157 }
venkik 9:29c618fec8fc 158 break;
venkik 9:29c618fec8fc 159
venkik 9:29c618fec8fc 160 case 2:
venkik 9:29c618fec8fc 161 if (--ticks == 0)
venkik 9:29c618fec8fc 162 {
venkik 9:29c618fec8fc 163 state = 0;
venkik 9:29c618fec8fc 164 }
venkik 9:29c618fec8fc 165 break;
venkik 9:29c618fec8fc 166 }
venkik 9:29c618fec8fc 167 }
venkik 9:29c618fec8fc 168
venkik 9:29c618fec8fc 169
venkik 9:29c618fec8fc 170
switches 0:60a522ae2e35 171
switches 0:60a522ae2e35 172 // main() runs in its own thread in the OS
switches 0:60a522ae2e35 173 // (note the calls to Thread::wait below for delays)
switches 0:60a522ae2e35 174 int main()
switches 0:60a522ae2e35 175 {
switches 2:57500e991166 176
venkik 9:29c618fec8fc 177 MAX11311init();
venkik 9:29c618fec8fc 178 // microUSB.baud(9600);
venkik 9:29c618fec8fc 179 Device_ID = MAX11300regRead(0X00); //(Fisrst 7 bits from MSB are address and LSB is read bit which 1)
venkik 9:29c618fec8fc 180 // CNVST.period(0.0019531f); // 512HZ signal
venkik 9:29c618fec8fc 181 CNVST.period(0.0078125); //128HZ signal
venkik 9:29c618fec8fc 182 CNVST.write(0.50f); // 50% duty cycle, relative to period
venkik 9:29c618fec8fc 183 INT.fall(&SPI_ISR); // attach the address of the flip function to the rising edge
venkik 9:29c618fec8fc 184 microUSB.attach(&Rx_Interrupt);
venkik 9:29c618fec8fc 185 rx_buffer.reserve(2000);
venkik 9:29c618fec8fc 186 pixi_ticker.attach(pixi_interrupt, 0.001);
switches 0:60a522ae2e35 187
venkik 9:29c618fec8fc 188
venkik 9:29c618fec8fc 189 // Setup a serial interrupt function to receive data
venkik 9:29c618fec8fc 190 // microUSB.attach(&Rx_interrupt);
switches 1:6923b075c8d7 191
switches 1:6923b075c8d7 192 while(1) {
venkik 9:29c618fec8fc 193
venkik 9:29c618fec8fc 194 //SPI ISR routine linking with main
venkik 9:29c618fec8fc 195 if(SPI_flag) {
venkik 9:29c618fec8fc 196 //Reading the 0x01 and 0x02 and 0x03 clears the interrupt on the PIXI ADC port
venkik 9:29c618fec8fc 197 MAX11300regRead(0x01); // read interrupt register
venkik 9:29c618fec8fc 198 MAX11300regRead(0x02); // read ADC status register 1
venkik 9:29c618fec8fc 199 MAX11300regRead(0x03); // read ADC status register 2 only for MAX11300 (20 port chip)
venkik 9:29c618fec8fc 200
venkik 9:29c618fec8fc 201
venkik 9:29c618fec8fc 202 //Sending voltage values
venkik 9:29c618fec8fc 203 Receive_Voltageword = MAX11300regRead(0x42);
venkik 9:29c618fec8fc 204 Receive_LCurrentword = MAX11300regRead(0x44);
venkik 9:29c618fec8fc 205 Receive_HCurrentword = MAX11300regRead(0x4B);
venkik 9:29c618fec8fc 206 voltage = (float) Receive_Voltageword * LSB_size;
venkik 9:29c618fec8fc 207 Low_range_current = (float) Receive_LCurrentword * 0.025e-3;
venkik 9:29c618fec8fc 208 High_range_current = (float) Receive_HCurrentword * 2.5e-3;
venkik 9:29c618fec8fc 209 __disable_irq(); // Disable Interrupts
venkik 9:29c618fec8fc 210 microUSB.printf("VR");
venkik 9:29c618fec8fc 211 microUSB.printf("Version 1.0 \r\n");
venkik 9:29c618fec8fc 212 microUSB.printf("VL");
venkik 9:29c618fec8fc 213 microUSB.printf("%0.3f\r\n", voltage);
venkik 9:29c618fec8fc 214 __enable_irq(); // Enable Interrupts
venkik 9:29c618fec8fc 215
venkik 9:29c618fec8fc 216
venkik 9:29c618fec8fc 217
venkik 9:29c618fec8fc 218 if (Update_CC_Flag && SPI_flag) {
venkik 9:29c618fec8fc 219 __disable_irq(); // Disable Interrupts
venkik 9:29c618fec8fc 220
venkik 9:29c618fec8fc 221
venkik 9:29c618fec8fc 222 microUSB.printf("LC");
venkik 9:29c618fec8fc 223 microUSB.printf("%f\r\n",Low_range_current);
venkik 9:29c618fec8fc 224 microUSB.printf("HC");
venkik 9:29c618fec8fc 225 microUSB.printf("%f\r\n",High_range_current);
venkik 9:29c618fec8fc 226 // SPI_flag = false;
venkik 9:29c618fec8fc 227
venkik 9:29c618fec8fc 228 __enable_irq(); // Enable Interrupts
venkik 9:29c618fec8fc 229 }
venkik 9:29c618fec8fc 230
venkik 9:29c618fec8fc 231 SPI_flag = false; //Deasserting the interrupt
venkik 9:29c618fec8fc 232 }
venkik 9:29c618fec8fc 233
venkik 9:29c618fec8fc 234
venkik 9:29c618fec8fc 235 if(Serial_flag) {
venkik 9:29c618fec8fc 236
venkik 9:29c618fec8fc 237 // __disable_irq(); // Disable Interrupts
venkik 9:29c618fec8fc 238 Serial_flag = false;
venkik 9:29c618fec8fc 239
venkik 9:29c618fec8fc 240
venkik 9:29c618fec8fc 241
venkik 9:29c618fec8fc 242 while (microUSB.readable())
venkik 9:29c618fec8fc 243 {
venkik 9:29c618fec8fc 244 // SPI_flag = false;
venkik 9:29c618fec8fc 245 c = microUSB.getc();
venkik 9:29c618fec8fc 246 rx_buffer += c;
venkik 9:29c618fec8fc 247 // Uncomment to Echo to USB serial to watch data flow
venkik 9:29c618fec8fc 248 // monitor_device.putc(rx_buffer[rx_in]);
venkik 9:29c618fec8fc 249 if(c == '\n')
venkik 9:29c618fec8fc 250
venkik 9:29c618fec8fc 251 {
venkik 9:29c618fec8fc 252 string_complete = true;
venkik 9:29c618fec8fc 253
venkik 9:29c618fec8fc 254 }
venkik 9:29c618fec8fc 255 }
venkik 9:29c618fec8fc 256
venkik 9:29c618fec8fc 257 // __enable_irq(); // Enable Interrupts
venkik 9:29c618fec8fc 258 }
venkik 9:29c618fec8fc 259
venkik 9:29c618fec8fc 260 if(string_complete)
venkik 9:29c618fec8fc 261 {
venkik 9:29c618fec8fc 262 string_complete = false;
venkik 9:29c618fec8fc 263 if (rx_buffer.substr(0, 2) == "CM") // Checking for constant current constant mode
venkik 9:29c618fec8fc 264
venkik 9:29c618fec8fc 265 {
venkik 9:29c618fec8fc 266 run = false;
venkik 9:29c618fec8fc 267 if (rx_buffer.substr(2, 2) == "LR")
venkik 9:29c618fec8fc 268 {
venkik 9:29c618fec8fc 269
venkik 9:29c618fec8fc 270
venkik 9:29c618fec8fc 271
venkik 9:29c618fec8fc 272
venkik 9:29c618fec8fc 273
venkik 9:29c618fec8fc 274 MAX11300regWrite(port_config_p3, 0x5100); //Making sure in constant current mode, the port P3 and P5 are configured as 0-10V DACs
venkik 9:29c618fec8fc 275 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 276 MAX11300regWrite(port_config_p5, 0x5100);
venkik 9:29c618fec8fc 277 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 278 MAX11300regWrite(P3_DAC_address, 0);
venkik 9:29c618fec8fc 279 MAX11300regWrite(P5_DAC_address, 0);
venkik 9:29c618fec8fc 280 CC_Low_range_DAC_input = atof(rx_buffer.substr(4).c_str());
venkik 9:29c618fec8fc 281 P3_DAC_Input_code = rint((CC_Low_range_DAC_input) / 25e-3);
venkik 9:29c618fec8fc 282 MAX11300regWrite(P5_DAC_address, 0);
venkik 9:29c618fec8fc 283 MAX11300regWrite(P3_DAC_address, P3_DAC_Input_code);
venkik 9:29c618fec8fc 284
venkik 9:29c618fec8fc 285 // microUSB.printf("Clearing string \r\n");
venkik 9:29c618fec8fc 286 // clear the string:
venkik 9:29c618fec8fc 287 rx_buffer = "";
venkik 9:29c618fec8fc 288 // string_complete = false;
venkik 9:29c618fec8fc 289
venkik 9:29c618fec8fc 290 }
venkik 9:29c618fec8fc 291
venkik 9:29c618fec8fc 292
venkik 9:29c618fec8fc 293
venkik 9:29c618fec8fc 294 //Writing the high current range DAC
venkik 9:29c618fec8fc 295 //P5: DAC to set the current on the low-range---0x67
venkik 9:29c618fec8fc 296 //This is a 12 bit DAC, the Low current range is 0 to 10A
venkik 9:29c618fec8fc 297 //The low value of DAC is 0 (corresponds to 0mA) and the highest input is [(2^12)-1] which is 4095 (corresponds to 100mA)
venkik 9:29c618fec8fc 298
venkik 9:29c618fec8fc 299 //The transfer function for converting the analog current value coming from the GUI to digital 12 bit input code for the DAC is
venkik 9:29c618fec8fc 300 // Digital_current_input = rint(Analog_current_IN/(FSR/2^n))
venkik 9:29c618fec8fc 301 //n = 12
venkik 9:29c618fec8fc 302 //DAC_FSR = 102.4mA
venkik 9:29c618fec8fc 303 //LSB_DAC = 0.0025
venkik 9:29c618fec8fc 304
venkik 9:29c618fec8fc 305
venkik 9:29c618fec8fc 306 // print the string when a newline arrives:
venkik 9:29c618fec8fc 307
venkik 9:29c618fec8fc 308 else if (rx_buffer.substr(2, 2) == "HR" )
venkik 9:29c618fec8fc 309 {
venkik 9:29c618fec8fc 310
venkik 9:29c618fec8fc 311 MAX11300regWrite(port_config_p3, 0x5100); //Making sure in constant current mode, the port P3 and P5 are configured as 0-10V DACs
venkik 9:29c618fec8fc 312 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 313 MAX11300regWrite(port_config_p5, 0x5100);
venkik 9:29c618fec8fc 314 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 315 MAX11300regWrite(P3_DAC_address, 0);
venkik 9:29c618fec8fc 316 MAX11300regWrite(P5_DAC_address, 0);
venkik 9:29c618fec8fc 317
venkik 9:29c618fec8fc 318 string a = rx_buffer.substr(4);
venkik 9:29c618fec8fc 319 CC_HIGH_range_DAC_input = atof(a.c_str());
venkik 9:29c618fec8fc 320 P5_DAC_Input_code = rint((CC_HIGH_range_DAC_input) / 0.0025);
venkik 9:29c618fec8fc 321 // MAX11300regWrite(P3_DAC_address, 0);
venkik 9:29c618fec8fc 322 MAX11300regWrite(P5_DAC_address, P5_DAC_Input_code);
venkik 9:29c618fec8fc 323 // clear the string:
venkik 9:29c618fec8fc 324 rx_buffer = "";
venkik 9:29c618fec8fc 325 // string_complete = false;
venkik 9:29c618fec8fc 326
venkik 9:29c618fec8fc 327 }
venkik 9:29c618fec8fc 328
venkik 9:29c618fec8fc 329 else if (rx_buffer.substr(2, 2) == "GV")
venkik 9:29c618fec8fc 330 {
venkik 9:29c618fec8fc 331 Update_CC_Flag = true;
venkik 9:29c618fec8fc 332 // clear the string:
venkik 9:29c618fec8fc 333 rx_buffer = "";
venkik 9:29c618fec8fc 334 // string_complete = false;
venkik 9:29c618fec8fc 335 }
venkik 9:29c618fec8fc 336
venkik 9:29c618fec8fc 337
venkik 9:29c618fec8fc 338 else if (rx_buffer.substr(2, 2) == "SV")
venkik 9:29c618fec8fc 339 {
venkik 9:29c618fec8fc 340
venkik 9:29c618fec8fc 341 // Update_CC_Flag = false;
venkik 9:29c618fec8fc 342 MAX11300regWrite(port_config_p3, 0x5100); //Making sure in constant current mode, the port P3 and P5 are configured as 0-10V DACs
venkik 9:29c618fec8fc 343 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 344 MAX11300regWrite(port_config_p5, 0x5100);
venkik 9:29c618fec8fc 345 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 346 MAX11300regWrite(P3_DAC_address, 0);
venkik 9:29c618fec8fc 347 MAX11300regWrite(P5_DAC_address, 0);
venkik 9:29c618fec8fc 348 // clear the string:
venkik 9:29c618fec8fc 349 rx_buffer = "";
venkik 9:29c618fec8fc 350 // string_complete = false;
venkik 9:29c618fec8fc 351 }
venkik 9:29c618fec8fc 352 }
venkik 9:29c618fec8fc 353 else if (rx_buffer.substr(0, 2) == "TM")
venkik 9:29c618fec8fc 354 {
venkik 9:29c618fec8fc 355 //Checking for Transient mode
venkik 9:29c618fec8fc 356
venkik 9:29c618fec8fc 357
venkik 9:29c618fec8fc 358 MAX11300regWrite(P3_DAC_address, 0);
venkik 9:29c618fec8fc 359 MAX11300regWrite(P5_DAC_address, 0);
venkik 9:29c618fec8fc 360 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 361 MAX11300regWrite(port_config_p3, 0x0000); //Making both P3 and P5 high impedance
venkik 9:29c618fec8fc 362 MAX11300regWrite(port_config_p5, 0x0000);
venkik 9:29c618fec8fc 363 if (rx_buffer.substr(2, 2) == "LR")
venkik 9:29c618fec8fc 364 {
venkik 9:29c618fec8fc 365
venkik 9:29c618fec8fc 366 MAX11300regWrite(port_config_p3, 0xC000); //select low range, the external signal must be routed from P4 to P3. This is accomplished by writing 0xC000 to the configuration register of P3, and 0x0000 to the configuration register of P4:
venkik 9:29c618fec8fc 367 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 368 MAX11300regWrite(port_config_p4, 0x0000);
venkik 9:29c618fec8fc 369 MAX11300initDelayus(100);
venkik 9:29c618fec8fc 370
venkik 9:29c618fec8fc 371 //P11: DAC to generate the ramp-up and ramp-down of the dynamic signal---0X6F -- Minimum value startting with 0, Maximum ramp-- 500A/ms-- This is a Bipolar DAC switches between +5 and -5
venkik 9:29c618fec8fc 372 //P9: DAC to set the valley current in dynamic mode----0X6E
venkik 9:29c618fec8fc 373 //P10:DAC to set the peak current in dynamic mode----0X70 --- Maximum value: 10A or 100 mA even this has two ranges
venkik 9:29c618fec8fc 374 float Size_vc = atof(rx_buffer.substr(4, 1).c_str());
venkik 9:29c618fec8fc 375
venkik 9:29c618fec8fc 376 // microUSB.printf("Valley current size");
venkik 9:29c618fec8fc 377 // microUSB.printf("%0.1f\r\n",Size_vc);
venkik 9:29c618fec8fc 378
venkik 9:29c618fec8fc 379 TM_Low_range_DAC_input = atof(rx_buffer.substr(5,Size_vc).c_str());
venkik 9:29c618fec8fc 380 // microUSB.printf("Valley current value");
venkik 9:29c618fec8fc 381 // microUSB.printf("%0.3f\r\n",TM_Low_range_DAC_input);
venkik 9:29c618fec8fc 382
venkik 9:29c618fec8fc 383 // P9_DAC_Input_code = rint((TM_Low_range_DAC_input + 6.5) / 25e-3);
venkik 9:29c618fec8fc 384 P9_DAC_Input_code = rint(((TM_Low_range_DAC_input )*45.5)+200);
venkik 9:29c618fec8fc 385
venkik 9:29c618fec8fc 386 if(P9_DAC_Input_code > 4095)
venkik 9:29c618fec8fc 387 {
venkik 9:29c618fec8fc 388 P9_DAC_Input_code = 4095;
venkik 9:29c618fec8fc 389 }
venkik 9:29c618fec8fc 390
venkik 9:29c618fec8fc 391 MAX11300regWrite(P9_DAC_address, P9_DAC_Input_code);
venkik 9:29c618fec8fc 392 float Start_bound_pc = (5 + Size_vc); // Starting character for peak current
venkik 9:29c618fec8fc 393 // microUSB.printf("Peak current starting point");
venkik 9:29c618fec8fc 394 // microUSB.printf("%0.1f\r\n",Start_bound_pc);
venkik 9:29c618fec8fc 395 float Size_pc = atof(rx_buffer.substr(Start_bound_pc, 1).c_str());
venkik 9:29c618fec8fc 396 // microUSB.printf("Peak current size");
venkik 9:29c618fec8fc 397 // microUSB.printf("%0.1f\r\n",Size_pc);
venkik 9:29c618fec8fc 398
venkik 9:29c618fec8fc 399 TM_HIGH_range_DAC_input = atof(rx_buffer.substr((1 + Start_bound_pc), (Size_pc)).c_str());
venkik 9:29c618fec8fc 400 // microUSB.printf("Peak current value");
venkik 9:29c618fec8fc 401 // microUSB.printf("%0.3f\r\n",TM_HIGH_range_DAC_input);
venkik 9:29c618fec8fc 402
venkik 9:29c618fec8fc 403 // P10_DAC_Input_code = rint((TM_HIGH_range_DAC_input - 6.5) / 25e-3);
venkik 9:29c618fec8fc 404 P10_DAC_Input_code = rint(((TM_HIGH_range_DAC_input)*45.5)-250);
venkik 9:29c618fec8fc 405
venkik 9:29c618fec8fc 406 if(P10_DAC_Input_code < 0)
venkik 9:29c618fec8fc 407 {
venkik 9:29c618fec8fc 408 P10_DAC_Input_code = 0;
venkik 9:29c618fec8fc 409 }
venkik 9:29c618fec8fc 410 else if(P10_DAC_Input_code > 4095)
venkik 9:29c618fec8fc 411 {
venkik 9:29c618fec8fc 412 P10_DAC_Input_code = 4095;
venkik 9:29c618fec8fc 413 }
venkik 9:29c618fec8fc 414
venkik 9:29c618fec8fc 415
venkik 9:29c618fec8fc 416
venkik 9:29c618fec8fc 417 MAX11300regWrite(P10_DAC_address, P10_DAC_Input_code);
venkik 9:29c618fec8fc 418
venkik 9:29c618fec8fc 419
venkik 9:29c618fec8fc 420 float Start_bound_ON_time = (1 + Start_bound_pc + Size_pc);; // Starting character for duty cycle
venkik 9:29c618fec8fc 421 // microUSB.printf("ON time starting point");
venkik 9:29c618fec8fc 422 // microUSB.printf("%0.1f\r\n",Start_bound_ON_time);
venkik 9:29c618fec8fc 423
venkik 9:29c618fec8fc 424 float Size_ON_time = atof(rx_buffer.substr(Start_bound_ON_time, 1).c_str());
venkik 9:29c618fec8fc 425 // microUSB.printf("Size of ON time");
venkik 9:29c618fec8fc 426 // microUSB.printf("%0.1f\r\n",Size_ON_time);
venkik 9:29c618fec8fc 427
venkik 9:29c618fec8fc 428
venkik 9:29c618fec8fc 429 T_ON = atof(rx_buffer.substr((Start_bound_ON_time + 1), (Size_ON_time)).c_str());
venkik 9:29c618fec8fc 430 // microUSB.printf("ON time");
venkik 9:29c618fec8fc 431 // microUSB.printf("%0.3f\r\n",T_ON);
venkik 9:29c618fec8fc 432
venkik 9:29c618fec8fc 433
venkik 9:29c618fec8fc 434 float Start_bound_OFF_time = Start_bound_ON_time + 1 + Size_ON_time;
venkik 9:29c618fec8fc 435 float Size_OFF_time = atof(rx_buffer.substr(Start_bound_OFF_time, (1)).c_str());
venkik 9:29c618fec8fc 436 // microUSB.printf("Size_OFF time");
venkik 9:29c618fec8fc 437
venkik 9:29c618fec8fc 438 // microUSB.printf("%0.1f\r\n",Size_OFF_time);
venkik 9:29c618fec8fc 439
venkik 9:29c618fec8fc 440 T_OFF = atof(rx_buffer.substr(1 + Start_bound_OFF_time, Size_OFF_time).c_str());
venkik 9:29c618fec8fc 441 // microUSB.printf("OFF time");
venkik 9:29c618fec8fc 442 // microUSB.printf("%0.3f\r\n",T_OFF);
venkik 9:29c618fec8fc 443
venkik 9:29c618fec8fc 444 float Start_bound_rampup = 1 + Start_bound_OFF_time + Size_OFF_time;
venkik 9:29c618fec8fc 445 float size_rampup = atof(rx_buffer.substr(Start_bound_rampup, (1)).c_str());
venkik 9:29c618fec8fc 446 // microUSB.printf("Ramp up size");
venkik 9:29c618fec8fc 447 // microUSB.printf("%0.1f\r\n",size_rampup);
venkik 9:29c618fec8fc 448
venkik 9:29c618fec8fc 449 Ramp_up = atof(rx_buffer.substr((1 + Start_bound_rampup), (size_rampup)).c_str());
venkik 9:29c618fec8fc 450 // microUSB.printf("Ramp up value");
venkik 9:29c618fec8fc 451 // microUSB.printf("%0.3f\r\n",Ramp_up);
venkik 9:29c618fec8fc 452
venkik 9:29c618fec8fc 453 float Start_bound_rampdown = (1 + Start_bound_rampup + size_rampup);
venkik 9:29c618fec8fc 454
venkik 9:29c618fec8fc 455 float size_rampdown = atof(rx_buffer.substr(Start_bound_rampdown, (1)).c_str());
venkik 9:29c618fec8fc 456 // microUSB.printf("Ramp down size");
venkik 9:29c618fec8fc 457 // microUSB.printf("%0.1f\r\n",size_rampdown);
venkik 9:29c618fec8fc 458
venkik 9:29c618fec8fc 459 Ramp_down = atof(rx_buffer.substr((1 + Start_bound_rampdown), (size_rampdown)).c_str());
venkik 9:29c618fec8fc 460 // microUSB.printf("Ramp down value");
venkik 9:29c618fec8fc 461 // microUSB.printf("%0.3f\r\n",Ramp_down);
venkik 9:29c618fec8fc 462
venkik 9:29c618fec8fc 463
venkik 9:29c618fec8fc 464 float Size_loop = (1 + Start_bound_rampdown + size_rampdown);
venkik 9:29c618fec8fc 465 // microUSB.printf("Loop size");
venkik 9:29c618fec8fc 466 // microUSB.printf("%0.1f\r\n",Size_loop);
venkik 9:29c618fec8fc 467
venkik 9:29c618fec8fc 468 // microUSB.printf("In loop");
venkik 9:29c618fec8fc 469 TM_LR_Loop = true;
venkik 9:29c618fec8fc 470 TM_HR_Loop = false;
venkik 9:29c618fec8fc 471 run = true;
venkik 9:29c618fec8fc 472 high_mode = false;
venkik 9:29c618fec8fc 473
venkik 9:29c618fec8fc 474
venkik 9:29c618fec8fc 475 rx_buffer = "";
venkik 9:29c618fec8fc 476 // string_complete = false;
venkik 9:29c618fec8fc 477
venkik 9:29c618fec8fc 478 }
venkik 9:29c618fec8fc 479
venkik 9:29c618fec8fc 480
venkik 9:29c618fec8fc 481 else if (rx_buffer.substr(2, 2) == "HR")
venkik 9:29c618fec8fc 482 {
venkik 9:29c618fec8fc 483
venkik 9:29c618fec8fc 484 MAX11300regWrite(port_cfg_p4, 0xC000); //select high range, the external signal must be routed from P4 to P5. This is accomplished by writing 0xC000 to the configuration register of P4:
venkik 9:29c618fec8fc 485 MAX11300regWrite(port_cfg_p3, 0x0000);
venkik 9:29c618fec8fc 486
venkik 9:29c618fec8fc 487
venkik 9:29c618fec8fc 488
venkik 9:29c618fec8fc 489 //P11: DAC to generate the ramp-up and ramp-down of the dynamic signal---0X6F -- Minimum value startting with 0, Maximum ramp-- 500A/ms-- This is a Bipolar DAC switches between +5 and -5
venkik 9:29c618fec8fc 490 //P9: DAC to set the valley current in dynamic mode----0X6E
venkik 9:29c618fec8fc 491 //P10:DAC to set the peak current in dynamic mode----0X70 --- Maximum value: 10A or 100 mA even this has two ranges
venkik 9:29c618fec8fc 492 float Size_vc = atof(rx_buffer.substr(4, 1).c_str());
venkik 9:29c618fec8fc 493
venkik 9:29c618fec8fc 494 // microUSB.printf("Valley current size");
venkik 9:29c618fec8fc 495 // microUSB.printf("%0.1f\r\n",Size_vc);
venkik 9:29c618fec8fc 496
venkik 9:29c618fec8fc 497 TM_Low_range_DAC_input = atof(rx_buffer.substr(5,Size_vc).c_str());
venkik 9:29c618fec8fc 498 // microUSB.printf("Valley current value");
venkik 9:29c618fec8fc 499 // microUSB.printf("%0.3f\r\n",TM_Low_range_DAC_input);
venkik 9:29c618fec8fc 500
venkik 9:29c618fec8fc 501 // P9_DAC_Input_code = rint((TM_Low_range_DAC_input + 0.65) / 25e-4);
venkik 9:29c618fec8fc 502 P9_DAC_Input_code = rint(((TM_Low_range_DAC_input)*455)+200);
venkik 9:29c618fec8fc 503
venkik 9:29c618fec8fc 504 if(P9_DAC_Input_code > 4095)
venkik 9:29c618fec8fc 505 {
venkik 9:29c618fec8fc 506 P9_DAC_Input_code = 4095;
venkik 9:29c618fec8fc 507 }
venkik 9:29c618fec8fc 508
venkik 9:29c618fec8fc 509
venkik 9:29c618fec8fc 510 MAX11300regWrite(P9_DAC_address, P9_DAC_Input_code);
venkik 9:29c618fec8fc 511 float Start_bound_pc = (5 + Size_vc); // Starting character for peak current
venkik 9:29c618fec8fc 512 // microUSB.printf("Peak current starting point");
venkik 9:29c618fec8fc 513 // microUSB.printf("%0.1f\r\n",Start_bound_pc);
venkik 9:29c618fec8fc 514 float Size_pc = atof(rx_buffer.substr(Start_bound_pc, 1).c_str());
venkik 9:29c618fec8fc 515 // microUSB.printf("Peak current size");
venkik 9:29c618fec8fc 516 // microUSB.printf("%0.1f\r\n",Size_pc);
venkik 9:29c618fec8fc 517
venkik 9:29c618fec8fc 518 TM_HIGH_range_DAC_input = atof(rx_buffer.substr((1 + Start_bound_pc), (Size_pc)).c_str());
venkik 9:29c618fec8fc 519 // microUSB.printf("Peak current value");
venkik 9:29c618fec8fc 520 // microUSB.printf("%0.3f\r\n",TM_HIGH_range_DAC_input);
venkik 9:29c618fec8fc 521
venkik 9:29c618fec8fc 522 // P10_DAC_Input_code = rint((TM_HIGH_range_DAC_input - 0.65) / 25e-4);
venkik 9:29c618fec8fc 523
venkik 9:29c618fec8fc 524 P10_DAC_Input_code = rint(((TM_HIGH_range_DAC_input)*455)-250);
venkik 9:29c618fec8fc 525
venkik 9:29c618fec8fc 526 if(P10_DAC_Input_code < 0)
venkik 9:29c618fec8fc 527 {
venkik 9:29c618fec8fc 528 P10_DAC_Input_code = 0;
venkik 9:29c618fec8fc 529 }
venkik 9:29c618fec8fc 530 else if(P10_DAC_Input_code > 4095)
venkik 9:29c618fec8fc 531 {
venkik 9:29c618fec8fc 532 P10_DAC_Input_code = 4095;
venkik 9:29c618fec8fc 533 }
venkik 9:29c618fec8fc 534
venkik 9:29c618fec8fc 535
venkik 9:29c618fec8fc 536
venkik 9:29c618fec8fc 537 MAX11300regWrite(P10_DAC_address, P10_DAC_Input_code);
venkik 9:29c618fec8fc 538
venkik 9:29c618fec8fc 539
venkik 9:29c618fec8fc 540 float Start_bound_ON_time = (1 + Start_bound_pc + Size_pc);; // Starting character for duty cycle
venkik 9:29c618fec8fc 541 // microUSB.printf("ON time starting point");
venkik 9:29c618fec8fc 542 // microUSB.printf("%0.1f\r\n",Start_bound_ON_time);
venkik 9:29c618fec8fc 543
venkik 9:29c618fec8fc 544 float Size_ON_time = atof(rx_buffer.substr(Start_bound_ON_time, 1).c_str());
venkik 9:29c618fec8fc 545 // microUSB.printf("Size of ON time");
venkik 9:29c618fec8fc 546 // microUSB.printf("%0.1f\r\n",Size_ON_time);
venkik 9:29c618fec8fc 547
venkik 9:29c618fec8fc 548
venkik 9:29c618fec8fc 549 T_ON = atof(rx_buffer.substr((Start_bound_ON_time + 1), (Size_ON_time)).c_str());
venkik 9:29c618fec8fc 550 // microUSB.printf("ON time");
venkik 9:29c618fec8fc 551 // microUSB.printf("%0.3f\r\n",T_ON);
venkik 9:29c618fec8fc 552
venkik 9:29c618fec8fc 553
venkik 9:29c618fec8fc 554 float Start_bound_OFF_time = Start_bound_ON_time + 1 + Size_ON_time;
venkik 9:29c618fec8fc 555 float Size_OFF_time = atof(rx_buffer.substr(Start_bound_OFF_time, (1)).c_str());
venkik 9:29c618fec8fc 556 // microUSB.printf("Size_OFF time");
venkik 9:29c618fec8fc 557
venkik 9:29c618fec8fc 558 // microUSB.printf("%0.1f\r\n",Size_OFF_time);
venkik 9:29c618fec8fc 559
venkik 9:29c618fec8fc 560 T_OFF = atof(rx_buffer.substr(1 + Start_bound_OFF_time, Size_OFF_time).c_str());
venkik 9:29c618fec8fc 561 // microUSB.printf("OFF time");
venkik 9:29c618fec8fc 562 // microUSB.printf("%0.3f\r\n",T_OFF);
venkik 9:29c618fec8fc 563
venkik 9:29c618fec8fc 564 float Start_bound_rampup = 1 + Start_bound_OFF_time + Size_OFF_time;
venkik 9:29c618fec8fc 565 float size_rampup = atof(rx_buffer.substr(Start_bound_rampup, (1)).c_str());
venkik 9:29c618fec8fc 566 // microUSB.printf("Ramp up size");
venkik 9:29c618fec8fc 567 // microUSB.printf("%0.1f\r\n",size_rampup);
venkik 9:29c618fec8fc 568
venkik 9:29c618fec8fc 569 Ramp_up = atof(rx_buffer.substr((1 + Start_bound_rampup), (size_rampup)).c_str());
venkik 9:29c618fec8fc 570 // microUSB.printf("Ramp up value");
venkik 9:29c618fec8fc 571 // microUSB.printf("%0.3f\r\n",Ramp_up);
venkik 9:29c618fec8fc 572
venkik 9:29c618fec8fc 573 float Start_bound_rampdown = (1 + Start_bound_rampup + size_rampup);
venkik 9:29c618fec8fc 574
venkik 9:29c618fec8fc 575 float size_rampdown = atof(rx_buffer.substr(Start_bound_rampdown, (1)).c_str());
venkik 9:29c618fec8fc 576 // microUSB.printf("Ramp down size");
venkik 9:29c618fec8fc 577 // microUSB.printf("%0.1f\r\n",size_rampdown);
venkik 9:29c618fec8fc 578
venkik 9:29c618fec8fc 579 Ramp_down = atof(rx_buffer.substr((1 + Start_bound_rampdown), (size_rampdown)).c_str());
venkik 9:29c618fec8fc 580 // microUSB.printf("Ramp down value");
venkik 9:29c618fec8fc 581 // microUSB.printf("%0.3f\r\n",Ramp_down);
venkik 9:29c618fec8fc 582
venkik 9:29c618fec8fc 583
venkik 9:29c618fec8fc 584 float Size_loop = (1 + Start_bound_rampdown + size_rampdown);
venkik 9:29c618fec8fc 585 // microUSB.printf("Loop size");
venkik 9:29c618fec8fc 586 // microUSB.printf("%0.1f\r\n",Size_loop);
venkik 9:29c618fec8fc 587
venkik 9:29c618fec8fc 588 // microUSB.printf("In loop");
venkik 9:29c618fec8fc 589 TM_LR_Loop = false;
venkik 9:29c618fec8fc 590 TM_HR_Loop = true;
venkik 9:29c618fec8fc 591 run = true;
venkik 9:29c618fec8fc 592 high_mode = true;
venkik 9:29c618fec8fc 593
venkik 9:29c618fec8fc 594
venkik 9:29c618fec8fc 595 rx_buffer = "";
venkik 9:29c618fec8fc 596 // string_complete = false;
venkik 9:29c618fec8fc 597 }
venkik 9:29c618fec8fc 598
venkik 9:29c618fec8fc 599
venkik 9:29c618fec8fc 600
venkik 9:29c618fec8fc 601 }
venkik 9:29c618fec8fc 602 else
venkik 9:29c618fec8fc 603 {
venkik 9:29c618fec8fc 604 run = false;
venkik 9:29c618fec8fc 605
venkik 9:29c618fec8fc 606 }
venkik 9:29c618fec8fc 607 }
venkik 9:29c618fec8fc 608
venkik 9:29c618fec8fc 609
venkik 9:29c618fec8fc 610 //wait(1);
venkik 9:29c618fec8fc 611 //microUSB.printf("Back to main");
venkik 9:29c618fec8fc 612
switches 0:60a522ae2e35 613 }
venkik 9:29c618fec8fc 614
venkik 9:29c618fec8fc 615
venkik 9:29c618fec8fc 616
venkik 9:29c618fec8fc 617
venkik 9:29c618fec8fc 618
venkik 9:29c618fec8fc 619
switches 0:60a522ae2e35 620 }
switches 0:60a522ae2e35 621
venkik 9:29c618fec8fc 622
venkik 9:29c618fec8fc 623
venkik 9:29c618fec8fc 624