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