
AAAAAAAAAAAAAAAAAAA
main.cpp@4:2a0242bfbe0c, 2016-02-11 (annotated)
- 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?
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 | 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,&); |
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", &); |
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 |