AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Tue Jul 23 08:43:23 2019 +0000
Revision:
17:e2f843372f7b
Parent:
16:41e558cc18f1
Show me your warface!

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 8:e68460a69e2e 3 #include <algorithm>
vanenzo 8:e68460a69e2e 4
vanenzo 11:f991915d6245 5 #define ddsstart SYNC2 = 1;wait_us(10);SYNC2 = 0;wait_us(10)
vanenzo 11:f991915d6245 6 #define ddsstop SYNC2 = 1;wait_us(10)
vanenzo 0:957268dd05c4 7 #define ddsreset DDS.write(0x21C0)
vanenzo 0:957268dd05c4 8 #define sinsoft DDS.write(0x2000)
vanenzo 0:957268dd05c4 9 #define trisoft DDS.write(0x2002)
vanenzo 0:957268dd05c4 10 #define tripin DDS.write(0x2202)
vanenzo 0:957268dd05c4 11 #define ddsoff DDS.write(0x2048)
vanenzo 11:f991915d6245 12 #define dacstart SYNC1 = 1;wait_us(10);SYNC1 = 0;wait_us(10)
vanenzo 11:f991915d6245 13 #define dacstop SYNC1 = 1;wait_us(10)
vanenzo 8:e68460a69e2e 14 #define mclkstart mclk.period_us(0.1);mclk.pulsewidth_us(0.05);
vanenzo 8:e68460a69e2e 15 #define mclkstop mclk = 0.0;
vanenzo 16:41e558cc18f1 16 #define i2g IE = 0;emux();IG = 0; II = 0;igmux();imux();
vanenzo 8:e68460a69e2e 17
vanenzo 8:e68460a69e2e 18 //основные пины
vanenzo 0:957268dd05c4 19 Serial serial(USBTX,USBRX);
vanenzo 0:957268dd05c4 20 FastPWM mclk(PA_15);
vanenzo 17:e2f843372f7b 21 PwmOut sq(PB_7);
vanenzo 2:b489f23d9d2c 22 SPI DDS(PC_12, NC, PC_10);
vanenzo 0:957268dd05c4 23 SPI DAC(PC_12, NC, PC_10);
vanenzo 8:e68460a69e2e 24 DigitalOut SYNC1(PC_11);//amp dac
vanenzo 8:e68460a69e2e 25 DigitalOut SYNC2(PD_2);//dds
vanenzo 5:dcaed6b6b3cb 26 // мультиплекс, ЦАП, кнопко
vanenzo 5:dcaed6b6b3cb 27
vanenzo 5:dcaed6b6b3cb 28 AnalogIn analog_value(PC_4);
vanenzo 5:dcaed6b6b3cb 29 DigitalIn button(PA_13); // проверка нажатой кнопки пауза
vanenzo 8:e68460a69e2e 30 DigitalIn test_button(USER_BUTTON);
vanenzo 8:e68460a69e2e 31
vanenzo 8:e68460a69e2e 32 DigitalOut *P0,*P1,*P2,*P3;//Указатели на пины функции mux
vanenzo 8:e68460a69e2e 33
vanenzo 8:e68460a69e2e 34 //пины управления мультиплексором выбора пояса
vanenzo 16:41e558cc18f1 35 DigitalOut IEN(PC_8);
vanenzo 8:e68460a69e2e 36 DigitalOut IE0(PB_1);
vanenzo 8:e68460a69e2e 37 DigitalOut IE1(PB_15);
vanenzo 8:e68460a69e2e 38 DigitalOut IE2(PB_14);
vanenzo 8:e68460a69e2e 39 DigitalOut IE3(PB_13);
vanenzo 5:dcaed6b6b3cb 40
vanenzo 5:dcaed6b6b3cb 41 //пины управления мультиплексорами генератора
vanenzo 8:e68460a69e2e 42 DigitalOut II0(PA_0);
vanenzo 8:e68460a69e2e 43 DigitalOut II1(PA_1);
vanenzo 8:e68460a69e2e 44 DigitalOut II2(PA_4);
vanenzo 8:e68460a69e2e 45 DigitalOut II3(PB_0);
vanenzo 8:e68460a69e2e 46
vanenzo 8:e68460a69e2e 47 //пины управления мультиплексорами земли
vanenzo 8:e68460a69e2e 48 DigitalOut IG0(PA_5);
vanenzo 8:e68460a69e2e 49 DigitalOut IG1(PA_6);
vanenzo 8:e68460a69e2e 50 DigitalOut IG2(PA_7);
vanenzo 8:e68460a69e2e 51 DigitalOut IG3(PB_6);
vanenzo 5:dcaed6b6b3cb 52
vanenzo 8:e68460a69e2e 53 //пины управления мультиплексорами 1 дифф канала
vanenzo 8:e68460a69e2e 54 DigitalOut DI10(PC_7);
vanenzo 8:e68460a69e2e 55 DigitalOut DI11(PA_9);
vanenzo 8:e68460a69e2e 56 DigitalOut DI12(PA_8);
vanenzo 8:e68460a69e2e 57 DigitalOut DI13(PB_10);
vanenzo 8:e68460a69e2e 58
vanenzo 8:e68460a69e2e 59 //пины управления мультиплексорами 2 дифф канала
vanenzo 8:e68460a69e2e 60 DigitalOut DI20(PB_4);
vanenzo 8:e68460a69e2e 61 DigitalOut DI21(PB_5);
vanenzo 8:e68460a69e2e 62 DigitalOut DI22(PB_3);
vanenzo 8:e68460a69e2e 63 DigitalOut DI23(PA_10);
vanenzo 8:e68460a69e2e 64
vanenzo 8:e68460a69e2e 65 //пины управления КУ
vanenzo 8:e68460a69e2e 66 DigitalOut AA0(PC_0);
vanenzo 8:e68460a69e2e 67 DigitalOut AA1(PC_1);
vanenzo 5:dcaed6b6b3cb 68
vanenzo 8:e68460a69e2e 69 //отруб ненужных каналов АЦП
vanenzo 8:e68460a69e2e 70 BusOut adzero(PC_2,PC_3,PC_5);
vanenzo 8:e68460a69e2e 71
vanenzo 8:e68460a69e2e 72 //управление мультиплексорами
vanenzo 8:e68460a69e2e 73 void mux_group();
vanenzo 8:e68460a69e2e 74 int IE;
vanenzo 8:e68460a69e2e 75 int j; //inject I
vanenzo 8:e68460a69e2e 76 int k; //measure I
vanenzo 11:f991915d6245 77 int belt;
vanenzo 17:e2f843372f7b 78 float yprint[2080];
vanenzo 11:f991915d6245 79
vanenzo 8:e68460a69e2e 80
vanenzo 8:e68460a69e2e 81 void mux();//универсальная процедура выбора канала
vanenzo 8:e68460a69e2e 82 int P;//канал в mux
vanenzo 5:dcaed6b6b3cb 83
vanenzo 8:e68460a69e2e 84 void emux();// выбор пояса
vanenzo 8:e68460a69e2e 85 void emux_init();//выключение всех поясов
vanenzo 8:e68460a69e2e 86 void imux(); //выбор инжектирующего электрода
vanenzo 8:e68460a69e2e 87 void igmux();//выбор земли
vanenzo 8:e68460a69e2e 88 void DI1mux();//выбор первого измерительного электрода
vanenzo 8:e68460a69e2e 89 void DI2mux();//выбор второго измерительного электрода
vanenzo 0:957268dd05c4 90
vanenzo 8:e68460a69e2e 91 //измерение
vanenzo 8:e68460a69e2e 92 void preamp();
vanenzo 8:e68460a69e2e 93 int PA;
vanenzo 8:e68460a69e2e 94
vanenzo 8:e68460a69e2e 95 //связь с ПК
vanenzo 8:e68460a69e2e 96 void five();
vanenzo 8:e68460a69e2e 97 void four();
vanenzo 8:e68460a69e2e 98 char key4[] = "4";
vanenzo 8:e68460a69e2e 99 char key5[] = "5";
vanenzo 4:2a0242bfbe0c 100 char buffer[2];
vanenzo 4:2a0242bfbe0c 101
vanenzo 8:e68460a69e2e 102 // переменные генератор-цап
vanenzo 0:957268dd05c4 103 int freqdata;
vanenzo 0:957268dd05c4 104 float amp;
vanenzo 0:957268dd05c4 105 int form;
vanenzo 8:e68460a69e2e 106 void freq();
vanenzo 8:e68460a69e2e 107 void freqsq();
vanenzo 8:e68460a69e2e 108 void sinus();
vanenzo 8:e68460a69e2e 109 void square();
vanenzo 8:e68460a69e2e 110 void triangle();
vanenzo 8:e68460a69e2e 111 void adc_read();
vanenzo 8:e68460a69e2e 112 void request();
vanenzo 8:e68460a69e2e 113 void rasputte();
vanenzo 8:e68460a69e2e 114 void channel();
vanenzo 11:f991915d6245 115 void amplitude();
vanenzo 8:e68460a69e2e 116 int II; int IG; int DI1; int DI2;
vanenzo 8:e68460a69e2e 117
vanenzo 8:e68460a69e2e 118 void measure();
vanenzo 8:e68460a69e2e 119 void ranging();
vanenzo 16:41e558cc18f1 120 void ranging_1();
vanenzo 8:e68460a69e2e 121 int sign;
vanenzo 8:e68460a69e2e 122 int range;
vanenzo 8:e68460a69e2e 123
vanenzo 9:996abe9af847 124 void fout();
vanenzo 9:996abe9af847 125
vanenzo 12:acfe1d7232e3 126 void belt_request();
vanenzo 8:e68460a69e2e 127 void swap();
vanenzo 8:e68460a69e2e 128 int diff;
vanenzo 8:e68460a69e2e 129
vanenzo 8:e68460a69e2e 130 int ymax;
vanenzo 8:e68460a69e2e 131 void adc_read();
vanenzo 16:41e558cc18f1 132 void adc_read1();
vanenzo 8:e68460a69e2e 133 int yp;
vanenzo 12:acfe1d7232e3 134 int exf;
vanenzo 12:acfe1d7232e3 135
vanenzo 8:e68460a69e2e 136
vanenzo 8:e68460a69e2e 137 //секция тестирования
vanenzo 8:e68460a69e2e 138 void ctest();
vanenzo 8:e68460a69e2e 139 int ct;
vanenzo 8:e68460a69e2e 140
vanenzo 8:e68460a69e2e 141 static ADC_HandleTypeDef AdcHandle;
vanenzo 8:e68460a69e2e 142
vanenzo 8:e68460a69e2e 143 void adc_init() {
vanenzo 8:e68460a69e2e 144 // we assume AnalogIn has configureed GPIO, we need ADC channel ?
vanenzo 8:e68460a69e2e 145 __ADC1_CLK_ENABLE(); // Enable ADC clock
vanenzo 8:e68460a69e2e 146 // Configure ADC
vanenzo 8:e68460a69e2e 147 AdcHandle.Instance = (ADC_TypeDef *)ADC1;
vanenzo 8:e68460a69e2e 148 AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
vanenzo 8:e68460a69e2e 149 AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
vanenzo 8:e68460a69e2e 150 AdcHandle.Init.ScanConvMode = DISABLE;
vanenzo 8:e68460a69e2e 151 AdcHandle.Init.ContinuousConvMode = ENABLE; // DMA
vanenzo 8:e68460a69e2e 152 AdcHandle.Init.DiscontinuousConvMode = DISABLE;
vanenzo 8:e68460a69e2e 153 AdcHandle.Init.NbrOfDiscConversion = 0;
vanenzo 8:e68460a69e2e 154 AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
vanenzo 8:e68460a69e2e 155 AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
vanenzo 8:e68460a69e2e 156 AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
vanenzo 8:e68460a69e2e 157 AdcHandle.Init.NbrOfConversion = 1;
vanenzo 8:e68460a69e2e 158 AdcHandle.Init.DMAContinuousRequests = ENABLE; // DMA
vanenzo 8:e68460a69e2e 159 AdcHandle.Init.EOCSelection = DISABLE;
vanenzo 8:e68460a69e2e 160 HAL_ADC_Init(&AdcHandle);
vanenzo 8:e68460a69e2e 161 }
vanenzo 8:e68460a69e2e 162
vanenzo 8:e68460a69e2e 163 static DMA_HandleTypeDef DMA_Handle;
vanenzo 8:e68460a69e2e 164
vanenzo 8:e68460a69e2e 165 void dma_init() {
vanenzo 8:e68460a69e2e 166 // DMA init ADC1 is DMA2 channel0 stream 0 or 4 use DMA2_Stream0 thd
vanenzo 8:e68460a69e2e 167
vanenzo 8:e68460a69e2e 168 __DMA2_CLK_ENABLE();
vanenzo 8:e68460a69e2e 169 DMA_Handle.Instance = DMA2_Stream0;
vanenzo 8:e68460a69e2e 170 DMA_Handle.State = HAL_DMA_STATE_READY;
vanenzo 8:e68460a69e2e 171 HAL_DMA_DeInit(&DMA_Handle);
vanenzo 8:e68460a69e2e 172 DMA_Handle.Init.Channel = DMA_CHANNEL_0;
vanenzo 8:e68460a69e2e 173 DMA_Handle.Init.Direction = DMA_PERIPH_TO_MEMORY;
vanenzo 8:e68460a69e2e 174 DMA_Handle.Init.PeriphInc = DMA_PINC_DISABLE;
vanenzo 8:e68460a69e2e 175 DMA_Handle.Init.MemInc = DMA_MINC_ENABLE;
vanenzo 8:e68460a69e2e 176 DMA_Handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
vanenzo 8:e68460a69e2e 177 DMA_Handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
vanenzo 8:e68460a69e2e 178 DMA_Handle.Init.Mode = DMA_NORMAL;
vanenzo 8:e68460a69e2e 179 DMA_Handle.Init.Priority = DMA_PRIORITY_HIGH;
vanenzo 8:e68460a69e2e 180 DMA_Handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
vanenzo 8:e68460a69e2e 181 DMA_Handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
vanenzo 8:e68460a69e2e 182 DMA_Handle.Init.MemBurst = DMA_MBURST_SINGLE;
vanenzo 8:e68460a69e2e 183 DMA_Handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
vanenzo 8:e68460a69e2e 184 HAL_DMA_Init(&DMA_Handle);
vanenzo 8:e68460a69e2e 185
vanenzo 8:e68460a69e2e 186 __HAL_LINKDMA(&AdcHandle, DMA_Handle, DMA_Handle);
vanenzo 8:e68460a69e2e 187 }
vanenzo 8:e68460a69e2e 188
vanenzo 8:e68460a69e2e 189 void adc_readn( uint16_t * data, uint32_t nelems) {
vanenzo 8:e68460a69e2e 190 ADC_ChannelConfTypeDef sConfig;
vanenzo 8:e68460a69e2e 191 sConfig.Channel = ADC_CHANNEL_14; // PC_4
vanenzo 8:e68460a69e2e 192 sConfig.Rank = 1;
vanenzo 9:996abe9af847 193 sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
vanenzo 8:e68460a69e2e 194 sConfig.Offset = 0;
vanenzo 8:e68460a69e2e 195 HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
vanenzo 8:e68460a69e2e 196 HAL_ADC_Start_DMA(&AdcHandle, (uint32_t *)data, nelems);
vanenzo 8:e68460a69e2e 197 while (DMA_Handle.Instance->CR & DMA_SxCR_EN); // spin
vanenzo 8:e68460a69e2e 198 HAL_ADC_Stop(&AdcHandle);
vanenzo 8:e68460a69e2e 199 }
vanenzo 8:e68460a69e2e 200
vanenzo 8:e68460a69e2e 201 void button_check();
vanenzo 8:e68460a69e2e 202
vanenzo 8:e68460a69e2e 203 Timer t;
vanenzo 8:e68460a69e2e 204
vanenzo 8:e68460a69e2e 205 int main()
vanenzo 16:41e558cc18f1 206 {
vanenzo 16:41e558cc18f1 207 IEN = 1;
vanenzo 8:e68460a69e2e 208 adzero = 0;
vanenzo 17:e2f843372f7b 209 serial.baud(921600);
vanenzo 11:f991915d6245 210 ddsstop;dacstop;
vanenzo 15:6c8afb8fa44d 211 DDS.frequency(400000);
vanenzo 15:6c8afb8fa44d 212 DDS.format(16,2);
vanenzo 8:e68460a69e2e 213 ddsstart; DDS.write(0x21C2);
vanenzo 8:e68460a69e2e 214 ddsstart; DDS.write(0x20C2);
vanenzo 8:e68460a69e2e 215 ddsstop; // инициализация dds
vanenzo 11:f991915d6245 216 mclkstart
vanenzo 11:f991915d6245 217 wait_ms(1);
vanenzo 11:f991915d6245 218 //printf("10000000000000000\r\n");
vanenzo 11:f991915d6245 219 while(true) {
vanenzo 11:f991915d6245 220 emux_init();
vanenzo 16:41e558cc18f1 221 i2g;
vanenzo 11:f991915d6245 222 memset(yprint,0,sizeof yprint);
vanenzo 12:acfe1d7232e3 223 exf = 0;
vanenzo 16:41e558cc18f1 224 belt_request();
vanenzo 16:41e558cc18f1 225 if (belt > 10) {continue;}
vanenzo 12:acfe1d7232e3 226 ctest();
vanenzo 12:acfe1d7232e3 227 if (ct == 1) {continue;}
vanenzo 12:acfe1d7232e3 228 else {wait_us(10); printf("7\r\n"); fflush (stdout); wait_us(100);};
vanenzo 16:41e558cc18f1 229 ddsreset;
vanenzo 8:e68460a69e2e 230 request();
vanenzo 17:e2f843372f7b 231 int amountOfByte = sizeof(float) * 208 * belt;
vanenzo 12:acfe1d7232e3 232 while(true){
vanenzo 9:996abe9af847 233 t.reset();
vanenzo 9:996abe9af847 234 t.start();
vanenzo 8:e68460a69e2e 235 rasputte();
vanenzo 8:e68460a69e2e 236 mux_group();
vanenzo 9:996abe9af847 237 t.stop();
vanenzo 16:41e558cc18f1 238 i2g;
vanenzo 17:e2f843372f7b 239 write(1, yprint, amountOfByte);
vanenzo 9:996abe9af847 240 //fout();
vanenzo 9:996abe9af847 241 //////////////////////////
vanenzo 17:e2f843372f7b 242 // for (yp = 0; yp < (208*belt); yp++) {printf("%.6f\r\n",yprint[yp]);};
vanenzo 9:996abe9af847 243 /////////////////////////
vanenzo 9:996abe9af847 244 // printf("1000r useconds %i\r\n", t.read_ms());
vanenzo 11:f991915d6245 245 wait_us(1);
vanenzo 12:acfe1d7232e3 246 four();
vanenzo 12:acfe1d7232e3 247 if (exf == 1){break;}
vanenzo 12:acfe1d7232e3 248 }
vanenzo 15:6c8afb8fa44d 249 amp = 0.1;amplitude();sq=0.0;mclkstop;
vanenzo 12:acfe1d7232e3 250 ddsoff;
vanenzo 8:e68460a69e2e 251 }
vanenzo 12:acfe1d7232e3 252 }
vanenzo 8:e68460a69e2e 253
vanenzo 12:acfe1d7232e3 254 void belt_request()
vanenzo 12:acfe1d7232e3 255 {
vanenzo 12:acfe1d7232e3 256 fflush(stdout);
vanenzo 12:acfe1d7232e3 257 fflush(stdin);
vanenzo 12:acfe1d7232e3 258 scanf("%i",&belt);
vanenzo 12:acfe1d7232e3 259 fflush(stdin);
vanenzo 12:acfe1d7232e3 260 fflush(stdout);
vanenzo 12:acfe1d7232e3 261 }
vanenzo 8:e68460a69e2e 262
vanenzo 9:996abe9af847 263 void fout()
vanenzo 9:996abe9af847 264 {
vanenzo 9:996abe9af847 265 //printf("%.1g,%i\r\n", ampd[ampc], freqdata);
vanenzo 9:996abe9af847 266 printf("# name: data\r\n");
vanenzo 9:996abe9af847 267 printf("# type: scalar struct\r\n");
vanenzo 9:996abe9af847 268 printf("# ndims: 2\r\n");
vanenzo 9:996abe9af847 269 printf(" 1 1\r\n");
vanenzo 9:996abe9af847 270 printf("# length: 4\r\n");
vanenzo 9:996abe9af847 271 printf("# name: description\r\n");
vanenzo 9:996abe9af847 272 printf("# type: sq_string\r\n");
vanenzo 9:996abe9af847 273 printf("# elements: 1\r\n");
vanenzo 9:996abe9af847 274 printf("# length: 20\r\n");
vanenzo 9:996abe9af847 275 if (form == 1){printf("# sin %03i kHz %1.01f mA\r\n",freqdata,amp);}
vanenzo 9:996abe9af847 276 else if (form == 2){printf("# sqr %03i kHz %1.01f mA\r\n",freqdata,amp);}
vanenzo 9:996abe9af847 277 else {printf("# tri %03i kHz %1.01f mA\r\n",freqdata,amp);};
vanenzo 9:996abe9af847 278 printf("\r\n");
vanenzo 9:996abe9af847 279 printf("\r\n");
vanenzo 9:996abe9af847 280 printf("# name: meas_volts\r\n");
vanenzo 9:996abe9af847 281 printf("# type: matrix\r\n");
vanenzo 17:e2f843372f7b 282 printf("# rows: 208\r\n");
vanenzo 9:996abe9af847 283 printf("# columns: 1\r\n");
vanenzo 17:e2f843372f7b 284 for (yp = 0; yp < 208*belt; yp++) {printf("%.6g\r\n",yprint[yp]);};
vanenzo 9:996abe9af847 285 memset(yprint,0,sizeof yprint);
vanenzo 9:996abe9af847 286 printf("\r\n");
vanenzo 9:996abe9af847 287 printf("# name: time\r\n");
vanenzo 9:996abe9af847 288 printf("# type: scalar\r\n");
vanenzo 9:996abe9af847 289 printf(" %04i ms\r\n",t.read_ms());
vanenzo 9:996abe9af847 290 printf("\r\n");
vanenzo 9:996abe9af847 291 printf("# name: n_elec\r\n");
vanenzo 9:996abe9af847 292 printf("# type: scalar\r\n");
vanenzo 9:996abe9af847 293 printf(" 16\r\n");
vanenzo 9:996abe9af847 294
vanenzo 9:996abe9af847 295 }
vanenzo 8:e68460a69e2e 296
vanenzo 8:e68460a69e2e 297 void ctest()
vanenzo 8:e68460a69e2e 298 {
vanenzo 8:e68460a69e2e 299 ct = 0;
vanenzo 8:e68460a69e2e 300 int mg = 0;
vanenzo 8:e68460a69e2e 301 int mj = 0;
vanenzo 9:996abe9af847 302 int aread=0;
vanenzo 16:41e558cc18f1 303 sign=1; PA=1; range=1; preamp();
vanenzo 11:f991915d6245 304 form = 1; freqdata = 50; amp = 5;
vanenzo 16:41e558cc18f1 305 sinus();wait_ms(10);
vanenzo 12:acfe1d7232e3 306 for (mg = 0; mg < belt; mg++) {
vanenzo 8:e68460a69e2e 307 IE = mg; emux();
vanenzo 8:e68460a69e2e 308 for (mj = 0; mj < 15; mj+=2) {
vanenzo 16:41e558cc18f1 309 IG = mj; II = mj+1; DI1 = II; DI2 = IG;
vanenzo 9:996abe9af847 310 igmux(); imux(); DI1mux(); DI2mux();
vanenzo 11:f991915d6245 311 int xa = (int)5000/freqdata;
vanenzo 13:032f94430b0b 312 int xaa = (int)xa/5;
vanenzo 11:f991915d6245 313 uint16_t x[xa];
vanenzo 11:f991915d6245 314 adc_init();
vanenzo 11:f991915d6245 315 dma_init();
vanenzo 11:f991915d6245 316 memset(x,0,sizeof x);
vanenzo 11:f991915d6245 317 adc_readn(x,xa);
vanenzo 11:f991915d6245 318 sort(x+xaa,x + xa);
vanenzo 11:f991915d6245 319 aread = (int)x[xa-1];
vanenzo 16:41e558cc18f1 320 if ((aread > 3500) &&(test_button.read() == 1))
vanenzo 12:acfe1d7232e3 321 {printf("%i,%i\r\n",mg+1, mj+1); printf("%i,%i\r\n",mg+1, mj+2);ct = 1;}
vanenzo 9:996abe9af847 322 }
vanenzo 9:996abe9af847 323
vanenzo 8:e68460a69e2e 324 }
vanenzo 16:41e558cc18f1 325 //mclkstop;
vanenzo 12:acfe1d7232e3 326 }
vanenzo 8:e68460a69e2e 327
vanenzo 0:957268dd05c4 328
vanenzo 8:e68460a69e2e 329 void four()
vanenzo 8:e68460a69e2e 330 {
vanenzo 12:acfe1d7232e3 331 //printf("\r");
vanenzo 8:e68460a69e2e 332 fflush (stdout);
vanenzo 11:f991915d6245 333 fflush (stdin);
vanenzo 12:acfe1d7232e3 334 scanf ("%2s",buffer);
vanenzo 11:f991915d6245 335 fflush (stdout);
vanenzo 12:acfe1d7232e3 336 if (strcmp (key4,buffer) == 0){exf = 1;}
vanenzo 12:acfe1d7232e3 337 }
vanenzo 8:e68460a69e2e 338
vanenzo 8:e68460a69e2e 339 void five()
vanenzo 8:e68460a69e2e 340 {
vanenzo 8:e68460a69e2e 341 do {
vanenzo 8:e68460a69e2e 342 fflush (stdout);
vanenzo 8:e68460a69e2e 343 scanf ("%2s",buffer);
vanenzo 8:e68460a69e2e 344 } while (strcmp (key5,buffer) != 0);
vanenzo 11:f991915d6245 345 wait_us(10);
vanenzo 9:996abe9af847 346 fflush (stdout);
vanenzo 8:e68460a69e2e 347 }
vanenzo 8:e68460a69e2e 348
vanenzo 11:f991915d6245 349 void amplitude()
vanenzo 8:e68460a69e2e 350 {
vanenzo 8:e68460a69e2e 351 uint16_t ampt;
vanenzo 8:e68460a69e2e 352 uint16_t ampReg;
vanenzo 8:e68460a69e2e 353 ampt = uint16_t(819.2*(5.0-amp));
vanenzo 8:e68460a69e2e 354 ampReg = uint16_t(ampt & 0xFFF);
vanenzo 11:f991915d6245 355 DAC.format(16,1);DAC.frequency(400000);
vanenzo 8:e68460a69e2e 356 dacstart;
vanenzo 8:e68460a69e2e 357 DAC.write(ampReg*4);
vanenzo 8:e68460a69e2e 358 dacstop;
vanenzo 8:e68460a69e2e 359 }
vanenzo 8:e68460a69e2e 360
vanenzo 8:e68460a69e2e 361 void freq ()
vanenzo 8:e68460a69e2e 362 {
vanenzo 8:e68460a69e2e 363 ddsstart;
vanenzo 8:e68460a69e2e 364 float FreqReg;
vanenzo 8:e68460a69e2e 365 uint32_t ftemp;
vanenzo 8:e68460a69e2e 366 uint16_t Uptemp, Lowtemp;
vanenzo 8:e68460a69e2e 367 FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
vanenzo 8:e68460a69e2e 368 ftemp = (uint32_t)FreqReg;
vanenzo 8:e68460a69e2e 369 Lowtemp = (uint16_t)(ftemp & 0x3FFF);
vanenzo 8:e68460a69e2e 370 Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
vanenzo 8:e68460a69e2e 371 DDS.write(Lowtemp + 0x4000);
vanenzo 8:e68460a69e2e 372 ddsstart;
vanenzo 8:e68460a69e2e 373 DDS.write(Uptemp + 0x4000);
vanenzo 8:e68460a69e2e 374 ddsstop;
vanenzo 8:e68460a69e2e 375 }
vanenzo 8:e68460a69e2e 376
vanenzo 8:e68460a69e2e 377 void freqsq ()
vanenzo 8:e68460a69e2e 378 {
vanenzo 17:e2f843372f7b 379 int period;
vanenzo 17:e2f843372f7b 380 period = (int) 1000/freqdata;
vanenzo 8:e68460a69e2e 381 sq.period_us(period);
vanenzo 17:e2f843372f7b 382 sq.pulsewidth_us((int)period/2);
vanenzo 8:e68460a69e2e 383 }
vanenzo 8:e68460a69e2e 384
vanenzo 8:e68460a69e2e 385 void sinus()
vanenzo 8:e68460a69e2e 386 {
vanenzo 8:e68460a69e2e 387 ddsstart;
vanenzo 8:e68460a69e2e 388 sinsoft;
vanenzo 8:e68460a69e2e 389 freq();
vanenzo 8:e68460a69e2e 390 ddsstop;
vanenzo 8:e68460a69e2e 391 amplitude();
vanenzo 8:e68460a69e2e 392 mclkstart;
vanenzo 8:e68460a69e2e 393 }
vanenzo 8:e68460a69e2e 394
vanenzo 8:e68460a69e2e 395 void square()
vanenzo 8:e68460a69e2e 396 {
vanenzo 8:e68460a69e2e 397 ddsstart;DDS.write(0x210A);ddsstart;DDS.write(0x4000);
vanenzo 8:e68460a69e2e 398 ddsstart;DDS.write(0x4000);ddsstart;DDS.write(0x8000);
vanenzo 8:e68460a69e2e 399 ddsstart;DDS.write(0x8000);ddsstart;DDS.write(0xCC00);
vanenzo 8:e68460a69e2e 400 ddsstart;DDS.write(0xE400);ddsstart;DDS.write(0x220A);
vanenzo 8:e68460a69e2e 401 ddsstop;
vanenzo 8:e68460a69e2e 402 amplitude();
vanenzo 8:e68460a69e2e 403 mclkstart;
vanenzo 11:f991915d6245 404 freqsq();
vanenzo 8:e68460a69e2e 405 }
vanenzo 8:e68460a69e2e 406
vanenzo 8:e68460a69e2e 407 void triangle()
vanenzo 8:e68460a69e2e 408 {
vanenzo 8:e68460a69e2e 409 ddsstart;
vanenzo 8:e68460a69e2e 410 trisoft;
vanenzo 8:e68460a69e2e 411 ddsstart;
vanenzo 8:e68460a69e2e 412 freq();
vanenzo 8:e68460a69e2e 413 ddsstop;
vanenzo 8:e68460a69e2e 414 amplitude();
vanenzo 8:e68460a69e2e 415 mclkstart;
vanenzo 8:e68460a69e2e 416 }
vanenzo 8:e68460a69e2e 417
vanenzo 8:e68460a69e2e 418 void request()
vanenzo 8:e68460a69e2e 419 {
vanenzo 8:e68460a69e2e 420 // printf("forma, chastota\r\n");
vanenzo 8:e68460a69e2e 421 fflush(stdout);
vanenzo 11:f991915d6245 422 fflush(stdin);
vanenzo 11:f991915d6245 423 scanf("%i,%i,%i,%f",&belt,&form,&freqdata,&amp);
vanenzo 11:f991915d6245 424 fflush(stdin);
vanenzo 8:e68460a69e2e 425 fflush(stdout);
vanenzo 8:e68460a69e2e 426 }
vanenzo 12:acfe1d7232e3 427
vanenzo 12:acfe1d7232e3 428
vanenzo 8:e68460a69e2e 429
vanenzo 8:e68460a69e2e 430 void rasputte()
vanenzo 8:e68460a69e2e 431 {
vanenzo 8:e68460a69e2e 432 switch(form) {
vanenzo 8:e68460a69e2e 433 case (1):
vanenzo 8:e68460a69e2e 434 sinus();
vanenzo 8:e68460a69e2e 435 break;
vanenzo 8:e68460a69e2e 436 case (2):
vanenzo 8:e68460a69e2e 437 square();
vanenzo 8:e68460a69e2e 438 break;
vanenzo 8:e68460a69e2e 439 case (3):
vanenzo 8:e68460a69e2e 440 triangle();
vanenzo 8:e68460a69e2e 441 break;
vanenzo 8:e68460a69e2e 442 }
vanenzo 8:e68460a69e2e 443 }
vanenzo 8:e68460a69e2e 444
vanenzo 8:e68460a69e2e 445 void emux_init()
vanenzo 8:e68460a69e2e 446 {
vanenzo 8:e68460a69e2e 447 P = 15; P0=&IE0; P1=&IE1; P2=&IE2; P3=&IE3;
vanenzo 8:e68460a69e2e 448 mux();
vanenzo 8:e68460a69e2e 449 }
vanenzo 8:e68460a69e2e 450
vanenzo 8:e68460a69e2e 451 void emux()
vanenzo 8:e68460a69e2e 452 {
vanenzo 8:e68460a69e2e 453 P = IE; P0=&IE0; P1=&IE1; P2=&IE2; P3=&IE3;
vanenzo 8:e68460a69e2e 454 mux();
vanenzo 8:e68460a69e2e 455 }
vanenzo 8:e68460a69e2e 456
vanenzo 8:e68460a69e2e 457 void imux()
vanenzo 8:e68460a69e2e 458 {
vanenzo 8:e68460a69e2e 459 P = II; P0=&II0; P1=&II1; P2=&II2; P3=&II3;
vanenzo 8:e68460a69e2e 460 mux();
vanenzo 8:e68460a69e2e 461 }
vanenzo 8:e68460a69e2e 462
vanenzo 8:e68460a69e2e 463 void igmux()
vanenzo 8:e68460a69e2e 464 {
vanenzo 8:e68460a69e2e 465 P = IG; P0=&IG0; P1=&IG1; P2=&IG2; P3=&IG3;
vanenzo 8:e68460a69e2e 466 mux();
vanenzo 8:e68460a69e2e 467 }
vanenzo 8:e68460a69e2e 468
vanenzo 8:e68460a69e2e 469 void DI1mux()
vanenzo 8:e68460a69e2e 470 {
vanenzo 8:e68460a69e2e 471 P = DI1; P0=&DI10; P1=&DI11; P2=&DI12; P3=&DI13;
vanenzo 8:e68460a69e2e 472 mux();
vanenzo 8:e68460a69e2e 473 }
vanenzo 8:e68460a69e2e 474
vanenzo 8:e68460a69e2e 475 void DI2mux()
vanenzo 8:e68460a69e2e 476 {
vanenzo 8:e68460a69e2e 477 P = DI2; P0=&DI20; P1=&DI21; P2=&DI22; P3=&DI23;
vanenzo 8:e68460a69e2e 478 mux();
vanenzo 8:e68460a69e2e 479 }
vanenzo 8:e68460a69e2e 480
vanenzo 8:e68460a69e2e 481
vanenzo 8:e68460a69e2e 482 void mux()
vanenzo 8:e68460a69e2e 483 {
vanenzo 8:e68460a69e2e 484 switch (P) {
vanenzo 8:e68460a69e2e 485 case (0): {*P0=0; *P1=0; *P2=0; *P3=0;} break;
vanenzo 8:e68460a69e2e 486 case (1): {*P0=1; *P1=0; *P2=0; *P3=0;} break;
vanenzo 8:e68460a69e2e 487 case (2): {*P0=0; *P1=1; *P2=0; *P3=0;} break;
vanenzo 8:e68460a69e2e 488 case (3): {*P0=1; *P1=1; *P2=0; *P3=0;} break;
vanenzo 8:e68460a69e2e 489 case (4): {*P0=0; *P1=0; *P2=1; *P3=0;} break;
vanenzo 8:e68460a69e2e 490 case (5): {*P0=1; *P1=0; *P2=1; *P3=0;} break;
vanenzo 8:e68460a69e2e 491 case (6): {*P0=0; *P1=1; *P2=1; *P3=0;} break;
vanenzo 8:e68460a69e2e 492 case (7): {*P0=1; *P1=1; *P2=1; *P3=0;} break;
vanenzo 8:e68460a69e2e 493 case (8): {*P0=0; *P1=0; *P2=0; *P3=1;} break;
vanenzo 8:e68460a69e2e 494 case (9): {*P0=1; *P1=0; *P2=0; *P3=1;} break;
vanenzo 8:e68460a69e2e 495 case (10): {*P0=0; *P1=1; *P2=0; *P3=1;} break;
vanenzo 8:e68460a69e2e 496 case (11): {*P0=1; *P1=1; *P2=0; *P3=1;} break;
vanenzo 8:e68460a69e2e 497 case (12): {*P0=0; *P1=0; *P2=1; *P3=1;} break;
vanenzo 8:e68460a69e2e 498 case (13): {*P0=1; *P1=0; *P2=1; *P3=1;} break;
vanenzo 8:e68460a69e2e 499 case (14): {*P0=0; *P1=1; *P2=1; *P3=1;} break;
vanenzo 8:e68460a69e2e 500 case (15): {*P0=1; *P1=1; *P2=1; *P3=1;} break;
vanenzo 3:59a57634f1fa 501 }
vanenzo 4:2a0242bfbe0c 502 }
vanenzo 0:957268dd05c4 503
vanenzo 8:e68460a69e2e 504 void preamp()
vanenzo 0:957268dd05c4 505 {
vanenzo 8:e68460a69e2e 506 switch (PA)
vanenzo 8:e68460a69e2e 507 {
vanenzo 8:e68460a69e2e 508 case(1): {AA0=0;AA1=0;} break;
vanenzo 8:e68460a69e2e 509 case(10): {AA0=0;AA1=1;} break;
vanenzo 8:e68460a69e2e 510 case(100): {AA0=1;AA1=0;} break;
vanenzo 8:e68460a69e2e 511 case(1000): {AA0=1;AA1=1;} break;
vanenzo 0:957268dd05c4 512 }
vanenzo 5:dcaed6b6b3cb 513 }
vanenzo 5:dcaed6b6b3cb 514
vanenzo 5:dcaed6b6b3cb 515
vanenzo 8:e68460a69e2e 516 void mux_group()
vanenzo 8:e68460a69e2e 517 {
vanenzo 11:f991915d6245 518 yp=0;
vanenzo 11:f991915d6245 519 for (IE = 0; IE < belt; IE++) {
vanenzo 8:e68460a69e2e 520 emux();
vanenzo 11:f991915d6245 521 //wait_ms(20);
vanenzo 16:41e558cc18f1 522 //PA=100; range=100;preamp();
vanenzo 8:e68460a69e2e 523 channel();
vanenzo 8:e68460a69e2e 524 }
vanenzo 11:f991915d6245 525 //mclkstop;
vanenzo 8:e68460a69e2e 526 }
vanenzo 8:e68460a69e2e 527
vanenzo 8:e68460a69e2e 528 void channel()
vanenzo 5:dcaed6b6b3cb 529 {
vanenzo 8:e68460a69e2e 530 j = 0;//inject
vanenzo 8:e68460a69e2e 531 k = 0;//measure
vanenzo 8:e68460a69e2e 532 for (j = 0; j<16; j++) {
vanenzo 8:e68460a69e2e 533 //button_check();
vanenzo 8:e68460a69e2e 534 if (j==15) {IG = j; II = 0;} else {IG = j; II = j+1;}
vanenzo 16:41e558cc18f1 535 igmux(); imux(); //DI1=IG; DI2=IG; DI1mux(); DI2mux();
vanenzo 14:551ee0b21bc6 536 //if ((j==0)&&(IE==0)){wait_ms(1);}
vanenzo 8:e68460a69e2e 537 for (k = 0; k<16; k++) {
vanenzo 14:551ee0b21bc6 538 if (k==15) {DI1 = k;DI2 = 0;} else {DI1 = k; DI2 = k+1; }
vanenzo 17:e2f843372f7b 539 if ((DI1==II)||(DI1==IG)||(DI2==II)||(DI2==IG)){continue;}
vanenzo 8:e68460a69e2e 540 DI1mux();
vanenzo 14:551ee0b21bc6 541 DI2mux();
vanenzo 14:551ee0b21bc6 542 wait_us(10);
vanenzo 8:e68460a69e2e 543 measure();
vanenzo 8:e68460a69e2e 544 // printf("\r\n");
vanenzo 8:e68460a69e2e 545 }
vanenzo 5:dcaed6b6b3cb 546 }
vanenzo 8:e68460a69e2e 547
vanenzo 8:e68460a69e2e 548 /* for (j = 0; j<16; j++) {
vanenzo 8:e68460a69e2e 549 //button_check();
vanenzo 8:e68460a69e2e 550 if (j==15) {IG = j; II = 0;} else {IG = j; II = j+1;}
vanenzo 8:e68460a69e2e 551 DI1 = II;igmux(); imux();DI1mux();
vanenzo 8:e68460a69e2e 552
vanenzo 8:e68460a69e2e 553 wait_ms(2);
vanenzo 8:e68460a69e2e 554
vanenzo 8:e68460a69e2e 555 measure();}*/
vanenzo 8:e68460a69e2e 556 /* while(1){
vanenzo 8:e68460a69e2e 557 printf("%s\r\n", "vvod II inJect ");
vanenzo 8:e68460a69e2e 558 fflush(stdout);
vanenzo 8:e68460a69e2e 559 scanf("%i",&II);//инжект
vanenzo 8:e68460a69e2e 560 printf("%s\r\n", "vvod IG inJect ");
vanenzo 8:e68460a69e2e 561 fflush(stdout);
vanenzo 8:e68460a69e2e 562 scanf("%i",&IG);//инжектIG
vanenzo 8:e68460a69e2e 563 igmux(); imux();
vanenzo 8:e68460a69e2e 564 //button_check();
vanenzo 8:e68460a69e2e 565 printf("%s\r\n", "vvod DI1");
vanenzo 8:e68460a69e2e 566 fflush(stdout);
vanenzo 8:e68460a69e2e 567 scanf("%i",&DI1);//инжект
vanenzo 8:e68460a69e2e 568 DI1mux(); measure();}*/
vanenzo 8:e68460a69e2e 569
vanenzo 5:dcaed6b6b3cb 570 }
vanenzo 5:dcaed6b6b3cb 571
vanenzo 8:e68460a69e2e 572
vanenzo 8:e68460a69e2e 573 void measure()
vanenzo 8:e68460a69e2e 574 {
vanenzo 16:41e558cc18f1 575 // ranging_1();
vanenzo 16:41e558cc18f1 576 adc_read1();
vanenzo 16:41e558cc18f1 577 }
vanenzo 16:41e558cc18f1 578
vanenzo 16:41e558cc18f1 579 void ranging_1()//определение коэффициента усиления и знака
vanenzo 16:41e558cc18f1 580 {
vanenzo 16:41e558cc18f1 581 int xa = (int)4000/freqdata;
vanenzo 16:41e558cc18f1 582 // if (xa < 20){xa=20;}
vanenzo 16:41e558cc18f1 583 // else if (xa > 200){xa=200;};
vanenzo 16:41e558cc18f1 584 uint16_t x[xa];
vanenzo 16:41e558cc18f1 585 int s_ok=0;
vanenzo 16:41e558cc18f1 586 PA=100; range=100;preamp();
vanenzo 16:41e558cc18f1 587 adc_init();
vanenzo 16:41e558cc18f1 588 dma_init();
vanenzo 16:41e558cc18f1 589 adc_readn(x,xa);
vanenzo 16:41e558cc18f1 590 sort(x,x + xa);
vanenzo 16:41e558cc18f1 591 if ((x[xa-1] > 3950)||(x[0] < 50)) {range=10;wait_us(10);}
vanenzo 16:41e558cc18f1 592 PA = range; preamp();
vanenzo 16:41e558cc18f1 593 memset(x,0,sizeof x);
vanenzo 8:e68460a69e2e 594 }
vanenzo 8:e68460a69e2e 595
vanenzo 8:e68460a69e2e 596 void ranging()//определение коэффициента усиления и знака
vanenzo 8:e68460a69e2e 597 {
vanenzo 13:032f94430b0b 598 int xa = (int)8000/freqdata;
vanenzo 11:f991915d6245 599 if (xa < 100){xa=100;}
vanenzo 13:032f94430b0b 600 else if (xa > 500){xa=500;};
vanenzo 13:032f94430b0b 601 int xaa = (int)xa/3;
vanenzo 9:996abe9af847 602 uint16_t x[xa];
vanenzo 8:e68460a69e2e 603 int s_ok=0;
vanenzo 8:e68460a69e2e 604 //IG = 0; II = 1;DI1 = II;DI2=IG;igmux();imux();DI1mux();DI2mux();wait_ms(10);
vanenzo 16:41e558cc18f1 605 PA=100; range=100;preamp();
vanenzo 9:996abe9af847 606 //while(s_ok==0){
vanenzo 8:e68460a69e2e 607 adc_init();
vanenzo 8:e68460a69e2e 608 dma_init();
vanenzo 8:e68460a69e2e 609 memset(x,0,sizeof x);
vanenzo 9:996abe9af847 610 adc_readn(x,xa);
vanenzo 10:7b8f697e075d 611 //printf("non_sorted\r\n");
vanenzo 10:7b8f697e075d 612 //for (s_ok = 0; s_ok < xa; s_ok++) {printf("%i\r\n",x[s_ok]);};
vanenzo 9:996abe9af847 613 sort(x+xaa,x + xa);
vanenzo 10:7b8f697e075d 614 //printf("sorted\r\n");
vanenzo 10:7b8f697e075d 615 //for (s_ok = 0; s_ok < xa; s_ok++) {printf("%i\r\n",x[s_ok]);};
vanenzo 13:032f94430b0b 616 ymax = (int)((x[xa-1]+x[xa-2])-(x[xaa]+x[xaa+1]))/2;
vanenzo 16:41e558cc18f1 617 if (ymax/PA <= 0.04) {range=1000;s_ok=1;wait_us(20);}
vanenzo 16:41e558cc18f1 618 else if (((ymax/PA > 0.04)&&(ymax/PA <= 0.4))) {range=100;s_ok=1;wait_us(10);}
vanenzo 16:41e558cc18f1 619 else if (((ymax/PA > 0.4)&&(ymax/PA <= 4))) {range=10;s_ok=1;wait_us(10);}
vanenzo 16:41e558cc18f1 620 else if (ymax/PA > 4) {range=1;s_ok=1;wait_us(10);};
vanenzo 14:551ee0b21bc6 621
vanenzo 14:551ee0b21bc6 622 /* if (ymax <= 3) {range=1000;s_ok=1;wait_us(50);}
vanenzo 14:551ee0b21bc6 623 else if (((ymax/PA > 3)&&(ymax <= 35))) {range=100;s_ok=1;wait_us(50);}
vanenzo 14:551ee0b21bc6 624 else if (((ymax/PA > 35)&&(ymax <= 4096))) {range=10;s_ok=1;wait_us(50);}
vanenzo 14:551ee0b21bc6 625 else if (ymax/PA > 300) {range=1;s_ok=1;wait_us(50);};*/
vanenzo 9:996abe9af847 626 //}
vanenzo 9:996abe9af847 627 PA = range; preamp();
vanenzo 9:996abe9af847 628 //printf("%i,%i,%i,%i\r\n",ymax,x[xa-(xaa+1)], x[0], range);
vanenzo 8:e68460a69e2e 629 memset(x,0,sizeof x);
vanenzo 5:dcaed6b6b3cb 630 }
vanenzo 5:dcaed6b6b3cb 631
vanenzo 8:e68460a69e2e 632 void swap()
vanenzo 8:e68460a69e2e 633 {
vanenzo 8:e68460a69e2e 634 int diff = DI1;
vanenzo 8:e68460a69e2e 635 DI1 = DI2;
vanenzo 8:e68460a69e2e 636 DI2 = diff;
vanenzo 8:e68460a69e2e 637 DI1mux();
vanenzo 8:e68460a69e2e 638 DI2mux();
vanenzo 8:e68460a69e2e 639 }
vanenzo 8:e68460a69e2e 640
vanenzo 8:e68460a69e2e 641 void adc_read()//измерение и вывод со всеми коэффициентами
vanenzo 8:e68460a69e2e 642 {
vanenzo 16:41e558cc18f1 643 int ya = (int)5000/freqdata;
vanenzo 9:996abe9af847 644 float ym = 0;
vanenzo 16:41e558cc18f1 645 if (ya < 50){ya=50;}
vanenzo 16:41e558cc18f1 646 else if (ya > 300){ya=300;};
vanenzo 16:41e558cc18f1 647 int yaa = (int)ya/20;
vanenzo 9:996abe9af847 648 uint16_t y[ya];
vanenzo 8:e68460a69e2e 649 adc_init();
vanenzo 8:e68460a69e2e 650 dma_init();
vanenzo 8:e68460a69e2e 651 memset(y,0,sizeof y);
vanenzo 9:996abe9af847 652 adc_readn(y,ya);
vanenzo 8:e68460a69e2e 653 // for (yp = 0; yp < 400; yp++) {printf("%i\r\n",y[yp]);};
vanenzo 10:7b8f697e075d 654 sort(y+yaa,y + ya);
vanenzo 14:551ee0b21bc6 655 ym = ((y[ya-2]+y[ya-3]+y[ya-4]+y[ya-5])-(y[yaa+1]+y[yaa+2]+y[yaa+3]+y[yaa+4]))/8;
vanenzo 9:996abe9af847 656 yprint[yp]=(((ym)*3.3*10)/(4096*range));yp++;
vanenzo 8:e68460a69e2e 657 memset(y,0,sizeof y);
vanenzo 16:41e558cc18f1 658 }
vanenzo 8:e68460a69e2e 659
vanenzo 16:41e558cc18f1 660 void adc_read1()//измерение и вывод со всеми коэффициентами
vanenzo 16:41e558cc18f1 661 {
vanenzo 16:41e558cc18f1 662 int s_ok = 1;
vanenzo 16:41e558cc18f1 663 PA=100; range=100;preamp();
vanenzo 16:41e558cc18f1 664 float ym = 0;
vanenzo 16:41e558cc18f1 665 int ya = (int)10000/freqdata;
vanenzo 16:41e558cc18f1 666 if (ya < 50){ya=50;}
vanenzo 16:41e558cc18f1 667 else if (ya > 500){ya=500;};
vanenzo 16:41e558cc18f1 668 int yaa = (int)ya/20;
vanenzo 16:41e558cc18f1 669 uint16_t y[ya];
vanenzo 16:41e558cc18f1 670 while (s_ok == 1)
vanenzo 16:41e558cc18f1 671 {
vanenzo 16:41e558cc18f1 672 adc_init();
vanenzo 16:41e558cc18f1 673 dma_init();
vanenzo 16:41e558cc18f1 674 memset(y,0,sizeof y);
vanenzo 16:41e558cc18f1 675 adc_readn(y,ya);
vanenzo 16:41e558cc18f1 676 sort(y+yaa,y + ya);
vanenzo 16:41e558cc18f1 677 if ((y[ya-1] > 3950)||(y[yaa] < 50)) {range=10;wait_us(10);s_ok = 1;memset(y,0,sizeof y);} else {s_ok = 0;};
vanenzo 16:41e558cc18f1 678 PA = range; preamp();
vanenzo 16:41e558cc18f1 679 }
vanenzo 16:41e558cc18f1 680 ym = ((y[ya-1]+y[ya-2]+y[ya-3]+y[ya-4])-(y[yaa]+y[yaa+1]+y[yaa+2]+y[yaa+3]))/8;
vanenzo 16:41e558cc18f1 681 yprint[yp]=(((ym)*3.3*10)/(4096*range));yp++;
vanenzo 16:41e558cc18f1 682 memset(y,0,sizeof y);
vanenzo 8:e68460a69e2e 683 }
vanenzo 8:e68460a69e2e 684
vanenzo 8:e68460a69e2e 685
vanenzo 8:e68460a69e2e 686 void button_check()
vanenzo 8:e68460a69e2e 687 {
vanenzo 8:e68460a69e2e 688 if (button.read() == 1) {
vanenzo 5:dcaed6b6b3cb 689 wait_ms(10);
vanenzo 8:e68460a69e2e 690 if (button.read() == 1) {
vanenzo 8:e68460a69e2e 691 int amp1;
vanenzo 8:e68460a69e2e 692 amp1 = amp;
vanenzo 8:e68460a69e2e 693 amp = 0.1;
vanenzo 8:e68460a69e2e 694 amplitude();
vanenzo 8:e68460a69e2e 695 while (button.read() == 1);
vanenzo 8:e68460a69e2e 696 amp = amp1;
vanenzo 8:e68460a69e2e 697 amplitude();
vanenzo 5:dcaed6b6b3cb 698 }
vanenzo 5:dcaed6b6b3cb 699 }
vanenzo 8:e68460a69e2e 700 }