AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Thu Feb 11 02:11:11 2016 +0000
Revision:
4:2a0242bfbe0c
Parent:
3:59a57634f1fa
Child:
5:dcaed6b6b3cb
????? ????????????? ? ???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vanenzo 0:957268dd05c4 1 #include "mbed.h"
vanenzo 0:957268dd05c4 2 #include "FastPWM.h"
vanenzo 0:957268dd05c4 3 #define ddsstart SYNC2 = 1;wait_ms(1);SYNC2 = 0;wait_ms(1)
vanenzo 0:957268dd05c4 4 #define ddsstop SYNC2 = 1;wait_ms(1)
vanenzo 0:957268dd05c4 5 #define ddsreset DDS.write(0x21C0)
vanenzo 0:957268dd05c4 6 #define sinsoft DDS.write(0x2000)
vanenzo 0:957268dd05c4 7 #define trisoft DDS.write(0x2002)
vanenzo 0:957268dd05c4 8 #define tripin DDS.write(0x2202)
vanenzo 0:957268dd05c4 9 #define ddsoff DDS.write(0x2048)
vanenzo 0:957268dd05c4 10 #define dacstart SYNC1 = 1;wait_ms(1);SYNC1 = 0;wait_ms(1)
vanenzo 0:957268dd05c4 11 #define dacstop SYNC1 = 1;wait_ms(1)
vanenzo 0:957268dd05c4 12
vanenzo 0:957268dd05c4 13
vanenzo 0:957268dd05c4 14 //пины управления мультиплексорами генератора
vanenzo 0:957268dd05c4 15 /*DigitalOut outA0(PA_3);
vanenzo 0:957268dd05c4 16 DigitalOut outA1(PA_2);
vanenzo 0:957268dd05c4 17 DigitalOut outA2(PA_10);
vanenzo 0:957268dd05c4 18 DigitalOut outA3(PB_3);
vanenzo 0:957268dd05c4 19 DigitalOut outE1(PB_5);
vanenzo 0:957268dd05c4 20 DigitalOut outE2(PB_4);
vanenzo 0:957268dd05c4 21 DigitalOut outE3(PB_10);
vanenzo 0:957268dd05c4 22 DigitalOut outE4(PA_8);
vanenzo 0:957268dd05c4 23 DigitalOut outE5(PA_9);
vanenzo 0:957268dd05c4 24 DigitalOut outE6(PC_7);
vanenzo 0:957268dd05c4 25 DigitalOut outE7(PB_6);
vanenzo 0:957268dd05c4 26 DigitalOut outE8(PA_7);
vanenzo 0:957268dd05c4 27 DigitalOut outE9(PA_6);
vanenzo 0:957268dd05c4 28 DigitalOut outE10(PA_5);
vanenzo 0:957268dd05c4 29 //пины управления мультиплексорами измерительной части
vanenzo 0:957268dd05c4 30 DigitalOut inA0(PB_9);
vanenzo 0:957268dd05c4 31 DigitalOut inA1(PB_8);
vanenzo 0:957268dd05c4 32 DigitalOut inA2(PC_9);
vanenzo 0:957268dd05c4 33 DigitalOut inA3(PC_8);
vanenzo 0:957268dd05c4 34 DigitalOut inE1(PC_6);
vanenzo 0:957268dd05c4 35 DigitalOut inE2(PC_5);
vanenzo 0:957268dd05c4 36 DigitalOut inE3(PA_12);
vanenzo 0:957268dd05c4 37 DigitalOut inE4(PA_11);
vanenzo 0:957268dd05c4 38 DigitalOut inE5(PB_12);
vanenzo 0:957268dd05c4 39 DigitalOut inE6(PB_2);
vanenzo 0:957268dd05c4 40 DigitalOut inE7(PB_1);
vanenzo 0:957268dd05c4 41 DigitalOut inE8(PB_15);
vanenzo 0:957268dd05c4 42 DigitalOut inE9(PB_14);
vanenzo 0:957268dd05c4 43 DigitalOut inE10(PB_13);*/
vanenzo 0:957268dd05c4 44 AnalogIn analog_value(PC_4);
vanenzo 0:957268dd05c4 45 Serial serial(USBTX,USBRX);
vanenzo 0:957268dd05c4 46 FastPWM mclk(PA_15);
vanenzo 0:957268dd05c4 47 FastPWM sq(PB_7);
vanenzo 2:b489f23d9d2c 48 SPI DDS(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 49 SPI DAC(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 50 DigitalOut SYNC1(PC_11);
vanenzo 0:957268dd05c4 51 DigitalOut SYNC2(PD_2);
vanenzo 0:957268dd05c4 52
vanenzo 0:957268dd05c4 53 //DigitalOut mux_out[10] = {(PB_5), (PB_4), (PB_10), (PA_8), (PA_9),(PC_7), (PB_6),(PA_7),(PA_6),(PA_5)};
vanenzo 0:957268dd05c4 54 //DigitalOut mux_in[10] = {(PC_6), (PC_5), (PA_12), (PA_11), (PB_12),(PB_2), (PB_1),(PB_15), (PB_14),(PB_13)};
vanenzo 0:957268dd05c4 55
vanenzo 4:2a0242bfbe0c 56 char key[] = "5";
vanenzo 4:2a0242bfbe0c 57 char buffer[2];
vanenzo 4:2a0242bfbe0c 58
vanenzo 0:957268dd05c4 59 int freqdata;
vanenzo 0:957268dd05c4 60 float amp;
vanenzo 0:957268dd05c4 61 int form;
vanenzo 0:957268dd05c4 62 float mdata;
vanenzo 0:957268dd05c4 63 int sinus();
vanenzo 0:957268dd05c4 64 int square();
vanenzo 0:957268dd05c4 65 int triangle();
vanenzo 0:957268dd05c4 66 int adc_read();
vanenzo 0:957268dd05c4 67 int request();
vanenzo 0:957268dd05c4 68 int rasputte();
vanenzo 0:957268dd05c4 69 int adc_read();
vanenzo 0:957268dd05c4 70
vanenzo 4:2a0242bfbe0c 71 int main() {
vanenzo 4:2a0242bfbe0c 72 while(true) {
vanenzo 3:59a57634f1fa 73
vanenzo 3:59a57634f1fa 74
vanenzo 3:59a57634f1fa 75 // serial.printf("start \r\n");
vanenzo 0:957268dd05c4 76 /*outE1=0;
vanenzo 0:957268dd05c4 77 inE1=0;
vanenzo 0:957268dd05c4 78 outE2=outE3=outE4=outE5=outE6=outE7=outE8=outE9=outE10=0;
vanenzo 0:957268dd05c4 79 inE2=inE3=inE4=inE5=inE6=inE7=inE8=inE9=inE10=0;
vanenzo 0:957268dd05c4 80 outA0=0;outA1=0;outA2=0;outA3=0;
vanenzo 0:957268dd05c4 81 inA0=1;inA1=0;inA2=0;inA3=0; */
vanenzo 0:957268dd05c4 82 ddsstop;
vanenzo 0:957268dd05c4 83 dacstop;
vanenzo 0:957268dd05c4 84 DDS.format(16,2);
vanenzo 2:b489f23d9d2c 85 ddsstart;
vanenzo 0:957268dd05c4 86 DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);
vanenzo 0:957268dd05c4 87 ddsstop;
vanenzo 0:957268dd05c4 88 /* ddsstart;
vanenzo 0:957268dd05c4 89 ddsreset;
vanenzo 0:957268dd05c4 90 ddsstop;*/
vanenzo 4:2a0242bfbe0c 91
vanenzo 4:2a0242bfbe0c 92 do {
vanenzo 4:2a0242bfbe0c 93 fflush (stdout);
vanenzo 4:2a0242bfbe0c 94 scanf ("%2s",buffer);
vanenzo 4:2a0242bfbe0c 95 } while (strcmp (key,buffer) != 0);
vanenzo 4:2a0242bfbe0c 96 fflush (stdout);
vanenzo 4:2a0242bfbe0c 97 //printf("%i",7);
vanenzo 4:2a0242bfbe0c 98
vanenzo 0:957268dd05c4 99 mclk.period_us(0.1);
vanenzo 0:957268dd05c4 100 mclk.pulsewidth_us(0.05);
vanenzo 0:957268dd05c4 101 request();
vanenzo 3:59a57634f1fa 102 // serial.printf("finish");
vanenzo 3:59a57634f1fa 103 // serial.printf("\r\n");
vanenzo 0:957268dd05c4 104 rasputte();
vanenzo 0:957268dd05c4 105 adc_read();
vanenzo 3:59a57634f1fa 106 // serial.printf("begin");
vanenzo 3:59a57634f1fa 107 // serial.printf("\r\n");
vanenzo 3:59a57634f1fa 108 // serial.printf("%f\r\n", mdata);
vanenzo 3:59a57634f1fa 109 //serial.printf("end");
vanenzo 3:59a57634f1fa 110 //serial.printf("\r\n");
vanenzo 4:2a0242bfbe0c 111 //ddsstart;
vanenzo 4:2a0242bfbe0c 112 //ddsoff;
vanenzo 4:2a0242bfbe0c 113 //ddsstop;
vanenzo 3:59a57634f1fa 114 }
vanenzo 4:2a0242bfbe0c 115 }
vanenzo 0:957268dd05c4 116
vanenzo 0:957268dd05c4 117 int amplitude () {
vanenzo 3:59a57634f1fa 118 uint16_t ampt;
vanenzo 3:59a57634f1fa 119 uint16_t ampReg;
vanenzo 2:b489f23d9d2c 120 ampt = uint16_t(819.2*(5-amp));
vanenzo 0:957268dd05c4 121 ampReg = uint16_t(ampt & 0xFFF);
vanenzo 2:b489f23d9d2c 122 DAC.format(16,1);
vanenzo 2:b489f23d9d2c 123 dacstart;
vanenzo 0:957268dd05c4 124 DAC.write(ampReg*4);
vanenzo 2:b489f23d9d2c 125 dacstop;
vanenzo 3:59a57634f1fa 126 // serial.printf("amp %X \r\n", ampReg*4);
vanenzo 0:957268dd05c4 127 return 0;
vanenzo 0:957268dd05c4 128 }
vanenzo 0:957268dd05c4 129
vanenzo 0:957268dd05c4 130 int freq () {
vanenzo 0:957268dd05c4 131 ddsstart;
vanenzo 0:957268dd05c4 132 float FreqReg;
vanenzo 0:957268dd05c4 133 uint32_t ftemp;
vanenzo 0:957268dd05c4 134 uint16_t Uptemp, Lowtemp;
vanenzo 0:957268dd05c4 135 FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
vanenzo 0:957268dd05c4 136 ftemp = (uint32_t)FreqReg;
vanenzo 0:957268dd05c4 137 Lowtemp = (uint16_t)(ftemp & 0x3FFF);
vanenzo 0:957268dd05c4 138 Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
vanenzo 0:957268dd05c4 139 DDS.write(Lowtemp + 0x4000);ddsstart;
vanenzo 0:957268dd05c4 140 DDS.write(Uptemp + 0x4000);
vanenzo 3:59a57634f1fa 141 //serial.printf("uptemp %X \r\n", Uptemp + 0x4000);
vanenzo 3:59a57634f1fa 142 //serial.printf("lowtemp %X \r\n", Lowtemp + 0x4000);
vanenzo 0:957268dd05c4 143 ddsstop;
vanenzo 0:957268dd05c4 144 return 0;
vanenzo 0:957268dd05c4 145 }
vanenzo 0:957268dd05c4 146
vanenzo 0:957268dd05c4 147 int freqsq () {
vanenzo 0:957268dd05c4 148 float period;
vanenzo 0:957268dd05c4 149 period = 1000/freqdata;
vanenzo 0:957268dd05c4 150 sq.period_us(period);
vanenzo 0:957268dd05c4 151 sq.pulsewidth_us(period/2);
vanenzo 0:957268dd05c4 152 return 0;
vanenzo 0:957268dd05c4 153 }
vanenzo 0:957268dd05c4 154
vanenzo 0:957268dd05c4 155 int sinus() {
vanenzo 0:957268dd05c4 156 ddsstart;
vanenzo 0:957268dd05c4 157 sinsoft;
vanenzo 0:957268dd05c4 158 freq();
vanenzo 0:957268dd05c4 159 ddsstop;
vanenzo 0:957268dd05c4 160 amplitude();
vanenzo 0:957268dd05c4 161 return 0;
vanenzo 0:957268dd05c4 162 }
vanenzo 0:957268dd05c4 163
vanenzo 0:957268dd05c4 164 int square() {
vanenzo 1:8b6ad9d92745 165 freqsq();
vanenzo 2:b489f23d9d2c 166 ddsstart;DDS.write(0x210A);
vanenzo 1:8b6ad9d92745 167 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 168 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 169 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 170 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 171 ddsstart;DDS.write(0xCC00);
vanenzo 1:8b6ad9d92745 172 ddsstart;DDS.write(0xE400);
vanenzo 1:8b6ad9d92745 173 ddsstart;DDS.write(0x220A);
vanenzo 0:957268dd05c4 174 ddsstop;
vanenzo 0:957268dd05c4 175 amplitude();
vanenzo 0:957268dd05c4 176 return 0;
vanenzo 0:957268dd05c4 177 }
vanenzo 0:957268dd05c4 178
vanenzo 0:957268dd05c4 179 int triangle() {
vanenzo 0:957268dd05c4 180 ddsstart;
vanenzo 0:957268dd05c4 181 trisoft;
vanenzo 0:957268dd05c4 182 ddsstart;
vanenzo 0:957268dd05c4 183 freq();
vanenzo 0:957268dd05c4 184 ddsstop;
vanenzo 0:957268dd05c4 185 amplitude();
vanenzo 0:957268dd05c4 186 return 0;
vanenzo 0:957268dd05c4 187 }
vanenzo 0:957268dd05c4 188 int adc_read()
vanenzo 0:957268dd05c4 189 {
vanenzo 0:957268dd05c4 190 float y=0;
vanenzo 0:957268dd05c4 191 float ymax=0;
vanenzo 0:957268dd05c4 192 int ar = 0;
vanenzo 0:957268dd05c4 193 for (ar=0; ar<=200000; ar++) {
vanenzo 0:957268dd05c4 194 y = analog_value.read();
vanenzo 0:957268dd05c4 195 if (ymax < y) {
vanenzo 0:957268dd05c4 196 ymax = y;
vanenzo 0:957268dd05c4 197 }
vanenzo 0:957268dd05c4 198 }
vanenzo 0:957268dd05c4 199 mdata = (ymax*3300/*amp*/);
vanenzo 0:957268dd05c4 200 return 0;
vanenzo 0:957268dd05c4 201 }
vanenzo 0:957268dd05c4 202
vanenzo 0:957268dd05c4 203
vanenzo 0:957268dd05c4 204 int request()
vanenzo 0:957268dd05c4 205 {
vanenzo 4:2a0242bfbe0c 206 fflush(stdout);
vanenzo 4:2a0242bfbe0c 207 scanf("%i,%i,%f",&form,&freqdata,&amp);
vanenzo 4:2a0242bfbe0c 208 for(int i = 0;i < 2082;i++){
vanenzo 4:2a0242bfbe0c 209 printf("%i",i);
vanenzo 4:2a0242bfbe0c 210 }
vanenzo 4:2a0242bfbe0c 211
vanenzo 4:2a0242bfbe0c 212
vanenzo 4:2a0242bfbe0c 213 printf("%i",8);
vanenzo 4:2a0242bfbe0c 214 fflush(stdout);
vanenzo 4:2a0242bfbe0c 215
vanenzo 3:59a57634f1fa 216 /* while(1) {
vanenzo 0:957268dd05c4 217 serial.printf("Vyberite formu signala :1 - sinus, 2 - pryamougolniy, 3 - treugol'nyi \r\n");
vanenzo 0:957268dd05c4 218 serial.scanf("%i", &form);
vanenzo 3:59a57634f1fa 219 serial.printf("%i\n",form);
vanenzo 0:957268dd05c4 220 if (form >= 1 && form<= 3) break;
vanenzo 0:957268dd05c4 221 else form = 1; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 222
vanenzo 0:957268dd05c4 223 }
vanenzo 0:957268dd05c4 224
vanenzo 0:957268dd05c4 225 while(1) {
vanenzo 0:957268dd05c4 226 serial.printf("Vvedite chastotu toka: 20..200kHz \r\n");
vanenzo 0:957268dd05c4 227 serial.scanf("%i", &freqdata);
vanenzo 0:957268dd05c4 228 serial.printf(" %i\n",freqdata);
vanenzo 0:957268dd05c4 229 if (freqdata >= 20 && freqdata<= 200) break;
vanenzo 0:957268dd05c4 230 else freqdata=20; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 231 }
vanenzo 0:957268dd05c4 232
vanenzo 0:957268dd05c4 233 while(1) {
vanenzo 0:957268dd05c4 234 serial.printf("Vvedite amplitudu toka s shagom 0.1 mA: 1..5mA \r\n");
vanenzo 0:957268dd05c4 235 serial.scanf("%f", &amp);
vanenzo 0:957268dd05c4 236 serial.printf(" %f\n",amp);
vanenzo 0:957268dd05c4 237 if (amp >= 0 && amp<= 5.0) break;
vanenzo 0:957268dd05c4 238 else amp=1.0;serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 3:59a57634f1fa 239 }*/
vanenzo 3:59a57634f1fa 240 // for (int i =0; i < 1000; i++){
vanenzo 3:59a57634f1fa 241 // serial.putc(i);
vanenzo 3:59a57634f1fa 242 // printf("%i NO: "+i);
vanenzo 3:59a57634f1fa 243 // printf("\r\n");
vanenzo 3:59a57634f1fa 244 // }
vanenzo 3:59a57634f1fa 245
vanenzo 4:2a0242bfbe0c 246
vanenzo 4:2a0242bfbe0c 247 //
vanenzo 4:2a0242bfbe0c 248 // serial.printf("\r\n %i\r\n",form);
vanenzo 4:2a0242bfbe0c 249 // serial.printf("\r\n %i\r\n",freqdata);
vanenzo 4:2a0242bfbe0c 250 // serial.printf("\r\n %f\r\n",amp);
vanenzo 3:59a57634f1fa 251
vanenzo 4:2a0242bfbe0c 252
vanenzo 3:59a57634f1fa 253
vanenzo 3:59a57634f1fa 254
vanenzo 0:957268dd05c4 255
vanenzo 3:59a57634f1fa 256
vanenzo 0:957268dd05c4 257 return 0;
vanenzo 0:957268dd05c4 258 }
vanenzo 0:957268dd05c4 259 int rasputte()
vanenzo 0:957268dd05c4 260 {
vanenzo 0:957268dd05c4 261 switch(form) {
vanenzo 0:957268dd05c4 262 case (1):
vanenzo 0:957268dd05c4 263 sinus();
vanenzo 0:957268dd05c4 264 break;
vanenzo 0:957268dd05c4 265 case (2):
vanenzo 0:957268dd05c4 266 square();
vanenzo 0:957268dd05c4 267 break;
vanenzo 0:957268dd05c4 268 case (3):
vanenzo 0:957268dd05c4 269 triangle();
vanenzo 0:957268dd05c4 270 break;
vanenzo 0:957268dd05c4 271 }
vanenzo 0:957268dd05c4 272 return 0;
vanenzo 0:957268dd05c4 273 }
vanenzo 0:957268dd05c4 274