AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Sat Jan 09 15:32:27 2016 +0000
Revision:
0:957268dd05c4
Child:
1:8b6ad9d92745
????? ??? ??????????????

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 0:957268dd05c4 48 SPI DAC(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 49 SPI DDS(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 0:957268dd05c4 80 // DAC.format(16,1);
vanenzo 0:957268dd05c4 81 // DDS.frequency(1000);
vanenzo 0:957268dd05c4 82 ddsstart;
vanenzo 0:957268dd05c4 83 DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);
vanenzo 0:957268dd05c4 84 ddsstop;
vanenzo 0:957268dd05c4 85 /* ddsstart;
vanenzo 0:957268dd05c4 86 ddsreset;
vanenzo 0:957268dd05c4 87 ddsstop;*/
vanenzo 0:957268dd05c4 88 mclk.period_us(0.1);
vanenzo 0:957268dd05c4 89 mclk.pulsewidth_us(0.05);
vanenzo 0:957268dd05c4 90 request();
vanenzo 0:957268dd05c4 91 serial.printf("finish");
vanenzo 0:957268dd05c4 92 serial.printf("\r\n");
vanenzo 0:957268dd05c4 93 rasputte();
vanenzo 0:957268dd05c4 94 adc_read();
vanenzo 0:957268dd05c4 95 serial.printf("begin");
vanenzo 0:957268dd05c4 96 serial.printf("\r\n");
vanenzo 0:957268dd05c4 97 serial.printf("%f\r\n", mdata);
vanenzo 0:957268dd05c4 98 serial.printf("end");
vanenzo 0:957268dd05c4 99 serial.printf("\r\n");
vanenzo 0:957268dd05c4 100 //ddsstart;
vanenzo 0:957268dd05c4 101 //ddsoff;
vanenzo 0:957268dd05c4 102 //ddsstop;
vanenzo 0:957268dd05c4 103 }
vanenzo 0:957268dd05c4 104
vanenzo 0:957268dd05c4 105 int amplitude () {
vanenzo 0:957268dd05c4 106 uint16_t ampt;
vanenzo 0:957268dd05c4 107 uint16_t ampReg;
vanenzo 0:957268dd05c4 108 ampt = uint16_t(819.2*amp);
vanenzo 0:957268dd05c4 109 ampReg = uint16_t(ampt & 0xFFF);
vanenzo 0:957268dd05c4 110 DAC.write(ampReg*4);
vanenzo 0:957268dd05c4 111 serial.printf("amp %X \r\n", ampReg*4);
vanenzo 0:957268dd05c4 112 return 0;
vanenzo 0:957268dd05c4 113 }
vanenzo 0:957268dd05c4 114
vanenzo 0:957268dd05c4 115 int freq () {
vanenzo 0:957268dd05c4 116 ddsstart;
vanenzo 0:957268dd05c4 117 float FreqReg;
vanenzo 0:957268dd05c4 118 uint32_t ftemp;
vanenzo 0:957268dd05c4 119 uint16_t Uptemp, Lowtemp;
vanenzo 0:957268dd05c4 120 FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
vanenzo 0:957268dd05c4 121 ftemp = (uint32_t)FreqReg;
vanenzo 0:957268dd05c4 122 Lowtemp = (uint16_t)(ftemp & 0x3FFF);
vanenzo 0:957268dd05c4 123 Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
vanenzo 0:957268dd05c4 124 DDS.write(Lowtemp + 0x4000);ddsstart;
vanenzo 0:957268dd05c4 125 DDS.write(Uptemp + 0x4000);
vanenzo 0:957268dd05c4 126 serial.printf("uptemp %X \r\n", Uptemp + 0x4000);
vanenzo 0:957268dd05c4 127 serial.printf("lowtemp %X \r\n", Lowtemp + 0x4000);
vanenzo 0:957268dd05c4 128 ddsstop;
vanenzo 0:957268dd05c4 129 return 0;
vanenzo 0:957268dd05c4 130 }
vanenzo 0:957268dd05c4 131
vanenzo 0:957268dd05c4 132 int freqsq () {
vanenzo 0:957268dd05c4 133 float period;
vanenzo 0:957268dd05c4 134 period = 1000/freqdata;
vanenzo 0:957268dd05c4 135 sq.period_us(period);
vanenzo 0:957268dd05c4 136 sq.pulsewidth_us(period/2);
vanenzo 0:957268dd05c4 137 return 0;
vanenzo 0:957268dd05c4 138 }
vanenzo 0:957268dd05c4 139
vanenzo 0:957268dd05c4 140 int sinus() {
vanenzo 0:957268dd05c4 141 ddsstart;
vanenzo 0:957268dd05c4 142 sinsoft;
vanenzo 0:957268dd05c4 143 freq();
vanenzo 0:957268dd05c4 144 ddsstop;
vanenzo 0:957268dd05c4 145 amplitude();
vanenzo 0:957268dd05c4 146 return 0;
vanenzo 0:957268dd05c4 147 }
vanenzo 0:957268dd05c4 148
vanenzo 0:957268dd05c4 149 int square() {
vanenzo 0:957268dd05c4 150 ddsstart;
vanenzo 0:957268dd05c4 151 tripin;
vanenzo 0:957268dd05c4 152 ddsstop;
vanenzo 0:957268dd05c4 153 amplitude();
vanenzo 0:957268dd05c4 154 freqsq();
vanenzo 0:957268dd05c4 155 return 0;
vanenzo 0:957268dd05c4 156 }
vanenzo 0:957268dd05c4 157
vanenzo 0:957268dd05c4 158 int triangle() {
vanenzo 0:957268dd05c4 159 ddsstart;
vanenzo 0:957268dd05c4 160 trisoft;
vanenzo 0:957268dd05c4 161 ddsstart;
vanenzo 0:957268dd05c4 162 freq();
vanenzo 0:957268dd05c4 163 ddsstop;
vanenzo 0:957268dd05c4 164 amplitude();
vanenzo 0:957268dd05c4 165 return 0;
vanenzo 0:957268dd05c4 166 }
vanenzo 0:957268dd05c4 167 int adc_read()
vanenzo 0:957268dd05c4 168 {
vanenzo 0:957268dd05c4 169 float y=0;
vanenzo 0:957268dd05c4 170 float ymax=0;
vanenzo 0:957268dd05c4 171 int ar = 0;
vanenzo 0:957268dd05c4 172 for (ar=0; ar<=200000; ar++) {
vanenzo 0:957268dd05c4 173 y = analog_value.read();
vanenzo 0:957268dd05c4 174 if (ymax < y) {
vanenzo 0:957268dd05c4 175 ymax = y;
vanenzo 0:957268dd05c4 176 }
vanenzo 0:957268dd05c4 177 }
vanenzo 0:957268dd05c4 178 mdata = (ymax*3300/*amp*/);
vanenzo 0:957268dd05c4 179 return 0;
vanenzo 0:957268dd05c4 180 }
vanenzo 0:957268dd05c4 181
vanenzo 0:957268dd05c4 182
vanenzo 0:957268dd05c4 183 int request()
vanenzo 0:957268dd05c4 184 {
vanenzo 0:957268dd05c4 185 while(1) {
vanenzo 0:957268dd05c4 186 serial.printf("Vyberite formu signala :1 - sinus, 2 - pryamougolniy, 3 - treugol'nyi \r\n");
vanenzo 0:957268dd05c4 187 serial.scanf("%i", &form);
vanenzo 0:957268dd05c4 188 serial.printf(" %i\n",form);
vanenzo 0:957268dd05c4 189 if (form >= 1 && form<= 3) break;
vanenzo 0:957268dd05c4 190 else form = 1; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 191
vanenzo 0:957268dd05c4 192 }
vanenzo 0:957268dd05c4 193
vanenzo 0:957268dd05c4 194 while(1) {
vanenzo 0:957268dd05c4 195 serial.printf("Vvedite chastotu toka: 20..200kHz \r\n");
vanenzo 0:957268dd05c4 196 serial.scanf("%i", &freqdata);
vanenzo 0:957268dd05c4 197 serial.printf(" %i\n",freqdata);
vanenzo 0:957268dd05c4 198 if (freqdata >= 20 && freqdata<= 200) break;
vanenzo 0:957268dd05c4 199 else freqdata=20; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 200 }
vanenzo 0:957268dd05c4 201
vanenzo 0:957268dd05c4 202 while(1) {
vanenzo 0:957268dd05c4 203 serial.printf("Vvedite amplitudu toka s shagom 0.1 mA: 1..5mA \r\n");
vanenzo 0:957268dd05c4 204 serial.scanf("%f", &amp);
vanenzo 0:957268dd05c4 205 serial.printf(" %f\n",amp);
vanenzo 0:957268dd05c4 206 if (amp >= 0 && amp<= 5.0) break;
vanenzo 0:957268dd05c4 207 else amp=1.0;serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 208
vanenzo 0:957268dd05c4 209 }
vanenzo 0:957268dd05c4 210 return 0;
vanenzo 0:957268dd05c4 211 }
vanenzo 0:957268dd05c4 212 int rasputte()
vanenzo 0:957268dd05c4 213 {
vanenzo 0:957268dd05c4 214 switch(form) {
vanenzo 0:957268dd05c4 215 case (1):
vanenzo 0:957268dd05c4 216 sinus();
vanenzo 0:957268dd05c4 217 break;
vanenzo 0:957268dd05c4 218 case (2):
vanenzo 0:957268dd05c4 219 square();
vanenzo 0:957268dd05c4 220 break;
vanenzo 0:957268dd05c4 221 case (3):
vanenzo 0:957268dd05c4 222 triangle();
vanenzo 0:957268dd05c4 223 break;
vanenzo 0:957268dd05c4 224 }
vanenzo 0:957268dd05c4 225 return 0;
vanenzo 0:957268dd05c4 226 }
vanenzo 0:957268dd05c4 227