AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Wed Feb 03 21:44:06 2016 +0000
Revision:
2:b489f23d9d2c
Parent:
1:8b6ad9d92745
Child:
3:59a57634f1fa
??? ?????? ????????? ??????? ?????????

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 0:957268dd05c4 56 int freqdata;
vanenzo 0:957268dd05c4 57 float amp;
vanenzo 0:957268dd05c4 58 int form;
vanenzo 0:957268dd05c4 59 float mdata;
vanenzo 0:957268dd05c4 60 int sinus();
vanenzo 0:957268dd05c4 61 int square();
vanenzo 0:957268dd05c4 62 int triangle();
vanenzo 0:957268dd05c4 63 int adc_read();
vanenzo 0:957268dd05c4 64 int request();
vanenzo 0:957268dd05c4 65 int rasputte();
vanenzo 0:957268dd05c4 66 int adc_read();
vanenzo 0:957268dd05c4 67
vanenzo 0:957268dd05c4 68
vanenzo 0:957268dd05c4 69 int main() {
vanenzo 0:957268dd05c4 70 serial.printf("start \r\n");
vanenzo 0:957268dd05c4 71 /*outE1=0;
vanenzo 0:957268dd05c4 72 inE1=0;
vanenzo 0:957268dd05c4 73 outE2=outE3=outE4=outE5=outE6=outE7=outE8=outE9=outE10=0;
vanenzo 0:957268dd05c4 74 inE2=inE3=inE4=inE5=inE6=inE7=inE8=inE9=inE10=0;
vanenzo 0:957268dd05c4 75 outA0=0;outA1=0;outA2=0;outA3=0;
vanenzo 0:957268dd05c4 76 inA0=1;inA1=0;inA2=0;inA3=0; */
vanenzo 0:957268dd05c4 77 ddsstop;
vanenzo 0:957268dd05c4 78 dacstop;
vanenzo 0:957268dd05c4 79 DDS.format(16,2);
vanenzo 2:b489f23d9d2c 80 ddsstart;
vanenzo 0:957268dd05c4 81 DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);
vanenzo 0:957268dd05c4 82 ddsstop;
vanenzo 0:957268dd05c4 83 /* ddsstart;
vanenzo 0:957268dd05c4 84 ddsreset;
vanenzo 0:957268dd05c4 85 ddsstop;*/
vanenzo 0:957268dd05c4 86 mclk.period_us(0.1);
vanenzo 0:957268dd05c4 87 mclk.pulsewidth_us(0.05);
vanenzo 0:957268dd05c4 88 request();
vanenzo 0:957268dd05c4 89 serial.printf("finish");
vanenzo 0:957268dd05c4 90 serial.printf("\r\n");
vanenzo 0:957268dd05c4 91 rasputte();
vanenzo 0:957268dd05c4 92 adc_read();
vanenzo 0:957268dd05c4 93 serial.printf("begin");
vanenzo 0:957268dd05c4 94 serial.printf("\r\n");
vanenzo 0:957268dd05c4 95 serial.printf("%f\r\n", mdata);
vanenzo 0:957268dd05c4 96 serial.printf("end");
vanenzo 0:957268dd05c4 97 serial.printf("\r\n");
vanenzo 0:957268dd05c4 98 //ddsstart;
vanenzo 0:957268dd05c4 99 //ddsoff;
vanenzo 0:957268dd05c4 100 //ddsstop;
vanenzo 0:957268dd05c4 101 }
vanenzo 0:957268dd05c4 102
vanenzo 0:957268dd05c4 103 int amplitude () {
vanenzo 0:957268dd05c4 104 uint16_t ampt;
vanenzo 0:957268dd05c4 105 uint16_t ampReg;
vanenzo 2:b489f23d9d2c 106 ampt = uint16_t(819.2*(5-amp));
vanenzo 0:957268dd05c4 107 ampReg = uint16_t(ampt & 0xFFF);
vanenzo 2:b489f23d9d2c 108 DAC.format(16,1);
vanenzo 2:b489f23d9d2c 109 dacstart;
vanenzo 0:957268dd05c4 110 DAC.write(ampReg*4);
vanenzo 2:b489f23d9d2c 111 dacstop;
vanenzo 0:957268dd05c4 112 serial.printf("amp %X \r\n", ampReg*4);
vanenzo 0:957268dd05c4 113 return 0;
vanenzo 0:957268dd05c4 114 }
vanenzo 0:957268dd05c4 115
vanenzo 0:957268dd05c4 116 int freq () {
vanenzo 0:957268dd05c4 117 ddsstart;
vanenzo 0:957268dd05c4 118 float FreqReg;
vanenzo 0:957268dd05c4 119 uint32_t ftemp;
vanenzo 0:957268dd05c4 120 uint16_t Uptemp, Lowtemp;
vanenzo 0:957268dd05c4 121 FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
vanenzo 0:957268dd05c4 122 ftemp = (uint32_t)FreqReg;
vanenzo 0:957268dd05c4 123 Lowtemp = (uint16_t)(ftemp & 0x3FFF);
vanenzo 0:957268dd05c4 124 Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
vanenzo 0:957268dd05c4 125 DDS.write(Lowtemp + 0x4000);ddsstart;
vanenzo 0:957268dd05c4 126 DDS.write(Uptemp + 0x4000);
vanenzo 0:957268dd05c4 127 serial.printf("uptemp %X \r\n", Uptemp + 0x4000);
vanenzo 0:957268dd05c4 128 serial.printf("lowtemp %X \r\n", Lowtemp + 0x4000);
vanenzo 0:957268dd05c4 129 ddsstop;
vanenzo 0:957268dd05c4 130 return 0;
vanenzo 0:957268dd05c4 131 }
vanenzo 0:957268dd05c4 132
vanenzo 0:957268dd05c4 133 int freqsq () {
vanenzo 0:957268dd05c4 134 float period;
vanenzo 0:957268dd05c4 135 period = 1000/freqdata;
vanenzo 0:957268dd05c4 136 sq.period_us(period);
vanenzo 0:957268dd05c4 137 sq.pulsewidth_us(period/2);
vanenzo 0:957268dd05c4 138 return 0;
vanenzo 0:957268dd05c4 139 }
vanenzo 0:957268dd05c4 140
vanenzo 0:957268dd05c4 141 int sinus() {
vanenzo 0:957268dd05c4 142 ddsstart;
vanenzo 0:957268dd05c4 143 sinsoft;
vanenzo 0:957268dd05c4 144 freq();
vanenzo 0:957268dd05c4 145 ddsstop;
vanenzo 0:957268dd05c4 146 amplitude();
vanenzo 0:957268dd05c4 147 return 0;
vanenzo 0:957268dd05c4 148 }
vanenzo 0:957268dd05c4 149
vanenzo 0:957268dd05c4 150 int square() {
vanenzo 1:8b6ad9d92745 151 freqsq();
vanenzo 2:b489f23d9d2c 152 ddsstart;DDS.write(0x210A);
vanenzo 1:8b6ad9d92745 153 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 154 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 155 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 156 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 157 ddsstart;DDS.write(0xCC00);
vanenzo 1:8b6ad9d92745 158 ddsstart;DDS.write(0xE400);
vanenzo 1:8b6ad9d92745 159 ddsstart;DDS.write(0x220A);
vanenzo 0:957268dd05c4 160 ddsstop;
vanenzo 0:957268dd05c4 161 amplitude();
vanenzo 0:957268dd05c4 162 return 0;
vanenzo 0:957268dd05c4 163 }
vanenzo 0:957268dd05c4 164
vanenzo 0:957268dd05c4 165 int triangle() {
vanenzo 0:957268dd05c4 166 ddsstart;
vanenzo 0:957268dd05c4 167 trisoft;
vanenzo 0:957268dd05c4 168 ddsstart;
vanenzo 0:957268dd05c4 169 freq();
vanenzo 0:957268dd05c4 170 ddsstop;
vanenzo 0:957268dd05c4 171 amplitude();
vanenzo 0:957268dd05c4 172 return 0;
vanenzo 0:957268dd05c4 173 }
vanenzo 0:957268dd05c4 174 int adc_read()
vanenzo 0:957268dd05c4 175 {
vanenzo 0:957268dd05c4 176 float y=0;
vanenzo 0:957268dd05c4 177 float ymax=0;
vanenzo 0:957268dd05c4 178 int ar = 0;
vanenzo 0:957268dd05c4 179 for (ar=0; ar<=200000; ar++) {
vanenzo 0:957268dd05c4 180 y = analog_value.read();
vanenzo 0:957268dd05c4 181 if (ymax < y) {
vanenzo 0:957268dd05c4 182 ymax = y;
vanenzo 0:957268dd05c4 183 }
vanenzo 0:957268dd05c4 184 }
vanenzo 0:957268dd05c4 185 mdata = (ymax*3300/*amp*/);
vanenzo 0:957268dd05c4 186 return 0;
vanenzo 0:957268dd05c4 187 }
vanenzo 0:957268dd05c4 188
vanenzo 0:957268dd05c4 189
vanenzo 0:957268dd05c4 190 int request()
vanenzo 0:957268dd05c4 191 {
vanenzo 0:957268dd05c4 192 while(1) {
vanenzo 0:957268dd05c4 193 serial.printf("Vyberite formu signala :1 - sinus, 2 - pryamougolniy, 3 - treugol'nyi \r\n");
vanenzo 0:957268dd05c4 194 serial.scanf("%i", &form);
vanenzo 0:957268dd05c4 195 serial.printf(" %i\n",form);
vanenzo 0:957268dd05c4 196 if (form >= 1 && form<= 3) break;
vanenzo 0:957268dd05c4 197 else form = 1; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 198
vanenzo 0:957268dd05c4 199 }
vanenzo 0:957268dd05c4 200
vanenzo 0:957268dd05c4 201 while(1) {
vanenzo 0:957268dd05c4 202 serial.printf("Vvedite chastotu toka: 20..200kHz \r\n");
vanenzo 0:957268dd05c4 203 serial.scanf("%i", &freqdata);
vanenzo 0:957268dd05c4 204 serial.printf(" %i\n",freqdata);
vanenzo 0:957268dd05c4 205 if (freqdata >= 20 && freqdata<= 200) break;
vanenzo 0:957268dd05c4 206 else freqdata=20; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 207 }
vanenzo 0:957268dd05c4 208
vanenzo 0:957268dd05c4 209 while(1) {
vanenzo 0:957268dd05c4 210 serial.printf("Vvedite amplitudu toka s shagom 0.1 mA: 1..5mA \r\n");
vanenzo 0:957268dd05c4 211 serial.scanf("%f", &amp);
vanenzo 0:957268dd05c4 212 serial.printf(" %f\n",amp);
vanenzo 0:957268dd05c4 213 if (amp >= 0 && amp<= 5.0) break;
vanenzo 0:957268dd05c4 214 else amp=1.0;serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 215
vanenzo 0:957268dd05c4 216 }
vanenzo 0:957268dd05c4 217 return 0;
vanenzo 0:957268dd05c4 218 }
vanenzo 0:957268dd05c4 219 int rasputte()
vanenzo 0:957268dd05c4 220 {
vanenzo 0:957268dd05c4 221 switch(form) {
vanenzo 0:957268dd05c4 222 case (1):
vanenzo 0:957268dd05c4 223 sinus();
vanenzo 0:957268dd05c4 224 break;
vanenzo 0:957268dd05c4 225 case (2):
vanenzo 0:957268dd05c4 226 square();
vanenzo 0:957268dd05c4 227 break;
vanenzo 0:957268dd05c4 228 case (3):
vanenzo 0:957268dd05c4 229 triangle();
vanenzo 0:957268dd05c4 230 break;
vanenzo 0:957268dd05c4 231 }
vanenzo 0:957268dd05c4 232 return 0;
vanenzo 0:957268dd05c4 233 }
vanenzo 0:957268dd05c4 234