JTPulsedPS

Dependencies:   mbed

Fork of JTNucleo06PulsedPS_Encoder_RS232 by pravin sarode

Committer:
pravinautosys
Date:
Fri Mar 23 13:46:37 2018 +0000
Revision:
5:52468a6cbd55
Parent:
2:b60cb847489c
JTPulsedPS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:005629fe3609 1 #include "mbed.h"
pravinautosys 5:52468a6cbd55 2 #include "TextLCD.h"
pravinautosys 5:52468a6cbd55 3 #include "CRotaryEncoder.h"
pravinautosys 5:52468a6cbd55 4
pravinautosys 5:52468a6cbd55 5 #define DAC_ADDR (0xc0)
pravinautosys 5:52468a6cbd55 6 #define ADC_ADDR (0xD0)
pravinautosys 5:52468a6cbd55 7 #define BlankString " "
pravinautosys 5:52468a6cbd55 8
pravinautosys 5:52468a6cbd55 9 //bool DEBUGON = 1;
pravinautosys 5:52468a6cbd55 10 bool DEBUGON = 0;
pravinautosys 5:52468a6cbd55 11
pravinautosys 5:52468a6cbd55 12 bool TxEmpty = 0;
pravinautosys 5:52468a6cbd55 13 bool SerialAvailable = 0;
pravinautosys 5:52468a6cbd55 14 uint8_t r0,r1,r2,r3,r4,r5,r6,r7;
pravinautosys 5:52468a6cbd55 15 uint8_t ChRead;
pravinautosys 5:52468a6cbd55 16 char SerialBuffer[50];
pravinautosys 5:52468a6cbd55 17
pravinautosys 5:52468a6cbd55 18 Ticker OneSecTicker;
pravinautosys 5:52468a6cbd55 19 uint8_t CursorPos = 0;
pravinautosys 5:52468a6cbd55 20
pravinautosys 5:52468a6cbd55 21 I2C i2c(D4,D5); //I2C i2c(I2C_SDA, I2C_SCL);
pravinautosys 5:52468a6cbd55 22
pravinautosys 5:52468a6cbd55 23 //InterruptIn EncoderButton(PA_7);
pravinautosys 5:52468a6cbd55 24 DigitalIn EncoderButton(PA_7);
pravinautosys 5:52468a6cbd55 25
pravinautosys 5:52468a6cbd55 26 TextLCD lcd(D12, D11, D10, D9, D8, D7,TextLCD::LCD20x4); // rs, e, d4-d7
pravinautosys 5:52468a6cbd55 27 CRotaryEncoder Encoder(D3,D6); //PinA,PinB
pravinautosys 5:52468a6cbd55 28 int EncoderCount = 0;
pravinautosys 5:52468a6cbd55 29
pravinautosys 5:52468a6cbd55 30 DigitalOut MCP4728Ldac(PA_6,1);
pravinautosys 5:52468a6cbd55 31 DigitalIn MCP4728Rdy(PA_5);
pravinautosys 5:52468a6cbd55 32 static uint16_t DACvalue = 0;
pravinautosys 5:52468a6cbd55 33
pravinautosys 5:52468a6cbd55 34 Ticker HMSec;
pravinautosys 5:52468a6cbd55 35 uint8_t NowChannel=0;
pravinautosys 5:52468a6cbd55 36
pravinautosys 5:52468a6cbd55 37 char Buffer[21];
screamer 0:005629fe3609 38
screamer 0:005629fe3609 39 DigitalOut myled(LED1);
screamer 0:005629fe3609 40
pravinautosys 5:52468a6cbd55 41 //Serial pc(SERIAL_TX, SERIAL_RX);
pravinautosys 5:52468a6cbd55 42 Serial Rs232(PA_9, PA_10);
pravinautosys 5:52468a6cbd55 43
pravinautosys 5:52468a6cbd55 44 /*
pravinautosys 5:52468a6cbd55 45 typedef struct {
pravinautosys 5:52468a6cbd55 46 __IO uint32_t FIODIR;
pravinautosys 5:52468a6cbd55 47 uint32_t RESERVED0[3];
pravinautosys 5:52468a6cbd55 48 __IO uint32_t FIOMASK;
pravinautosys 5:52468a6cbd55 49 __IO uint32_t FIOPIN;
pravinautosys 5:52468a6cbd55 50 __IO uint32_t FIOSET;
pravinautosys 5:52468a6cbd55 51 __O uint32_t FIOCLR;
pravinautosys 5:52468a6cbd55 52 } LPC_GPIO_TypeDef;
pravinautosys 5:52468a6cbd55 53 */
pravinautosys 5:52468a6cbd55 54 typedef struct {
pravinautosys 5:52468a6cbd55 55 uint16_t Ch0;
pravinautosys 5:52468a6cbd55 56 uint16_t Ch1;
pravinautosys 5:52468a6cbd55 57 uint16_t Ch2;
pravinautosys 5:52468a6cbd55 58 uint16_t Ch3;
pravinautosys 5:52468a6cbd55 59 } StructDAC;
pravinautosys 5:52468a6cbd55 60
pravinautosys 5:52468a6cbd55 61 typedef struct {
pravinautosys 5:52468a6cbd55 62 uint16_t HexData[4];
pravinautosys 5:52468a6cbd55 63 float RealData[4];
pravinautosys 5:52468a6cbd55 64 float CalibData[4];
pravinautosys 5:52468a6cbd55 65 } StructADC;
pravinautosys 5:52468a6cbd55 66
pravinautosys 5:52468a6cbd55 67 StructADC ADCData;
pravinautosys 5:52468a6cbd55 68 StructDAC DACData;
pravinautosys 5:52468a6cbd55 69
pravinautosys 5:52468a6cbd55 70
pravinautosys 5:52468a6cbd55 71 bool mcp4728_setChannel(uint8_t channel, bool UseInternalVRef, uint8_t powerDownMode, bool use2xGain, uint16_t value){
pravinautosys 5:52468a6cbd55 72 char buf[3];
pravinautosys 5:52468a6cbd55 73 buf[0] = 0x40 | ((channel & 0x3) << 1);
pravinautosys 5:52468a6cbd55 74
pravinautosys 5:52468a6cbd55 75 buf[1] = ((uint8_t)UseInternalVRef << 7) | ((powerDownMode & 0x3) << 5) | ((uint8_t)use2xGain << 4);
pravinautosys 5:52468a6cbd55 76 buf[1] |= (value & 0x0f00)>>8;
pravinautosys 5:52468a6cbd55 77
pravinautosys 5:52468a6cbd55 78 buf[2] = value & 0xff;
pravinautosys 5:52468a6cbd55 79
pravinautosys 5:52468a6cbd55 80 return i2c.write(DAC_ADDR, buf, 3, 0) == 0;
pravinautosys 5:52468a6cbd55 81 }
pravinautosys 5:52468a6cbd55 82
pravinautosys 5:52468a6cbd55 83 int dac_test(void){
pravinautosys 5:52468a6cbd55 84 // static uint16_t value = 0;
pravinautosys 5:52468a6cbd55 85 int ret;
pravinautosys 5:52468a6cbd55 86
pravinautosys 5:52468a6cbd55 87 // MCP4728Ldac = 0;
pravinautosys 5:52468a6cbd55 88 if(DACvalue == 0xfff) DACvalue = 0;
pravinautosys 5:52468a6cbd55 89 else DACvalue = 0xfff;
pravinautosys 5:52468a6cbd55 90 ret = mcp4728_setChannel(0, 1, 0, 1, DACvalue);
pravinautosys 5:52468a6cbd55 91 // DACvalue += 4;
pravinautosys 5:52468a6cbd55 92 // MCP4728Ldac = 1;
pravinautosys 5:52468a6cbd55 93
pravinautosys 5:52468a6cbd55 94 if(!ret) return -2;
pravinautosys 5:52468a6cbd55 95
pravinautosys 5:52468a6cbd55 96 return 1;
pravinautosys 5:52468a6cbd55 97 }
pravinautosys 5:52468a6cbd55 98
pravinautosys 5:52468a6cbd55 99 void EncoderButtonPressed(){
pravinautosys 5:52468a6cbd55 100 int cnt;
pravinautosys 5:52468a6cbd55 101 cnt = Encoder.Get();
pravinautosys 5:52468a6cbd55 102 cnt += 10;
pravinautosys 5:52468a6cbd55 103 Encoder.Set(cnt);
pravinautosys 5:52468a6cbd55 104 if(DEBUGON) DEBUGON = 0;
pravinautosys 5:52468a6cbd55 105 else DEBUGON = 1;
pravinautosys 5:52468a6cbd55 106 }
pravinautosys 5:52468a6cbd55 107 void SetDAC(uint8_t ChNo,uint16_t Value){
pravinautosys 5:52468a6cbd55 108 switch(ChNo){
pravinautosys 5:52468a6cbd55 109 case 0:
pravinautosys 5:52468a6cbd55 110 DACData.Ch0 = Value;
pravinautosys 5:52468a6cbd55 111 mcp4728_setChannel(0, 1, 0, 1, Value);
pravinautosys 5:52468a6cbd55 112 break;
pravinautosys 5:52468a6cbd55 113 case 1:
pravinautosys 5:52468a6cbd55 114 DACData.Ch1 = Value;
pravinautosys 5:52468a6cbd55 115 mcp4728_setChannel(1, 1, 0, 1, Value);
pravinautosys 5:52468a6cbd55 116 break;
pravinautosys 5:52468a6cbd55 117 case 2:
pravinautosys 5:52468a6cbd55 118 DACData.Ch2 = Value;
pravinautosys 5:52468a6cbd55 119 mcp4728_setChannel(2, 1, 0, 1, Value);
pravinautosys 5:52468a6cbd55 120 break;
pravinautosys 5:52468a6cbd55 121 case 3:
pravinautosys 5:52468a6cbd55 122 DACData.Ch3 = Value;
pravinautosys 5:52468a6cbd55 123 mcp4728_setChannel(3, 1, 0, 1, Value);
pravinautosys 5:52468a6cbd55 124 break;
pravinautosys 5:52468a6cbd55 125 }
pravinautosys 5:52468a6cbd55 126 }
pravinautosys 5:52468a6cbd55 127 void UpdateDAC(){
pravinautosys 5:52468a6cbd55 128 mcp4728_setChannel(0, 1, 0, 1, DACData.Ch0);
pravinautosys 5:52468a6cbd55 129 mcp4728_setChannel(1, 1, 0, 1, DACData.Ch1);
pravinautosys 5:52468a6cbd55 130 mcp4728_setChannel(2, 1, 0, 1, DACData.Ch2);
pravinautosys 5:52468a6cbd55 131 mcp4728_setChannel(3, 1, 0, 1, DACData.Ch3);
pravinautosys 5:52468a6cbd55 132 }
pravinautosys 5:52468a6cbd55 133 void ResetDAC(){
pravinautosys 5:52468a6cbd55 134 DACData.Ch0 = 0;
pravinautosys 5:52468a6cbd55 135 DACData.Ch1 = 0;
pravinautosys 5:52468a6cbd55 136 DACData.Ch2 = 0;
pravinautosys 5:52468a6cbd55 137 DACData.Ch3 = 0;
pravinautosys 5:52468a6cbd55 138 UpdateDAC();
pravinautosys 5:52468a6cbd55 139 }
pravinautosys 5:52468a6cbd55 140 void FullDAC(){
pravinautosys 5:52468a6cbd55 141 DACData.Ch0 = 0xfff;
pravinautosys 5:52468a6cbd55 142 DACData.Ch1 = 0xfff;
pravinautosys 5:52468a6cbd55 143 DACData.Ch2 = 0xfff;
pravinautosys 5:52468a6cbd55 144 DACData.Ch3 = 0xfff;
pravinautosys 5:52468a6cbd55 145 UpdateDAC();
pravinautosys 5:52468a6cbd55 146 }
pravinautosys 5:52468a6cbd55 147 bool mcp3428_writeConfig(uint8_t conf){
pravinautosys 5:52468a6cbd55 148 return i2c.write(ADC_ADDR, (char*) &conf, 1, 0) == 0;
pravinautosys 5:52468a6cbd55 149 }
pravinautosys 5:52468a6cbd55 150
pravinautosys 5:52468a6cbd55 151 bool mcp3428_read(uint16_t* data, uint8_t* conf){
pravinautosys 5:52468a6cbd55 152 char buf[3];
pravinautosys 5:52468a6cbd55 153 int ret = i2c.read(ADC_ADDR, buf, 3, 0);
pravinautosys 5:52468a6cbd55 154 if(ret != 0)
pravinautosys 5:52468a6cbd55 155 return false;
pravinautosys 5:52468a6cbd55 156 *data = buf[0] << 8 | buf[1];
pravinautosys 5:52468a6cbd55 157 *conf = buf[2];
pravinautosys 5:52468a6cbd55 158 return true;
pravinautosys 5:52468a6cbd55 159 }
pravinautosys 5:52468a6cbd55 160
pravinautosys 5:52468a6cbd55 161 int ReadADC(uint8_t ChNo){
pravinautosys 5:52468a6cbd55 162 uint8_t conf = 0x98;
pravinautosys 5:52468a6cbd55 163 uint16_t data = 0;
pravinautosys 5:52468a6cbd55 164
pravinautosys 5:52468a6cbd55 165
pravinautosys 5:52468a6cbd55 166 switch(ChNo){
pravinautosys 5:52468a6cbd55 167 case 0:
pravinautosys 5:52468a6cbd55 168 conf = 0x98;
pravinautosys 5:52468a6cbd55 169 break;
pravinautosys 5:52468a6cbd55 170 case 1:
pravinautosys 5:52468a6cbd55 171 conf = 0xb8;
pravinautosys 5:52468a6cbd55 172 break;
pravinautosys 5:52468a6cbd55 173 case 2:
pravinautosys 5:52468a6cbd55 174 conf = 0xd8;
pravinautosys 5:52468a6cbd55 175 break;
pravinautosys 5:52468a6cbd55 176 case 3:
pravinautosys 5:52468a6cbd55 177 conf = 0xf8;
pravinautosys 5:52468a6cbd55 178 break;
pravinautosys 5:52468a6cbd55 179 }
pravinautosys 5:52468a6cbd55 180 if(!mcp3428_writeConfig(conf)) return -1;
pravinautosys 5:52468a6cbd55 181 wait(0.1);
pravinautosys 5:52468a6cbd55 182 int ret = mcp3428_read(&data, &conf);
pravinautosys 5:52468a6cbd55 183 //if(DEBUGON) Rs232.printf("CONF: %02x ChannelNo: %02d \n",conf,ChNo);
pravinautosys 5:52468a6cbd55 184 if(!ret) return -2;
pravinautosys 5:52468a6cbd55 185 return data;
pravinautosys 5:52468a6cbd55 186 }
pravinautosys 5:52468a6cbd55 187 void ConvertNegative(uint8_t ChNo,int d){
pravinautosys 5:52468a6cbd55 188 if(d & 0x8000) {
pravinautosys 5:52468a6cbd55 189 d &= 0x7fff;
pravinautosys 5:52468a6cbd55 190 d = (d ^ 0x07fff) + 1;
pravinautosys 5:52468a6cbd55 191 ADCData.HexData[ChNo] = d;
pravinautosys 5:52468a6cbd55 192 ADCData.RealData[ChNo] = ADCData.HexData[ChNo] * ADCData.CalibData[1] / 32768.0;
pravinautosys 5:52468a6cbd55 193 ADCData.RealData[ChNo] *= (-1.0);
pravinautosys 5:52468a6cbd55 194 }
pravinautosys 5:52468a6cbd55 195 else{
pravinautosys 5:52468a6cbd55 196 ADCData.HexData[ChNo] = d;
pravinautosys 5:52468a6cbd55 197 ADCData.RealData[ChNo] = ADCData.HexData[ChNo] * ADCData.CalibData[ChNo] / 32768.0;
pravinautosys 5:52468a6cbd55 198 }
pravinautosys 5:52468a6cbd55 199 }
pravinautosys 5:52468a6cbd55 200 void ReadADCConverted(){
pravinautosys 5:52468a6cbd55 201 int adData=0;
pravinautosys 5:52468a6cbd55 202 bool Negative=0;
pravinautosys 5:52468a6cbd55 203
pravinautosys 5:52468a6cbd55 204 adData = ReadADC(0);
pravinautosys 5:52468a6cbd55 205 if ( (adData == -1) || (adData == -2) ) goto next1;
pravinautosys 5:52468a6cbd55 206 ConvertNegative(0,adData);
pravinautosys 5:52468a6cbd55 207 next1:
pravinautosys 5:52468a6cbd55 208 adData = ReadADC(1);
pravinautosys 5:52468a6cbd55 209 if ( (adData == -1) || (adData == -2) ) goto next2;
pravinautosys 5:52468a6cbd55 210 ConvertNegative(1,adData);
pravinautosys 5:52468a6cbd55 211 next2:
pravinautosys 5:52468a6cbd55 212 adData = ReadADC(2);
pravinautosys 5:52468a6cbd55 213 if ( (adData == -1) || (adData == -2) ) goto next3;
pravinautosys 5:52468a6cbd55 214 ConvertNegative(2,adData);
pravinautosys 5:52468a6cbd55 215 next3:
pravinautosys 5:52468a6cbd55 216 adData = ReadADC(3);
pravinautosys 5:52468a6cbd55 217 if ( (adData == -1) || (adData == -2) ) goto next4;
pravinautosys 5:52468a6cbd55 218 ConvertNegative(3,adData);
pravinautosys 5:52468a6cbd55 219 next4:
pravinautosys 5:52468a6cbd55 220 return;
pravinautosys 5:52468a6cbd55 221 }
pravinautosys 5:52468a6cbd55 222 /*
pravinautosys 5:52468a6cbd55 223 void ReadADCTicker(){
pravinautosys 5:52468a6cbd55 224 uint8_t conf = 0x98;
pravinautosys 5:52468a6cbd55 225 uint16_t data = 0;
pravinautosys 5:52468a6cbd55 226
pravinautosys 5:52468a6cbd55 227 switch(NowChannel){
pravinautosys 5:52468a6cbd55 228 case 0:conf = 0x98;break;
pravinautosys 5:52468a6cbd55 229 case 1:conf = 0xb8;break;
pravinautosys 5:52468a6cbd55 230 case 2:conf = 0xd8;break;
pravinautosys 5:52468a6cbd55 231 case 3:conf = 0xf8;break;
pravinautosys 5:52468a6cbd55 232 }
pravinautosys 5:52468a6cbd55 233
pravinautosys 5:52468a6cbd55 234 int ret = mcp3428_read(&data, &conf);
pravinautosys 5:52468a6cbd55 235 if(!ret) goto NextCh;
pravinautosys 5:52468a6cbd55 236 // mcp3428_read(&data, &conf);
pravinautosys 5:52468a6cbd55 237 ADCData.HexData[NowChannel] = data & 0x7fff;
pravinautosys 5:52468a6cbd55 238
pravinautosys 5:52468a6cbd55 239 ADCData.RealData[NowChannel] = ( (ADCData.HexData[NowChannel] * ADCData.CalibData[NowChannel] / 32768.0) );
pravinautosys 5:52468a6cbd55 240 NextCh:
pravinautosys 5:52468a6cbd55 241 NowChannel++;
pravinautosys 5:52468a6cbd55 242 if(NowChannel > 3) NowChannel = 0;
pravinautosys 5:52468a6cbd55 243
pravinautosys 5:52468a6cbd55 244 switch(NowChannel){
pravinautosys 5:52468a6cbd55 245 case 0:conf = 0x98;break;
pravinautosys 5:52468a6cbd55 246 case 1:conf = 0xb8;break;
pravinautosys 5:52468a6cbd55 247 case 2:conf = 0xd8;break;
pravinautosys 5:52468a6cbd55 248 case 3:conf = 0xf8;break;
pravinautosys 5:52468a6cbd55 249 }
pravinautosys 5:52468a6cbd55 250 mcp3428_writeConfig(conf);
pravinautosys 5:52468a6cbd55 251
pravinautosys 5:52468a6cbd55 252 }
pravinautosys 5:52468a6cbd55 253 */
pravinautosys 5:52468a6cbd55 254 int adc_test(void){
pravinautosys 5:52468a6cbd55 255 // uint8_t conf = 0x90;
pravinautosys 5:52468a6cbd55 256 uint8_t conf = 0x98;
pravinautosys 5:52468a6cbd55 257 uint16_t data = 0;
pravinautosys 5:52468a6cbd55 258
pravinautosys 5:52468a6cbd55 259 if(!mcp3428_writeConfig(conf)) return -1;
pravinautosys 5:52468a6cbd55 260
pravinautosys 5:52468a6cbd55 261 int ret = mcp3428_read(&data, &conf);
pravinautosys 5:52468a6cbd55 262
pravinautosys 5:52468a6cbd55 263 if(!ret) return -2;
pravinautosys 5:52468a6cbd55 264
pravinautosys 5:52468a6cbd55 265 return data;
pravinautosys 5:52468a6cbd55 266
pravinautosys 5:52468a6cbd55 267 }
pravinautosys 5:52468a6cbd55 268 void HMSecRoutine(){
pravinautosys 5:52468a6cbd55 269 // ReadADCTicker();
pravinautosys 5:52468a6cbd55 270 }
pravinautosys 5:52468a6cbd55 271 void LCDPrintDataADC(){
pravinautosys 5:52468a6cbd55 272 // lcd.cls();
pravinautosys 5:52468a6cbd55 273 sprintf(Buffer,"Ch1: %6.3f V",ADCData.RealData[0]);
pravinautosys 5:52468a6cbd55 274 lcd.locate(0,0);
pravinautosys 5:52468a6cbd55 275 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 276 lcd.locate(0,0);
pravinautosys 5:52468a6cbd55 277 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 278
pravinautosys 5:52468a6cbd55 279 sprintf(Buffer,"Ch2: %6.3f V",ADCData.RealData[1]);
pravinautosys 5:52468a6cbd55 280 lcd.locate(0,1);
pravinautosys 5:52468a6cbd55 281 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 282 lcd.locate(0,1);
pravinautosys 5:52468a6cbd55 283 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 284
pravinautosys 5:52468a6cbd55 285 sprintf(Buffer,"Ch3: %6.3f V",ADCData.RealData[2]);
pravinautosys 5:52468a6cbd55 286 lcd.locate(0,2);
pravinautosys 5:52468a6cbd55 287 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 288 lcd.locate(0,2);
pravinautosys 5:52468a6cbd55 289 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 290
pravinautosys 5:52468a6cbd55 291 sprintf(Buffer,"Ch4: %6.3f V",ADCData.RealData[3]);
pravinautosys 5:52468a6cbd55 292 lcd.locate(0,3);
pravinautosys 5:52468a6cbd55 293 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 294 lcd.locate(0,3);
pravinautosys 5:52468a6cbd55 295 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 296
pravinautosys 5:52468a6cbd55 297 // Rs232printf("adc_test: %5.3f %5.3f %5.3f %5.3f\n", ADCData.RealData[0],ADCData.RealData[1],ADCData.RealData[2],ADCData.RealData[3]);
pravinautosys 5:52468a6cbd55 298
pravinautosys 5:52468a6cbd55 299
pravinautosys 5:52468a6cbd55 300 }
pravinautosys 5:52468a6cbd55 301 void LCDPrintDataDAC(){
pravinautosys 5:52468a6cbd55 302 // lcd.cls();
pravinautosys 5:52468a6cbd55 303 sprintf(Buffer," Ch1: %4d",DACData.Ch0);
pravinautosys 5:52468a6cbd55 304 lcd.locate(0,0);
pravinautosys 5:52468a6cbd55 305 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 306 lcd.locate(0,0);
pravinautosys 5:52468a6cbd55 307 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 308
pravinautosys 5:52468a6cbd55 309 sprintf(Buffer," Ch2: %4d",DACData.Ch1);
pravinautosys 5:52468a6cbd55 310 lcd.locate(0,1);
pravinautosys 5:52468a6cbd55 311 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 312 lcd.locate(0,1);
pravinautosys 5:52468a6cbd55 313 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 314
pravinautosys 5:52468a6cbd55 315 sprintf(Buffer," Ch3: %4d",DACData.Ch2);
pravinautosys 5:52468a6cbd55 316 lcd.locate(0,2);
pravinautosys 5:52468a6cbd55 317 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 318 lcd.locate(0,2);
pravinautosys 5:52468a6cbd55 319 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 320
pravinautosys 5:52468a6cbd55 321 sprintf(Buffer," Ch4: %4d",DACData.Ch3);
pravinautosys 5:52468a6cbd55 322 lcd.locate(0,3);
pravinautosys 5:52468a6cbd55 323 lcd.printf(BlankString);
pravinautosys 5:52468a6cbd55 324 lcd.locate(0,3);
pravinautosys 5:52468a6cbd55 325 lcd.printf(Buffer);
pravinautosys 5:52468a6cbd55 326
pravinautosys 5:52468a6cbd55 327 while(EncoderButton == 0);
pravinautosys 5:52468a6cbd55 328
pravinautosys 5:52468a6cbd55 329 }
pravinautosys 5:52468a6cbd55 330
pravinautosys 5:52468a6cbd55 331 void DisplayCursor(){
pravinautosys 5:52468a6cbd55 332
pravinautosys 5:52468a6cbd55 333 switch(CursorPos){
pravinautosys 5:52468a6cbd55 334 case 0:
pravinautosys 5:52468a6cbd55 335 lcd.locate(0,0);lcd.printf(">");
pravinautosys 5:52468a6cbd55 336 lcd.locate(0,1);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 337 lcd.locate(0,2);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 338 lcd.locate(0,3);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 339 break;
pravinautosys 5:52468a6cbd55 340 case 1:
pravinautosys 5:52468a6cbd55 341 lcd.locate(0,0);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 342 lcd.locate(0,1);lcd.printf(">");
pravinautosys 5:52468a6cbd55 343 lcd.locate(0,2);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 344 lcd.locate(0,3);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 345 break;
pravinautosys 5:52468a6cbd55 346 case 2:
pravinautosys 5:52468a6cbd55 347 lcd.locate(0,0);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 348 lcd.locate(0,1);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 349 lcd.locate(0,2);lcd.printf(">");
pravinautosys 5:52468a6cbd55 350 lcd.locate(0,3);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 351 break;
pravinautosys 5:52468a6cbd55 352 case 3:
pravinautosys 5:52468a6cbd55 353 lcd.locate(0,0);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 354 lcd.locate(0,1);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 355 lcd.locate(0,2);lcd.printf(" ");
pravinautosys 5:52468a6cbd55 356 lcd.locate(0,3);lcd.printf(">");
pravinautosys 5:52468a6cbd55 357 break;
pravinautosys 5:52468a6cbd55 358 }
pravinautosys 5:52468a6cbd55 359 }
pravinautosys 5:52468a6cbd55 360 void ProcessEncoder(){
pravinautosys 5:52468a6cbd55 361 uint16_t val;
pravinautosys 5:52468a6cbd55 362 switch(CursorPos){
pravinautosys 5:52468a6cbd55 363 case 0: val = DACData.Ch0;break;
pravinautosys 5:52468a6cbd55 364 case 1: val = DACData.Ch1;break;
pravinautosys 5:52468a6cbd55 365 case 2: val = DACData.Ch2;break;
pravinautosys 5:52468a6cbd55 366 case 3: val = DACData.Ch3;break;
pravinautosys 5:52468a6cbd55 367 }
pravinautosys 5:52468a6cbd55 368 Encoder.Set(val);
pravinautosys 5:52468a6cbd55 369 here:
pravinautosys 5:52468a6cbd55 370 val = Encoder.Get();
pravinautosys 5:52468a6cbd55 371 lcd.locate(0,3);
pravinautosys 5:52468a6cbd55 372 lcd.printf("%04d",val);
pravinautosys 5:52468a6cbd55 373 if(Encoder.Get() < 0) Encoder.Set(0);
pravinautosys 5:52468a6cbd55 374 if(Encoder.Get() > 4095) Encoder.Set(4095);
pravinautosys 5:52468a6cbd55 375 if(EncoderButton == 0){
pravinautosys 5:52468a6cbd55 376 while(EncoderButton == 0);
pravinautosys 5:52468a6cbd55 377 val = Encoder.Get();
pravinautosys 5:52468a6cbd55 378 switch(CursorPos) {
pravinautosys 5:52468a6cbd55 379 case 0:
pravinautosys 5:52468a6cbd55 380 DACData.Ch0 = val;
pravinautosys 5:52468a6cbd55 381 SetDAC(0,DACData.Ch0);
pravinautosys 5:52468a6cbd55 382 break;
pravinautosys 5:52468a6cbd55 383 case 1:
pravinautosys 5:52468a6cbd55 384 DACData.Ch1 = val;
pravinautosys 5:52468a6cbd55 385 SetDAC(1,DACData.Ch1);
pravinautosys 5:52468a6cbd55 386 break;
pravinautosys 5:52468a6cbd55 387 case 2:
pravinautosys 5:52468a6cbd55 388 DACData.Ch2 = val;
pravinautosys 5:52468a6cbd55 389 SetDAC(2,DACData.Ch2);
pravinautosys 5:52468a6cbd55 390 break;
pravinautosys 5:52468a6cbd55 391 case 3:
pravinautosys 5:52468a6cbd55 392 DACData.Ch3 = val;
pravinautosys 5:52468a6cbd55 393 SetDAC(3,DACData.Ch3);
pravinautosys 5:52468a6cbd55 394 break;
pravinautosys 5:52468a6cbd55 395 }
pravinautosys 5:52468a6cbd55 396 return;
pravinautosys 5:52468a6cbd55 397 }
pravinautosys 5:52468a6cbd55 398 goto here;
pravinautosys 5:52468a6cbd55 399 }
pravinautosys 5:52468a6cbd55 400 void SetTheDacData(){
pravinautosys 5:52468a6cbd55 401 lcd.cls();
pravinautosys 5:52468a6cbd55 402 lcd.locate(0,2);
pravinautosys 5:52468a6cbd55 403 switch(CursorPos){
pravinautosys 5:52468a6cbd55 404 case 0:lcd.printf("Set CH%02d Value",CursorPos+1);break;
pravinautosys 5:52468a6cbd55 405 case 1:lcd.printf("Set CH%02d Value",CursorPos+1);break;
pravinautosys 5:52468a6cbd55 406 case 2:lcd.printf("Set CH%02d Value",CursorPos+1);break;
pravinautosys 5:52468a6cbd55 407 case 3:lcd.printf("Set CH%02d Value",CursorPos+1);break;
pravinautosys 5:52468a6cbd55 408 }
pravinautosys 5:52468a6cbd55 409 ProcessEncoder();
pravinautosys 5:52468a6cbd55 410 }
pravinautosys 5:52468a6cbd55 411 void SetDac(){
pravinautosys 5:52468a6cbd55 412 int ECount;
pravinautosys 5:52468a6cbd55 413 CursorPos = 0;
pravinautosys 5:52468a6cbd55 414 here1:
pravinautosys 5:52468a6cbd55 415 Encoder.Set(CursorPos);
pravinautosys 5:52468a6cbd55 416 LCDPrintDataDAC();
pravinautosys 5:52468a6cbd55 417 while(1){
pravinautosys 5:52468a6cbd55 418 ECount = Encoder.Get();
pravinautosys 5:52468a6cbd55 419 if(ECount > 3){ECount = 0;CursorPos = 0;Encoder.Set(CursorPos);return;}
pravinautosys 5:52468a6cbd55 420 else { CursorPos = ECount;Encoder.Set(CursorPos);}
pravinautosys 5:52468a6cbd55 421 DisplayCursor();
pravinautosys 5:52468a6cbd55 422 if(EncoderButton == 0){
pravinautosys 5:52468a6cbd55 423 while(EncoderButton == 0);
pravinautosys 5:52468a6cbd55 424 SetTheDacData();
pravinautosys 5:52468a6cbd55 425 goto here1;
pravinautosys 5:52468a6cbd55 426 }
pravinautosys 5:52468a6cbd55 427 }
pravinautosys 5:52468a6cbd55 428 }
pravinautosys 5:52468a6cbd55 429
pravinautosys 5:52468a6cbd55 430 void PushToBuffer(){
pravinautosys 5:52468a6cbd55 431 r0 = r1;
pravinautosys 5:52468a6cbd55 432 r1 = r2;
pravinautosys 5:52468a6cbd55 433 r2 = r3;
pravinautosys 5:52468a6cbd55 434 r3 = r4;
pravinautosys 5:52468a6cbd55 435 r4 = r5;
pravinautosys 5:52468a6cbd55 436 r5 = r6;
pravinautosys 5:52468a6cbd55 437 r6 = r7;
pravinautosys 5:52468a6cbd55 438 r7 = ChRead;
pravinautosys 5:52468a6cbd55 439 if((r0==':')&&(r7==';')) SerialAvailable = 1;
pravinautosys 5:52468a6cbd55 440 }
pravinautosys 5:52468a6cbd55 441
pravinautosys 5:52468a6cbd55 442 void Rx_interrupt() {
pravinautosys 5:52468a6cbd55 443 while(Rs232.readable()){
pravinautosys 5:52468a6cbd55 444 ChRead = Rs232.getc();
pravinautosys 5:52468a6cbd55 445 PushToBuffer();
pravinautosys 5:52468a6cbd55 446 }
pravinautosys 5:52468a6cbd55 447 }
pravinautosys 5:52468a6cbd55 448
pravinautosys 5:52468a6cbd55 449 void Tx_interrupt() {
pravinautosys 5:52468a6cbd55 450 // TxEmpty = 1;
pravinautosys 5:52468a6cbd55 451 return;
pravinautosys 5:52468a6cbd55 452 }
pravinautosys 5:52468a6cbd55 453
pravinautosys 5:52468a6cbd55 454 void SendSerial(){
pravinautosys 5:52468a6cbd55 455 uint8_t ch,i;
pravinautosys 5:52468a6cbd55 456 TxEmpty = 1;
pravinautosys 5:52468a6cbd55 457 for(i=0;i<=49;i++){
pravinautosys 5:52468a6cbd55 458 ch = SerialBuffer[i];
pravinautosys 5:52468a6cbd55 459 if(ch == 0){
pravinautosys 5:52468a6cbd55 460 while(!TxEmpty);
pravinautosys 5:52468a6cbd55 461 TxEmpty = 0;
pravinautosys 5:52468a6cbd55 462 Rs232.putc(0x0d);
pravinautosys 5:52468a6cbd55 463 while(!TxEmpty);
pravinautosys 5:52468a6cbd55 464 TxEmpty = 0;
pravinautosys 5:52468a6cbd55 465 Rs232.putc(0x0a);
pravinautosys 5:52468a6cbd55 466 return;
pravinautosys 5:52468a6cbd55 467 }
pravinautosys 5:52468a6cbd55 468 while(!TxEmpty);
pravinautosys 5:52468a6cbd55 469 TxEmpty = 0;
pravinautosys 5:52468a6cbd55 470 Rs232.putc(ch);
pravinautosys 5:52468a6cbd55 471 }
pravinautosys 5:52468a6cbd55 472
pravinautosys 5:52468a6cbd55 473 }
pravinautosys 5:52468a6cbd55 474 void SerialDataSend(){
pravinautosys 5:52468a6cbd55 475 Rs232.printf("ADCChannels: %6.3f %6.3f %6.3f %6.3f\n", ADCData.RealData[0],ADCData.RealData[1],ADCData.RealData[2],ADCData.RealData[3]);
pravinautosys 5:52468a6cbd55 476 }
pravinautosys 5:52468a6cbd55 477 void PrintRs232(){
pravinautosys 5:52468a6cbd55 478 lcd.cls();
pravinautosys 5:52468a6cbd55 479 lcd.locate(0,2);lcd.printf("SerialCommand");
pravinautosys 5:52468a6cbd55 480 lcd.locate(0,3);lcd.putc(r0);
pravinautosys 5:52468a6cbd55 481 lcd.locate(1,3);lcd.putc(r1);
pravinautosys 5:52468a6cbd55 482 lcd.locate(2,3);lcd.putc(r2);
pravinautosys 5:52468a6cbd55 483 lcd.locate(3,3);lcd.putc(r3);
pravinautosys 5:52468a6cbd55 484 lcd.locate(4,3);lcd.putc(r4);
pravinautosys 5:52468a6cbd55 485 lcd.locate(5,3);lcd.putc(r5);
pravinautosys 5:52468a6cbd55 486 lcd.locate(6,3);lcd.putc(r6);
pravinautosys 5:52468a6cbd55 487 lcd.locate(7,3);lcd.putc(r7);
pravinautosys 5:52468a6cbd55 488 }
pravinautosys 5:52468a6cbd55 489 void SetSerialDAC(){
pravinautosys 5:52468a6cbd55 490 uint8_t ch;
pravinautosys 5:52468a6cbd55 491 uint16_t val;
pravinautosys 5:52468a6cbd55 492 ch = r2 - '0';
pravinautosys 5:52468a6cbd55 493 val = (r3 - '0')*1000;
pravinautosys 5:52468a6cbd55 494 val += (r4 - '0')*100;
pravinautosys 5:52468a6cbd55 495 val += (r5 - '0')*10;
pravinautosys 5:52468a6cbd55 496 val += (r6 - '0')*1;
pravinautosys 5:52468a6cbd55 497 if(val > 4095) val = 4095;
pravinautosys 5:52468a6cbd55 498 if(val < 0) val = 0;
pravinautosys 5:52468a6cbd55 499 if((ch >= 0) && (ch < 4)) SetDAC(ch,val);
pravinautosys 5:52468a6cbd55 500 else return;
pravinautosys 5:52468a6cbd55 501 }
pravinautosys 5:52468a6cbd55 502
pravinautosys 5:52468a6cbd55 503
pravinautosys 5:52468a6cbd55 504 void ParseCom(){
pravinautosys 5:52468a6cbd55 505 if(SerialAvailable){
pravinautosys 5:52468a6cbd55 506 PrintRs232();
pravinautosys 5:52468a6cbd55 507 switch(r1){
pravinautosys 5:52468a6cbd55 508 case '3'://DAC Command Set Value;
pravinautosys 5:52468a6cbd55 509 SetSerialDAC();
pravinautosys 5:52468a6cbd55 510 break;
pravinautosys 5:52468a6cbd55 511 case '4'://DAC Command Set Zero;
pravinautosys 5:52468a6cbd55 512 ResetDAC();
pravinautosys 5:52468a6cbd55 513 break;
pravinautosys 5:52468a6cbd55 514 case '5'://DAC Command Set Full;
pravinautosys 5:52468a6cbd55 515 FullDAC();
pravinautosys 5:52468a6cbd55 516 break;
pravinautosys 5:52468a6cbd55 517 default:break;
pravinautosys 5:52468a6cbd55 518 }
pravinautosys 5:52468a6cbd55 519 }
pravinautosys 5:52468a6cbd55 520 SerialAvailable = 0;
pravinautosys 5:52468a6cbd55 521 }
screamer 0:005629fe3609 522 int main() {
pravinautosys 5:52468a6cbd55 523 uint16_t Counter=0;
pravinautosys 5:52468a6cbd55 524 // EncoderButton.fall(&EncoderButtonPressed);
pravinautosys 5:52468a6cbd55 525 // EncoderButton.enable_irq ();
pravinautosys 5:52468a6cbd55 526
pravinautosys 5:52468a6cbd55 527
pravinautosys 5:52468a6cbd55 528 Rs232.attach(&Rx_interrupt, Serial::RxIrq);
pravinautosys 5:52468a6cbd55 529 Rs232.attach(&Tx_interrupt, Serial::TxIrq);
pravinautosys 5:52468a6cbd55 530
pravinautosys 5:52468a6cbd55 531 OneSecTicker.attach(&SerialDataSend,1.0);
pravinautosys 5:52468a6cbd55 532
pravinautosys 5:52468a6cbd55 533 lcd.cls();
pravinautosys 5:52468a6cbd55 534 MCP4728Ldac = 0;
pravinautosys 5:52468a6cbd55 535 ResetDAC();
pravinautosys 5:52468a6cbd55 536 //ForHighVoltageModule
pravinautosys 5:52468a6cbd55 537 ADCData.CalibData[0] = 10.08;
pravinautosys 5:52468a6cbd55 538 ADCData.CalibData[1] = 10.079;
pravinautosys 5:52468a6cbd55 539 ADCData.CalibData[2] = 10.096;
pravinautosys 5:52468a6cbd55 540 ADCData.CalibData[3] = 10.095;
pravinautosys 5:52468a6cbd55 541
pravinautosys 5:52468a6cbd55 542 DACData.Ch0 = 0;
pravinautosys 5:52468a6cbd55 543 DACData.Ch1 = 0;
pravinautosys 5:52468a6cbd55 544 DACData.Ch2 = 0;
pravinautosys 5:52468a6cbd55 545 DACData.Ch3 = 0;
pravinautosys 5:52468a6cbd55 546
pravinautosys 5:52468a6cbd55 547 lcd.locate(0,0);
pravinautosys 5:52468a6cbd55 548 lcd.printf("Test Jig Module ");
pravinautosys 5:52468a6cbd55 549 // lcd.printf("4 Ch HV Module ");
pravinautosys 5:52468a6cbd55 550 wait(2);
pravinautosys 5:52468a6cbd55 551
pravinautosys 5:52468a6cbd55 552 while(1){
pravinautosys 5:52468a6cbd55 553 ReadADCConverted();
pravinautosys 5:52468a6cbd55 554 LCDPrintDataADC();
pravinautosys 5:52468a6cbd55 555 ParseCom();
pravinautosys 5:52468a6cbd55 556 if(EncoderButton == 0){
pravinautosys 5:52468a6cbd55 557 SetDac();
pravinautosys 5:52468a6cbd55 558 }
pravinautosys 5:52468a6cbd55 559 wait(1);
pravinautosys 5:52468a6cbd55 560 myled = !myled;
screamer 0:005629fe3609 561 }
pravinautosys 5:52468a6cbd55 562
screamer 0:005629fe3609 563 }
pravinautosys 5:52468a6cbd55 564
pravinautosys 5:52468a6cbd55 565
pravinautosys 5:52468a6cbd55 566
pravinautosys 5:52468a6cbd55 567
pravinautosys 5:52468a6cbd55 568
pravinautosys 5:52468a6cbd55 569
pravinautosys 5:52468a6cbd55 570