Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Sun Jan 31 16:13:08 2016 +0000
Revision:
1:8b6ad9d92745
Parent:
0:957268dd05c4
Child:
2:b489f23d9d2c
?????????????

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 1:8b6ad9d92745 150 freqsq();
vanenzo 1:8b6ad9d92745 151 ddsstart; DDS.write(0x210A);
vanenzo 1:8b6ad9d92745 152 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 153 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 154 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 155 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 156 ddsstart;DDS.write(0xCC00);
vanenzo 1:8b6ad9d92745 157 ddsstart;DDS.write(0xE400);
vanenzo 1:8b6ad9d92745 158 ddsstart;DDS.write(0x220A);
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 triangle() {
vanenzo 0:957268dd05c4 165 ddsstart;
vanenzo 0:957268dd05c4 166 trisoft;
vanenzo 0:957268dd05c4 167 ddsstart;
vanenzo 0:957268dd05c4 168 freq();
vanenzo 0:957268dd05c4 169 ddsstop;
vanenzo 0:957268dd05c4 170 amplitude();
vanenzo 0:957268dd05c4 171 return 0;
vanenzo 0:957268dd05c4 172 }
vanenzo 0:957268dd05c4 173 int adc_read()
vanenzo 0:957268dd05c4 174 {
vanenzo 0:957268dd05c4 175 float y=0;
vanenzo 0:957268dd05c4 176 float ymax=0;
vanenzo 0:957268dd05c4 177 int ar = 0;
vanenzo 0:957268dd05c4 178 for (ar=0; ar<=200000; ar++) {
vanenzo 0:957268dd05c4 179 y = analog_value.read();
vanenzo 0:957268dd05c4 180 if (ymax < y) {
vanenzo 0:957268dd05c4 181 ymax = y;
vanenzo 0:957268dd05c4 182 }
vanenzo 0:957268dd05c4 183 }
vanenzo 0:957268dd05c4 184 mdata = (ymax*3300/*amp*/);
vanenzo 0:957268dd05c4 185 return 0;
vanenzo 0:957268dd05c4 186 }
vanenzo 0:957268dd05c4 187
vanenzo 0:957268dd05c4 188
vanenzo 0:957268dd05c4 189 int request()
vanenzo 0:957268dd05c4 190 {
vanenzo 0:957268dd05c4 191 while(1) {
vanenzo 0:957268dd05c4 192 serial.printf("Vyberite formu signala :1 - sinus, 2 - pryamougolniy, 3 - treugol'nyi \r\n");
vanenzo 0:957268dd05c4 193 serial.scanf("%i", &form);
vanenzo 0:957268dd05c4 194 serial.printf(" %i\n",form);
vanenzo 0:957268dd05c4 195 if (form >= 1 && form<= 3) break;
vanenzo 0:957268dd05c4 196 else form = 1; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 197
vanenzo 0:957268dd05c4 198 }
vanenzo 0:957268dd05c4 199
vanenzo 0:957268dd05c4 200 while(1) {
vanenzo 0:957268dd05c4 201 serial.printf("Vvedite chastotu toka: 20..200kHz \r\n");
vanenzo 0:957268dd05c4 202 serial.scanf("%i", &freqdata);
vanenzo 0:957268dd05c4 203 serial.printf(" %i\n",freqdata);
vanenzo 0:957268dd05c4 204 if (freqdata >= 20 && freqdata<= 200) break;
vanenzo 0:957268dd05c4 205 else freqdata=20; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 206 }
vanenzo 0:957268dd05c4 207
vanenzo 0:957268dd05c4 208 while(1) {
vanenzo 0:957268dd05c4 209 serial.printf("Vvedite amplitudu toka s shagom 0.1 mA: 1..5mA \r\n");
vanenzo 0:957268dd05c4 210 serial.scanf("%f", &amp);
vanenzo 0:957268dd05c4 211 serial.printf(" %f\n",amp);
vanenzo 0:957268dd05c4 212 if (amp >= 0 && amp<= 5.0) break;
vanenzo 0:957268dd05c4 213 else amp=1.0;serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n");
vanenzo 0:957268dd05c4 214
vanenzo 0:957268dd05c4 215 }
vanenzo 0:957268dd05c4 216 return 0;
vanenzo 0:957268dd05c4 217 }
vanenzo 0:957268dd05c4 218 int rasputte()
vanenzo 0:957268dd05c4 219 {
vanenzo 0:957268dd05c4 220 switch(form) {
vanenzo 0:957268dd05c4 221 case (1):
vanenzo 0:957268dd05c4 222 sinus();
vanenzo 0:957268dd05c4 223 break;
vanenzo 0:957268dd05c4 224 case (2):
vanenzo 0:957268dd05c4 225 square();
vanenzo 0:957268dd05c4 226 break;
vanenzo 0:957268dd05c4 227 case (3):
vanenzo 0:957268dd05c4 228 triangle();
vanenzo 0:957268dd05c4 229 break;
vanenzo 0:957268dd05c4 230 }
vanenzo 0:957268dd05c4 231 return 0;
vanenzo 0:957268dd05c4 232 }
vanenzo 0:957268dd05c4 233