AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Committer:
vanenzo
Date:
Sat Mar 11 14:24:26 2017 +0000
Revision:
9:996abe9af847
Parent:
8:e68460a69e2e
Child:
10:7b8f697e075d
new filter

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