Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Thu Feb 11 03:48:55 2016 +0000
Revision:
6:a24da8bee018
Parent:
5:dcaed6b6b3cb
Child:
7:299b41477dfb
???????????, ???????? - ??? ????????

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 5:dcaed6b6b3cb 13 //основные пины
vanenzo 0:957268dd05c4 14 Serial serial(USBTX,USBRX);
vanenzo 0:957268dd05c4 15 FastPWM mclk(PA_15);
vanenzo 0:957268dd05c4 16 FastPWM sq(PB_7);
vanenzo 2:b489f23d9d2c 17 SPI DDS(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 18 SPI DAC(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 19 DigitalOut SYNC1(PC_11);
vanenzo 0:957268dd05c4 20 DigitalOut SYNC2(PD_2);
vanenzo 0:957268dd05c4 21
vanenzo 5:dcaed6b6b3cb 22 // мультиплекс, ЦАП, кнопко
vanenzo 5:dcaed6b6b3cb 23
vanenzo 5:dcaed6b6b3cb 24 AnalogIn analog_value(PC_4);
vanenzo 5:dcaed6b6b3cb 25 DigitalIn button(PA_13); // проверка нажатой кнопки пауза
vanenzo 5:dcaed6b6b3cb 26
vanenzo 5:dcaed6b6b3cb 27 //пины управления мультиплексорами генератора
vanenzo 5:dcaed6b6b3cb 28 DigitalOut outA0(PC_5);
vanenzo 5:dcaed6b6b3cb 29 DigitalOut outA1(PC_6);
vanenzo 5:dcaed6b6b3cb 30 DigitalOut outA2(PC_8);
vanenzo 5:dcaed6b6b3cb 31 DigitalOut outA3(PC_9);
vanenzo 5:dcaed6b6b3cb 32
vanenzo 5:dcaed6b6b3cb 33 //пины управления мультиплексорами измерительной части
vanenzo 5:dcaed6b6b3cb 34 DigitalOut inA0(PA_5);
vanenzo 5:dcaed6b6b3cb 35 DigitalOut inA1(PA_6);
vanenzo 5:dcaed6b6b3cb 36 DigitalOut inA2(PA_7);
vanenzo 5:dcaed6b6b3cb 37 DigitalOut inA3(PB_6);
vanenzo 5:dcaed6b6b3cb 38 DigitalOut mux[10] = {(PC_7), (PA_9), (PA_8), (PB_10), (PB_4),(PB_5), (PB_3),(PA_10),(PB_14),(PB_13)}; //пины поясов
vanenzo 5:dcaed6b6b3cb 39
vanenzo 5:dcaed6b6b3cb 40 int mg;//переменная поясов
vanenzo 5:dcaed6b6b3cb 41 int j;//мультиплексор генератора
vanenzo 5:dcaed6b6b3cb 42 int k;//мультиплексор измерительной части
vanenzo 5:dcaed6b6b3cb 43
vanenzo 5:dcaed6b6b3cb 44 int muxout(int j);
vanenzo 5:dcaed6b6b3cb 45 int muxin(int k);
vanenzo 5:dcaed6b6b3cb 46 int mux_init();
vanenzo 5:dcaed6b6b3cb 47 int channel();
vanenzo 5:dcaed6b6b3cb 48 int mux_group();
vanenzo 5:dcaed6b6b3cb 49 int button_check();
vanenzo 0:957268dd05c4 50
vanenzo 4:2a0242bfbe0c 51 char key[] = "5";
vanenzo 4:2a0242bfbe0c 52 char buffer[2];
vanenzo 4:2a0242bfbe0c 53
vanenzo 5:dcaed6b6b3cb 54 // переменные генератор-цап
vanenzo 0:957268dd05c4 55 int freqdata;
vanenzo 0:957268dd05c4 56 float amp;
vanenzo 0:957268dd05c4 57 int form;
vanenzo 0:957268dd05c4 58 float mdata;
vanenzo 0:957268dd05c4 59 int sinus();
vanenzo 0:957268dd05c4 60 int square();
vanenzo 0:957268dd05c4 61 int triangle();
vanenzo 0:957268dd05c4 62 int adc_read();
vanenzo 0:957268dd05c4 63 int request();
vanenzo 0:957268dd05c4 64 int rasputte();
vanenzo 0:957268dd05c4 65 int adc_read();
vanenzo 0:957268dd05c4 66
vanenzo 4:2a0242bfbe0c 67 int main() {
vanenzo 4:2a0242bfbe0c 68 while(true) {
vanenzo 0:957268dd05c4 69 ddsstop;
vanenzo 0:957268dd05c4 70 dacstop;
vanenzo 0:957268dd05c4 71 DDS.format(16,2);
vanenzo 5:dcaed6b6b3cb 72 ddsstart; DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);ddsstop; // инициализация dds
vanenzo 5:dcaed6b6b3cb 73 // ddsstart; ddsreset; ddsstop;
vanenzo 4:2a0242bfbe0c 74
vanenzo 4:2a0242bfbe0c 75 do {
vanenzo 4:2a0242bfbe0c 76 fflush (stdout);
vanenzo 4:2a0242bfbe0c 77 scanf ("%2s",buffer);
vanenzo 4:2a0242bfbe0c 78 } while (strcmp (key,buffer) != 0);
vanenzo 4:2a0242bfbe0c 79 fflush (stdout);
vanenzo 5:dcaed6b6b3cb 80 mclk.period_us(0.1);
vanenzo 5:dcaed6b6b3cb 81 mclk.pulsewidth_us(0.05);
vanenzo 0:957268dd05c4 82 request();
vanenzo 5:dcaed6b6b3cb 83 rasputte();
vanenzo 5:dcaed6b6b3cb 84 mux_group();
vanenzo 5:dcaed6b6b3cb 85 sq=0.0;//выключение прямоугольника после ???
vanenzo 4:2a0242bfbe0c 86 //ddsstart;
vanenzo 4:2a0242bfbe0c 87 //ddsoff;
vanenzo 4:2a0242bfbe0c 88 //ddsstop;
vanenzo 3:59a57634f1fa 89 }
vanenzo 4:2a0242bfbe0c 90 }
vanenzo 0:957268dd05c4 91
vanenzo 0:957268dd05c4 92 int amplitude () {
vanenzo 5:dcaed6b6b3cb 93 uint16_t ampt;
vanenzo 5:dcaed6b6b3cb 94 uint16_t ampReg;
vanenzo 2:b489f23d9d2c 95 ampt = uint16_t(819.2*(5-amp));
vanenzo 0:957268dd05c4 96 ampReg = uint16_t(ampt & 0xFFF);
vanenzo 2:b489f23d9d2c 97 DAC.format(16,1);
vanenzo 2:b489f23d9d2c 98 dacstart;
vanenzo 0:957268dd05c4 99 DAC.write(ampReg*4);
vanenzo 2:b489f23d9d2c 100 dacstop;
vanenzo 0:957268dd05c4 101 return 0;
vanenzo 0:957268dd05c4 102 }
vanenzo 0:957268dd05c4 103
vanenzo 0:957268dd05c4 104 int freq () {
vanenzo 0:957268dd05c4 105 ddsstart;
vanenzo 0:957268dd05c4 106 float FreqReg;
vanenzo 0:957268dd05c4 107 uint32_t ftemp;
vanenzo 0:957268dd05c4 108 uint16_t Uptemp, Lowtemp;
vanenzo 0:957268dd05c4 109 FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
vanenzo 0:957268dd05c4 110 ftemp = (uint32_t)FreqReg;
vanenzo 0:957268dd05c4 111 Lowtemp = (uint16_t)(ftemp & 0x3FFF);
vanenzo 0:957268dd05c4 112 Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
vanenzo 0:957268dd05c4 113 DDS.write(Lowtemp + 0x4000);ddsstart;
vanenzo 0:957268dd05c4 114 DDS.write(Uptemp + 0x4000);
vanenzo 0:957268dd05c4 115 ddsstop;
vanenzo 0:957268dd05c4 116 return 0;
vanenzo 0:957268dd05c4 117 }
vanenzo 0:957268dd05c4 118
vanenzo 0:957268dd05c4 119 int freqsq () {
vanenzo 0:957268dd05c4 120 float period;
vanenzo 0:957268dd05c4 121 period = 1000/freqdata;
vanenzo 0:957268dd05c4 122 sq.period_us(period);
vanenzo 0:957268dd05c4 123 sq.pulsewidth_us(period/2);
vanenzo 0:957268dd05c4 124 return 0;
vanenzo 0:957268dd05c4 125 }
vanenzo 0:957268dd05c4 126
vanenzo 0:957268dd05c4 127 int sinus() {
vanenzo 0:957268dd05c4 128 ddsstart;
vanenzo 0:957268dd05c4 129 sinsoft;
vanenzo 0:957268dd05c4 130 freq();
vanenzo 0:957268dd05c4 131 ddsstop;
vanenzo 0:957268dd05c4 132 amplitude();
vanenzo 0:957268dd05c4 133 return 0;
vanenzo 0:957268dd05c4 134 }
vanenzo 0:957268dd05c4 135
vanenzo 0:957268dd05c4 136 int square() {
vanenzo 1:8b6ad9d92745 137 freqsq();
vanenzo 2:b489f23d9d2c 138 ddsstart;DDS.write(0x210A);
vanenzo 1:8b6ad9d92745 139 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 140 ddsstart;DDS.write(0x4000);
vanenzo 1:8b6ad9d92745 141 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 142 ddsstart;DDS.write(0x8000);
vanenzo 1:8b6ad9d92745 143 ddsstart;DDS.write(0xCC00);
vanenzo 1:8b6ad9d92745 144 ddsstart;DDS.write(0xE400);
vanenzo 1:8b6ad9d92745 145 ddsstart;DDS.write(0x220A);
vanenzo 0:957268dd05c4 146 ddsstop;
vanenzo 0:957268dd05c4 147 amplitude();
vanenzo 0:957268dd05c4 148 return 0;
vanenzo 0:957268dd05c4 149 }
vanenzo 0:957268dd05c4 150
vanenzo 0:957268dd05c4 151 int triangle() {
vanenzo 0:957268dd05c4 152 ddsstart;
vanenzo 0:957268dd05c4 153 trisoft;
vanenzo 0:957268dd05c4 154 ddsstart;
vanenzo 0:957268dd05c4 155 freq();
vanenzo 0:957268dd05c4 156 ddsstop;
vanenzo 0:957268dd05c4 157 amplitude();
vanenzo 0:957268dd05c4 158 return 0;
vanenzo 0:957268dd05c4 159 }
vanenzo 5:dcaed6b6b3cb 160
vanenzo 5:dcaed6b6b3cb 161
vanenzo 0:957268dd05c4 162 int adc_read()
vanenzo 0:957268dd05c4 163 {
vanenzo 0:957268dd05c4 164 float y=0;
vanenzo 0:957268dd05c4 165 float ymax=0;
vanenzo 0:957268dd05c4 166 int ar = 0;
vanenzo 5:dcaed6b6b3cb 167 int qr = 200000/freqdata;
vanenzo 5:dcaed6b6b3cb 168 for (ar=0; ar<=qr; ar++) {
vanenzo 0:957268dd05c4 169 y = analog_value.read();
vanenzo 0:957268dd05c4 170 if (ymax < y) {
vanenzo 0:957268dd05c4 171 ymax = y;
vanenzo 0:957268dd05c4 172 }
vanenzo 0:957268dd05c4 173 }
vanenzo 5:dcaed6b6b3cb 174 printf(" %.5g\r\n",ymax*3.3);
vanenzo 0:957268dd05c4 175 return 0;
vanenzo 5:dcaed6b6b3cb 176 }
vanenzo 0:957268dd05c4 177
vanenzo 0:957268dd05c4 178
vanenzo 0:957268dd05c4 179 int request()
vanenzo 0:957268dd05c4 180 {
vanenzo 5:dcaed6b6b3cb 181 fflush(stdout);
vanenzo 5:dcaed6b6b3cb 182 scanf("%i,%i,%f",&form,&freqdata,&amp);
vanenzo 5:dcaed6b6b3cb 183 printf("%i",8); // спросить Сашу
vanenzo 5:dcaed6b6b3cb 184 fflush(stdout);
vanenzo 5:dcaed6b6b3cb 185 return 0;
vanenzo 5:dcaed6b6b3cb 186 }
vanenzo 0:957268dd05c4 187
vanenzo 5:dcaed6b6b3cb 188 int rasputte()
vanenzo 0:957268dd05c4 189 {
vanenzo 0:957268dd05c4 190 switch(form) {
vanenzo 0:957268dd05c4 191 case (1):
vanenzo 0:957268dd05c4 192 sinus();
vanenzo 0:957268dd05c4 193 break;
vanenzo 0:957268dd05c4 194 case (2):
vanenzo 0:957268dd05c4 195 square();
vanenzo 0:957268dd05c4 196 break;
vanenzo 0:957268dd05c4 197 case (3):
vanenzo 0:957268dd05c4 198 triangle();
vanenzo 0:957268dd05c4 199 break;
vanenzo 0:957268dd05c4 200 }
vanenzo 0:957268dd05c4 201 return 0;
vanenzo 0:957268dd05c4 202 }
vanenzo 0:957268dd05c4 203
vanenzo 5:dcaed6b6b3cb 204 int muxout(int j)
vanenzo 5:dcaed6b6b3cb 205 {
vanenzo 5:dcaed6b6b3cb 206 switch (j) {
vanenzo 5:dcaed6b6b3cb 207 case (0):{outA0=0; outA1=0; outA2=0; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 208 case (1):{outA0=1; outA1=0; outA2=0; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 209 case (2):{outA0=0; outA1=1; outA2=0; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 210 case (3):{outA0=1; outA1=1; outA2=0; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 211 case (4):{outA0=0; outA1=0; outA2=1; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 212 case (5):{outA0=1; outA1=0; outA2=1; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 213 case (6):{outA0=0; outA1=1; outA2=1; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 214 case (7):{outA0=1; outA1=1; outA2=1; outA3=0;} break;
vanenzo 5:dcaed6b6b3cb 215 case (8):{outA0=0; outA1=0; outA2=0; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 216 case (9):{outA0=1; outA1=0; outA2=0; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 217 case (10):{outA0=0; outA1=1; outA2=0; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 218 case (11):{outA0=1; outA1=1; outA2=0; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 219 case (12):{outA0=0; outA1=0; outA2=1; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 220 case (13):{outA0=1; outA1=0; outA2=1; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 221 case (14):{outA0=0; outA1=1; outA2=1; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 222 case (15):{outA0=1; outA1=1; outA2=1; outA3=1;} break;
vanenzo 5:dcaed6b6b3cb 223 }
vanenzo 5:dcaed6b6b3cb 224 return 0;
vanenzo 5:dcaed6b6b3cb 225 }
vanenzo 5:dcaed6b6b3cb 226
vanenzo 5:dcaed6b6b3cb 227 int muxin(int k)
vanenzo 5:dcaed6b6b3cb 228 {
vanenzo 5:dcaed6b6b3cb 229 switch(k) {
vanenzo 5:dcaed6b6b3cb 230 case (0):{inA0=0; inA1=0; inA2=0; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 231 case (1):{inA0=1; inA1=0; inA2=0; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 232 case (2):{inA0=0; inA1=1; inA2=0; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 233 case (3):{inA0=1; inA1=1; inA2=0; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 234 case (4):{inA0=0; inA1=0; inA2=1; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 235 case (5):{inA0=1; inA1=0; inA2=1; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 236 case (6):{inA0=0; inA1=1; inA2=1; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 237 case (7):{inA0=1; inA1=1; inA2=1; inA3=0;} break;
vanenzo 5:dcaed6b6b3cb 238 case (8):{inA0=0; inA1=0; inA2=0; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 239 case (9):{inA0=1; inA1=0; inA2=0; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 240 case (10):{inA0=0; inA1=1; inA2=0; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 241 case (11):{inA0=1; inA1=1; inA2=0; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 242 case (12):{inA0=0; inA1=0; inA2=1; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 243 case (13):{inA0=1; inA1=0; inA2=1; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 244 case (14):{inA0=0; inA1=1; inA2=1; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 245 case (15):{inA0=1; inA1=1; inA2=1; inA3=1;} break;
vanenzo 5:dcaed6b6b3cb 246 }
vanenzo 5:dcaed6b6b3cb 247 return 0;
vanenzo 5:dcaed6b6b3cb 248 }
vanenzo 5:dcaed6b6b3cb 249
vanenzo 5:dcaed6b6b3cb 250 int channel()
vanenzo 5:dcaed6b6b3cb 251 {
vanenzo 5:dcaed6b6b3cb 252 int j = 0;
vanenzo 5:dcaed6b6b3cb 253 int k = 0;
vanenzo 5:dcaed6b6b3cb 254 for (j = 0; j<=15; j++) {
vanenzo 5:dcaed6b6b3cb 255 button_check();
vanenzo 5:dcaed6b6b3cb 256 muxout(j);
vanenzo 5:dcaed6b6b3cb 257 for (k = 0; k<=15; k++) {
vanenzo 6:a24da8bee018 258 if ((k==j)||(j==(k+1))||(j==(k-1))||((k==0)&&(j==15))||((k==15)&&(j==0))) {
vanenzo 5:dcaed6b6b3cb 259 continue;
vanenzo 5:dcaed6b6b3cb 260 } else {
vanenzo 5:dcaed6b6b3cb 261 muxin(k);
vanenzo 5:dcaed6b6b3cb 262 adc_read();
vanenzo 5:dcaed6b6b3cb 263 }
vanenzo 5:dcaed6b6b3cb 264 }
vanenzo 5:dcaed6b6b3cb 265 }
vanenzo 5:dcaed6b6b3cb 266 return 0;
vanenzo 5:dcaed6b6b3cb 267 }
vanenzo 5:dcaed6b6b3cb 268
vanenzo 5:dcaed6b6b3cb 269
vanenzo 5:dcaed6b6b3cb 270 int mux_init()
vanenzo 5:dcaed6b6b3cb 271 {
vanenzo 5:dcaed6b6b3cb 272 int mi = 0;
vanenzo 5:dcaed6b6b3cb 273 for (mi = 0; mi < 10; mi++) {
vanenzo 5:dcaed6b6b3cb 274 mux[mi] = 1;
vanenzo 5:dcaed6b6b3cb 275 }
vanenzo 5:dcaed6b6b3cb 276 return 0;
vanenzo 5:dcaed6b6b3cb 277
vanenzo 5:dcaed6b6b3cb 278 }
vanenzo 5:dcaed6b6b3cb 279
vanenzo 5:dcaed6b6b3cb 280 int mux_group()
vanenzo 5:dcaed6b6b3cb 281 {
vanenzo 6:a24da8bee018 282 //mux_init();
vanenzo 5:dcaed6b6b3cb 283 for (mg = 0; mg < 10; mg++) {
vanenzo 6:a24da8bee018 284 if (mg > 0){mux[mg-1] = 1;} //Выключить предыдущий пояс
vanenzo 5:dcaed6b6b3cb 285 mux[mg] = 0;
vanenzo 5:dcaed6b6b3cb 286 channel();
vanenzo 5:dcaed6b6b3cb 287 mux_init();
vanenzo 5:dcaed6b6b3cb 288 }
vanenzo 5:dcaed6b6b3cb 289 return 0;
vanenzo 5:dcaed6b6b3cb 290 }
vanenzo 5:dcaed6b6b3cb 291
vanenzo 5:dcaed6b6b3cb 292 int button_check()
vanenzo 5:dcaed6b6b3cb 293 {
vanenzo 5:dcaed6b6b3cb 294 if (button.read() == 1){
vanenzo 5:dcaed6b6b3cb 295 wait_ms(10);
vanenzo 5:dcaed6b6b3cb 296 if (button.read() == 1){
vanenzo 5:dcaed6b6b3cb 297 int amp1;
vanenzo 5:dcaed6b6b3cb 298 amp1 = amp;
vanenzo 5:dcaed6b6b3cb 299 amp = 0;
vanenzo 5:dcaed6b6b3cb 300 amplitude();
vanenzo 5:dcaed6b6b3cb 301 while (button.read() == 1);
vanenzo 5:dcaed6b6b3cb 302 amp = amp1;
vanenzo 5:dcaed6b6b3cb 303 amplitude();
vanenzo 5:dcaed6b6b3cb 304 }
vanenzo 5:dcaed6b6b3cb 305 }
vanenzo 5:dcaed6b6b3cb 306 return 0;
vanenzo 5:dcaed6b6b3cb 307 }