AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Revision:
8:e68460a69e2e
Parent:
7:299b41477dfb
Child:
9:996abe9af847
--- a/main.cpp	Thu Feb 11 04:12:40 2016 +0000
+++ b/main.cpp	Tue Mar 07 11:24:55 2017 +0000
@@ -1,5 +1,7 @@
 #include "mbed.h"
 #include "FastPWM.h"
+#include <algorithm>
+
 #define ddsstart    SYNC2 = 1;wait_ms(1);SYNC2 = 0;wait_ms(1)
 #define ddsstop SYNC2 = 1;wait_ms(1)
 #define ddsreset    DDS.write(0x21C0)
@@ -9,304 +11,544 @@
 #define ddsoff      DDS.write(0x2048)
 #define dacstart    SYNC1 = 1;wait_ms(1);SYNC1 = 0;wait_ms(1)
 #define dacstop     SYNC1 = 1;wait_ms(1)
+#define mclkstart   mclk.period_us(0.1);mclk.pulsewidth_us(0.05);
+#define mclkstop    mclk = 0.0;
 
-//основные пины 
+ 
+//основные пины
 Serial serial(USBTX,USBRX);
 FastPWM mclk(PA_15);
 FastPWM sq(PB_7);
 SPI DDS(PC_12, NC, PC_10);
 SPI DAC(PC_12, NC, PC_10);
-DigitalOut SYNC1(PC_11);
-DigitalOut SYNC2(PD_2);
-
+DigitalOut SYNC1(PC_11);//amp dac
+DigitalOut SYNC2(PD_2);//dds
 // мультиплекс, ЦАП, кнопко
 
 AnalogIn analog_value(PC_4);
 DigitalIn button(PA_13); // проверка нажатой кнопки пауза
+DigitalIn test_button(USER_BUTTON);
+
+DigitalOut *P0,*P1,*P2,*P3;//Указатели на пины функции mux
+
+//пины управления мультиплексором выбора пояса
+DigitalOut IE0(PB_1);
+DigitalOut IE1(PB_15);
+DigitalOut IE2(PB_14);
+DigitalOut IE3(PB_13);
 
 //пины управления мультиплексорами генератора
-DigitalOut outA0(PC_5);
-DigitalOut outA1(PC_6);
-DigitalOut outA2(PC_8);
-DigitalOut outA3(PC_9);
+DigitalOut II0(PA_0);
+DigitalOut II1(PA_1);
+DigitalOut II2(PA_4);
+DigitalOut II3(PB_0);
+
+//пины управления мультиплексорами земли
+DigitalOut IG0(PA_5);
+DigitalOut IG1(PA_6);
+DigitalOut IG2(PA_7);
+DigitalOut IG3(PB_6);
 
-//пины управления мультиплексорами измерительной части
-DigitalOut inA0(PA_5);
-DigitalOut inA1(PA_6);
-DigitalOut inA2(PA_7);
-DigitalOut inA3(PB_6);
-DigitalOut mux[10] = {(PC_7), (PA_9), (PA_8), (PB_10), (PB_4),(PB_5), (PB_3),(PA_10),(PB_14),(PB_13)}; //пины поясов
+//пины управления мультиплексорами 1 дифф канала 
+DigitalOut DI10(PC_7);
+DigitalOut DI11(PA_9);
+DigitalOut DI12(PA_8);
+DigitalOut DI13(PB_10);
+
+//пины управления мультиплексорами 2 дифф канала  
+DigitalOut DI20(PB_4);
+DigitalOut DI21(PB_5);
+DigitalOut DI22(PB_3);
+DigitalOut DI23(PA_10);
+
+//пины управления КУ  
+DigitalOut AA0(PC_0);
+DigitalOut AA1(PC_1);
 
-int mg;//переменная поясов
-int j;//мультиплексор генератора
-int k;//мультиплексор измерительной части
-float mdata[2080];
-int md;
-int p;
+//отруб ненужных каналов АЦП
+BusOut adzero(PC_2,PC_3,PC_5);
+
+//управление мультиплексорами
+void mux_group();
+int IE;
+int j; //inject I
+int k; //measure I
+
+void mux();//универсальная процедура выбора канала
+int P;//канал в mux 
 
-int muxout(int j);
-int muxin(int k);
-int mux_init();
-int channel();
-int mux_group();
-int button_check();
+void emux();// выбор пояса
+void emux_init();//выключение всех поясов
+void imux(); //выбор инжектирующего электрода
+void igmux();//выбор земли
+void DI1mux();//выбор первого  измерительного электрода
+void DI2mux();//выбор второго измерительного электрода
 
-char key[] = "5";
+//измерение 
+void preamp();
+int PA;
+
+//связь с ПК
+void five();
+void four();
+char key4[] = "4";
+char key5[] = "5";
 char buffer[2];
 
-// переменные генератор-цап 
+// переменные генератор-цап
 int freqdata;
 float amp;
 int form;
-int sinus();
-int square();
-int triangle();
-int adc_read();
-int request();
-int rasputte();
-int adc_read();
+void freq();
+void freqsq();
+void sinus();
+void square();
+void triangle();
+void adc_read();
+void request();
+void rasputte();
+void channel();
+int II; int IG; int DI1; int DI2;
+
+void measure();
+void ranging();
+int sign;
+int range;
+
+void swap();
+int diff;
+
+int ymax;
+void adc_read();
+uint16_t y[40];
+uint16_t x[40];
+int yp;
+float yprint[256];
+
+//секция тестирования
+void ctest();
+int ct;
+
+static ADC_HandleTypeDef AdcHandle;
+
+void adc_init() {
+        // we assume AnalogIn has configureed GPIO, we need ADC channel ?  
+        __ADC1_CLK_ENABLE();  // Enable ADC clock
+        // Configure ADC
+        AdcHandle.Instance = (ADC_TypeDef *)ADC1;
+        AdcHandle.Init.ClockPrescaler        = ADC_CLOCKPRESCALER_PCLK_DIV2;
+        AdcHandle.Init.Resolution            = ADC_RESOLUTION12b;
+        AdcHandle.Init.ScanConvMode          = DISABLE;
+        AdcHandle.Init.ContinuousConvMode    = ENABLE;    // DMA
+        AdcHandle.Init.DiscontinuousConvMode = DISABLE;
+        AdcHandle.Init.NbrOfDiscConversion   = 0;
+        AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
+        AdcHandle.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_CC1;
+        AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
+        AdcHandle.Init.NbrOfConversion       = 1;
+        AdcHandle.Init.DMAContinuousRequests = ENABLE;    // DMA
+        AdcHandle.Init.EOCSelection          = DISABLE;
+        HAL_ADC_Init(&AdcHandle);
+}
+
+static DMA_HandleTypeDef DMA_Handle;
+
+void dma_init() {
+    //  DMA init  ADC1 is DMA2 channel0 stream 0 or 4 use DMA2_Stream0  thd
+
+    __DMA2_CLK_ENABLE();
+    DMA_Handle.Instance = DMA2_Stream0;
+    DMA_Handle.State = HAL_DMA_STATE_READY;
+    HAL_DMA_DeInit(&DMA_Handle);
+    DMA_Handle.Init.Channel = DMA_CHANNEL_0;   
+    DMA_Handle.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    DMA_Handle.Init.PeriphInc = DMA_PINC_DISABLE;
+    DMA_Handle.Init.MemInc = DMA_MINC_ENABLE;
+    DMA_Handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
+    DMA_Handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
+    DMA_Handle.Init.Mode =  DMA_NORMAL;
+    DMA_Handle.Init.Priority = DMA_PRIORITY_HIGH;
+    DMA_Handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+    DMA_Handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
+    DMA_Handle.Init.MemBurst = DMA_MBURST_SINGLE;   
+    DMA_Handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
+    HAL_DMA_Init(&DMA_Handle);
+
+    __HAL_LINKDMA(&AdcHandle, DMA_Handle, DMA_Handle);
+}
+
+void adc_readn( uint16_t * data, uint32_t nelems) {
+    ADC_ChannelConfTypeDef sConfig;
+    sConfig.Channel = ADC_CHANNEL_14;  // PC_4
+    sConfig.Rank = 1;
+    sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
+    sConfig.Offset = 0;
+    HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
+    HAL_ADC_Start_DMA(&AdcHandle, (uint32_t *)data, nelems);
+    while (DMA_Handle.Instance->CR & DMA_SxCR_EN);   // spin
+    HAL_ADC_Stop(&AdcHandle);
+}
+
+void button_check();
+
+Timer t;
+
+int main()
+{
+    adzero = 0;
+    serial.baud(256000);
+    while(true) {
+        emux_init();
+        IE = 0;emux();IG = 0; II = 0;igmux();imux();
+        yp=0;
+        memset(yprint,0,sizeof yprint);
+        ddsstop;dacstop;DDS.format(16,2);
+        ddsstart; DDS.write(0x21C2);
+        ddsstart; DDS.write(0x20C2);
+        ddsstop; // инициализация dds
+        four();
+        /*ctest();
+        if (ct == 1) {continue;}
+         else {
+            printf("7\r\n");
+            five();};*/
+        request();
+        rasputte();
+        mux_group();
+        form = 1; freqdata = 1; amp = 0.1;sinus();
+        sq=0.0;
+       for (yp = 0; yp < 256; yp++) {printf("%.5g\r\n",yprint[yp]);};
+       memset(yprint,0,sizeof yprint);
+    }
+
+}
+
+
+void ctest()
+{
+    ct = 0;
+    int mg = 0;
+    int mj = 0;
+    sign=1; PA=1; preamp();
+    form = 1; freqdata = 50; amp = 1;
+    sinus();
+    for (mg = 0; mg < 10; mg++) {
+        IE = mg; emux();
+        for (mj = 0; mj < 15; mj+=2) {
+            II = mj; IG = mj+1; DI1 = mj; //DI2 = mj+1;
+            igmux(); imux(); DI1mux(); //DI2mux();
+            if ((analog_value.read_u16() > 2500) &&(test_button.read() == 1))
+            {printf("%i,%i\r\n",mg+1, mj+1); printf("%i,%i\r\n",mg+1, mj+2);ct = 1;}
+    }
+    
+}
+mclkstop;
+}
+
 
-int main() {
-      while(true) {
-        md=0;
-        ddsstop;
-        dacstop;
-        DDS.format(16,2);
-        ddsstart; DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);ddsstop; // инициализация dds 
-        //  ddsstart; ddsreset; ddsstop;
-        
-      do {
-         fflush (stdout);
-         scanf ("%2s",buffer);
-      } while (strcmp (key,buffer) != 0);
-       fflush (stdout);
-       mclk.period_us(0.1);
-       mclk.pulsewidth_us(0.05);
-       request();
-       rasputte();
-       mux_group();
-       sq=0.0;//выключение прямоугольника после ???
-       for (p=0; p<=md; p++){printf(" %.5g\r\n",mdata[p]);}
-    //ddsstart;
-    //ddsoff;
-    //ddsstop;
+void four()
+{
+    do {
+        fflush (stdout);
+        scanf ("%2s",buffer);
+    } while (strcmp (key4,buffer) != 0);
+    fflush (stdout);
+ }
+ 
+ void five()
+{
+    do {
+        fflush (stdout);
+        scanf ("%2s",buffer);
+    } while (strcmp (key5,buffer) != 0);
+    fflush (stdout);
+}
+
+void amplitude ()
+{
+    uint16_t ampt;
+    uint16_t ampReg;
+    ampt = uint16_t(819.2*(5.0-amp));
+    ampReg = uint16_t(ampt & 0xFFF);
+    DAC.format(16,1);
+    dacstart;
+    DAC.write(ampReg*4);
+    dacstop;
+    }
+
+void freq ()
+{
+    ddsstart;
+    float FreqReg;
+    uint32_t ftemp;
+    uint16_t Uptemp, Lowtemp;
+    FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
+    ftemp = (uint32_t)FreqReg;
+    Lowtemp = (uint16_t)(ftemp & 0x3FFF);
+    Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
+    DDS.write(Lowtemp + 0x4000);
+    ddsstart;
+    DDS.write(Uptemp + 0x4000);
+    ddsstop;
+}
+
+void freqsq ()
+{
+    float period;
+    period = 1000/freqdata;
+    sq.period_us(period);
+    sq.pulsewidth_us(period/2);
+}
+
+void sinus()
+{
+    ddsstart;
+    sinsoft;
+    freq();
+    ddsstop;
+    amplitude();
+    mclkstart;
+    }
+
+void square()
+{
+    freqsq();
+    ddsstart;DDS.write(0x210A);ddsstart;DDS.write(0x4000);
+    ddsstart;DDS.write(0x4000);ddsstart;DDS.write(0x8000);
+    ddsstart;DDS.write(0x8000);ddsstart;DDS.write(0xCC00);
+    ddsstart;DDS.write(0xE400);ddsstart;DDS.write(0x220A);
+    ddsstop;
+    amplitude();
+    mclkstart;
+}
+
+void triangle()
+{
+    ddsstart;
+    trisoft;
+    ddsstart;
+    freq();
+    ddsstop;
+    amplitude();
+    mclkstart;
+}
+
+void request()
+{
+   // printf("forma, chastota\r\n");
+    fflush(stdout);
+    scanf("%i,%i,%f",&form,&freqdata,&amp);
+    fflush(stdout);
+    }
+
+void rasputte()
+{
+    switch(form) {
+        case (1):
+            sinus();
+            break;
+        case (2):
+            square();
+            break;
+        case (3):
+            triangle();
+            break;
+    }
+    }
+    
+void emux_init()
+{
+   P = 15; P0=&IE0; P1=&IE1; P2=&IE2; P3=&IE3; 
+   mux();
+}
+
+void emux()
+{
+   P = IE; P0=&IE0; P1=&IE1; P2=&IE2; P3=&IE3; 
+   mux();
+}
+
+void imux()
+{
+   P = II; P0=&II0; P1=&II1; P2=&II2; P3=&II3; 
+   mux();
+}
+
+void igmux()
+{
+   P = IG; P0=&IG0; P1=&IG1; P2=&IG2; P3=&IG3; 
+   mux();
+}
+
+void DI1mux()
+{
+   P = DI1; P0=&DI10; P1=&DI11; P2=&DI12; P3=&DI13; 
+   mux();
+}
+
+void DI2mux()
+{
+   P = DI2; P0=&DI20; P1=&DI21; P2=&DI22; P3=&DI23; 
+   mux();
+}
+
+
+void mux()
+{
+    switch (P) {
+        case (0):  {*P0=0; *P1=0; *P2=0; *P3=0;} break;
+        case (1):  {*P0=1; *P1=0; *P2=0; *P3=0;} break;
+        case (2):  {*P0=0; *P1=1; *P2=0; *P3=0;} break;
+        case (3):  {*P0=1; *P1=1; *P2=0; *P3=0;} break;
+        case (4):  {*P0=0; *P1=0; *P2=1; *P3=0;} break;
+        case (5):  {*P0=1; *P1=0; *P2=1; *P3=0;} break;
+        case (6):  {*P0=0; *P1=1; *P2=1; *P3=0;} break;
+        case (7):  {*P0=1; *P1=1; *P2=1; *P3=0;} break;
+        case (8):  {*P0=0; *P1=0; *P2=0; *P3=1;} break;
+        case (9):  {*P0=1; *P1=0; *P2=0; *P3=1;} break;
+        case (10): {*P0=0; *P1=1; *P2=0; *P3=1;} break;
+        case (11): {*P0=1; *P1=1; *P2=0; *P3=1;} break;
+        case (12): {*P0=0; *P1=0; *P2=1; *P3=1;} break;
+        case (13): {*P0=1; *P1=0; *P2=1; *P3=1;} break;
+        case (14): {*P0=0; *P1=1; *P2=1; *P3=1;} break;
+        case (15): {*P0=1; *P1=1; *P2=1; *P3=1;} break;
     }
 }
 
-    int amplitude () {
-        uint16_t ampt;
-        uint16_t ampReg;
-        ampt = uint16_t(819.2*(5-amp));
-        ampReg = uint16_t(ampt & 0xFFF);
-        DAC.format(16,1);
-        dacstart;
-        DAC.write(ampReg*4);
-        dacstop;
-        return 0;
-    }
-
-    int freq () {
-        ddsstart;
-        float FreqReg;
-        uint32_t ftemp;
-        uint16_t Uptemp, Lowtemp;
-        FreqReg = 26.8435456 * (uint32_t)freqdata*1000;
-        ftemp = (uint32_t)FreqReg;
-        Lowtemp = (uint16_t)(ftemp & 0x3FFF);
-        Uptemp = (uint16_t)((ftemp/16384) & 0x3FFF);
-        DDS.write(Lowtemp + 0x4000);ddsstart;
-        DDS.write(Uptemp + 0x4000);
-        ddsstop;
-        return 0;
-    }
-
-    int freqsq () {
-        float period;
-        period = 1000/freqdata;
-        sq.period_us(period);
-        sq.pulsewidth_us(period/2);
-        return 0;
-    }
-
-    int sinus() {
-        ddsstart;
-        sinsoft;
-        freq();
-        ddsstop;
-        amplitude();
-        return 0;
-    }
-
-    int square() {
-        freqsq();
-        ddsstart;DDS.write(0x210A);
-        ddsstart;DDS.write(0x4000);
-        ddsstart;DDS.write(0x4000);
-        ddsstart;DDS.write(0x8000);
-        ddsstart;DDS.write(0x8000);
-        ddsstart;DDS.write(0xCC00);
-        ddsstart;DDS.write(0xE400);
-        ddsstart;DDS.write(0x220A);
-        ddsstop;
-        amplitude();
-        return 0;
-    }
-
-    int triangle() {
-        ddsstart;
-        trisoft;
-        ddsstart;
-        freq();
-        ddsstop;
-        amplitude();
-        return 0;
-    }
-    
-    
-int adc_read()
+void preamp()
 {
-    float y=0;
-    float ymax=0;
-    int ar = 0;
-    int qr = 200000/freqdata;
-    for (ar=0; ar<=qr; ar++) {
-        y =  analog_value.read();
-        if (ymax < y) {
-            ymax = y;
-        }
+    switch (PA)
+    {
+        case(1):    {AA0=0;AA1=0;} break;
+        case(10):   {AA0=0;AA1=1;} break;
+        case(100):  {AA0=1;AA1=0;} break;
+        case(1000): {AA0=1;AA1=1;} break;
     }
-    mdata[md] = ymax*3.3;
-    md++;
-    return 0;
-}   
-
-
-int request()
-{
-    fflush(stdout);
-    scanf("%i,%i,%f",&form,&freqdata,&amp);
-    printf("%i",8); // спросить Сашу
-    fflush(stdout);
-    return 0;
-}
-
-int rasputte() 
-    {
-        switch(form) {
-            case (1):
-                sinus();
-                break;
-            case (2):
-                square();
-                break;
-            case (3):
-                triangle();
-                break;
-        }
-        return 0;
-    }
-
-    int muxout(int j)
-    {
-        switch (j) {
-            case (0):{outA0=0; outA1=0; outA2=0; outA3=0;} break;
-            case (1):{outA0=1; outA1=0; outA2=0; outA3=0;}  break;
-            case (2):{outA0=0; outA1=1; outA2=0; outA3=0;}  break;
-            case (3):{outA0=1; outA1=1; outA2=0; outA3=0;}  break;
-            case (4):{outA0=0; outA1=0; outA2=1; outA3=0;}  break;
-            case (5):{outA0=1; outA1=0; outA2=1; outA3=0;}  break;
-            case (6):{outA0=0; outA1=1; outA2=1; outA3=0;}  break;
-            case (7):{outA0=1; outA1=1; outA2=1; outA3=0;}  break;
-            case (8):{outA0=0; outA1=0; outA2=0; outA3=1;}  break;
-            case (9):{outA0=1; outA1=0; outA2=0; outA3=1;}  break;
-            case (10):{outA0=0; outA1=1; outA2=0; outA3=1;}  break;
-            case (11):{outA0=1; outA1=1; outA2=0; outA3=1;}  break;
-            case (12):{outA0=0; outA1=0; outA2=1; outA3=1;}  break;
-            case (13):{outA0=1; outA1=0; outA2=1; outA3=1;}  break;
-            case (14):{outA0=0; outA1=1; outA2=1; outA3=1;}  break;
-            case (15):{outA0=1; outA1=1; outA2=1; outA3=1;}  break;
-        }
-        return 0;
-    }
-
-    int muxin(int k)
-    {
-        switch(k) {
-            case (0):{inA0=0; inA1=0; inA2=0; inA3=0;}  break;
-            case (1):{inA0=1; inA1=0; inA2=0; inA3=0;}  break;
-            case (2):{inA0=0; inA1=1; inA2=0; inA3=0;}  break;
-            case (3):{inA0=1; inA1=1; inA2=0; inA3=0;}  break;
-            case (4):{inA0=0; inA1=0; inA2=1; inA3=0;}  break;
-            case (5):{inA0=1; inA1=0; inA2=1; inA3=0;}  break;
-            case (6):{inA0=0; inA1=1; inA2=1; inA3=0;}  break;
-            case (7):{inA0=1; inA1=1; inA2=1; inA3=0;}  break;
-            case (8):{inA0=0; inA1=0; inA2=0; inA3=1;}  break;
-            case (9):{inA0=1; inA1=0; inA2=0; inA3=1;}  break;
-            case (10):{inA0=0; inA1=1; inA2=0; inA3=1;}  break;
-            case (11):{inA0=1; inA1=1; inA2=0; inA3=1;}  break;
-            case (12):{inA0=0; inA1=0; inA2=1; inA3=1;}  break;
-            case (13):{inA0=1; inA1=0; inA2=1; inA3=1;}  break;
-            case (14):{inA0=0; inA1=1; inA2=1; inA3=1;}  break;
-            case (15):{inA0=1; inA1=1; inA2=1; inA3=1;}  break;
-        }
-        return 0;
-    }
-
-    int channel()
-{
-    int j = 0;
-    int k = 0;
-    for (j = 0; j<=15; j++) {
-        button_check();
-        muxout(j);
-        for (k = 0; k<=15; k++) {
-            if ((k==j)||(j==(k+1))||(j==(k-1))||((k==0)&&(j==15))||((k==15)&&(j==0))) {
-                continue;
-            } else {
-                muxin(k);
-                adc_read();
-            }
-        }
-    }
-    return 0;
 }
 
 
-int mux_init()
+void mux_group()
+{
+        for (IE = 0; IE < 1; IE++) {
+        emux();
+        PA=1; range=1;preamp();
+        wait_ms(20);
+        channel();
+    }
+    mclkstop;
+}
+
+void channel()
 {
-    int mi = 0;
-        for (mi = 0; mi < 10; mi++) {
-            mux[mi] = 1;
+    j = 0;//inject
+    k = 0;//measure
+   for (j = 0; j<16; j++) {
+        //button_check();
+        if (j==15) {IG = j; II = 0;} else {IG = j; II = j+1;}
+        DI2=j;igmux(); imux();DI2mux();
+        for (k = 0; k<16; k++) {
+                DI1 = k; 
+                DI1mux(); 
+                wait_us(50);
+                measure();
+              //  printf("\r\n");
+             }
         }
-            return 0;
-
+        
+    /*    for (j = 0; j<16; j++) {
+        //button_check();
+        if (j==15) {IG = j; II = 0;} else {IG = j; II = j+1;}
+        DI1 = II;igmux(); imux();DI1mux();
+        
+               wait_ms(2);
+               
+                measure();}*/
+   /*     while(1){
+ printf("%s\r\n", "vvod II inJect ");
+    fflush(stdout);    
+    scanf("%i",&II);//инжект
+    printf("%s\r\n", "vvod IG inJect ");
+    fflush(stdout);    
+    scanf("%i",&IG);//инжектIG
+    igmux(); imux();
+        //button_check();
+    printf("%s\r\n", "vvod DI1");
+    fflush(stdout);    
+    scanf("%i",&DI1);//инжект
+    DI1mux(); measure();}*/
+        
     }
 
-int mux_group()
-    {   
-        //mux_init();
-        for (mg = 0; mg < 10; mg++) {
-        if (mg > 0){mux[mg-1] = 1;} //Выключить предыдущий пояс
-        mux[mg] = 0;
-        channel();
-        mux_init();
-    }
-    return 0;
+
+void measure()
+{
+    ranging();
+    adc_read();
+}
+
+void ranging()//определение коэффициента усиления и знака
+{
+    int s_ok=0;
+    //IG = 0; II = 1;DI1 = II;DI2=IG;igmux();imux();DI1mux();DI2mux();wait_ms(10);
+    PA=1; preamp();
+    while(s_ok==0){
+    adc_init();
+    dma_init();
+    memset(x,0,sizeof x);
+    t.reset();
+    t.start();
+    adc_readn(x,40);
+    t.stop(); 
+    printf("1000r useconds %i\r\n", t.read_us());
+    sort(x,x + 40);
+    ymax = (x[38]);
+        if (ymax <= 0) {} 
+        else if (((ymax >= 2049)&&(ymax < 2050))) {range=1000;s_ok=1;} 
+        else if (((ymax >= 2050)&&(ymax < 2068))) {range=100;s_ok=1;} 
+        else if(((ymax >= 2068)&&(ymax < 2248))) {range=10;s_ok=1;} 
+        else {range=1;s_ok=1;};
+}
+PA = range; preamp();
+memset(x,0,sizeof x);
 }
 
-int button_check()
-    {
-    if (button.read() == 1){
+void swap()
+{
+    int diff = DI1;
+    DI1 = DI2;
+    DI2 = diff;
+    DI1mux();
+    DI2mux();   
+}
+
+void adc_read()//измерение и вывод со всеми коэффициентами
+{
+    
+    
+    adc_init();
+    dma_init();
+    memset(y,0,sizeof y);
+    adc_readn(y,40);
+   // for (yp = 0; yp < 400; yp++) {printf("%i\r\n",y[yp]);};
+    sort(y,y + 40);
+    yprint[yp]=(float)(((y[39]-2048)*3.3*10)/(4096*range));yp++;
+    memset(y,0,sizeof y);
+
+}
+
+
+void button_check()
+{
+    if (button.read() == 1) {
         wait_ms(10);
-        if (button.read() == 1){
-        int amp1;
-        amp1 = amp;
-        amp = 0;
-        amplitude();
-        while (button.read() == 1);
-        amp = amp1;
-        amplitude();
+        if (button.read() == 1) {
+            int amp1;
+            amp1 = amp;
+            amp = 0.1;
+            amplitude();
+            while (button.read() == 1);
+            amp = amp1;
+            amplitude();
         }
-        }
-            return 0;
     }
+}
\ No newline at end of file