
AAAAAAAAAAAAAAAAAAA
main.cpp@2:b489f23d9d2c, 2016-02-03 (annotated)
- 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?
User | Revision | Line number | New 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", &); |
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 |