AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

Revision:
16:41e558cc18f1
Parent:
15:6c8afb8fa44d
Child:
17:e2f843372f7b
--- a/main.cpp	Mon Apr 03 15:00:03 2017 +0000
+++ b/main.cpp	Wed Jun 07 08:44:26 2017 +0000
@@ -13,7 +13,7 @@
 #define dacstop     SYNC1 = 1;wait_us(10)
 #define mclkstart   mclk.period_us(0.1);mclk.pulsewidth_us(0.05);
 #define mclkstop    mclk = 0.0;
-
+#define i2g         IE = 0;emux();IG = 0; II = 0;igmux();imux();
  
 //основные пины
 Serial serial(USBTX,USBRX);
@@ -32,6 +32,7 @@
 DigitalOut *P0,*P1,*P2,*P3;//Указатели на пины функции mux
 
 //пины управления мультиплексором выбора пояса
+DigitalOut IEN(PC_8);
 DigitalOut IE0(PB_1);
 DigitalOut IE1(PB_15);
 DigitalOut IE2(PB_14);
@@ -116,6 +117,7 @@
 
 void measure();
 void ranging();
+void ranging_1();
 int sign;
 int range;
 
@@ -127,6 +129,7 @@
 
 int ymax;
 void adc_read();
+void adc_read1();
 int yp;
 int exf;
 
@@ -200,9 +203,10 @@
 Timer t;
 
 int main()
-{
+{   
+    IEN = 1;
     adzero = 0;
-    serial.baud(256000);
+    serial.baud(230400);
         ddsstop;dacstop;
         DDS.frequency(400000);
         DDS.format(16,2);
@@ -214,14 +218,15 @@
         //printf("10000000000000000\r\n");
     while(true) {
         emux_init();
-        IE = 0;emux();IG = 0; II = 0;igmux();imux();
+        i2g;
         memset(yprint,0,sizeof yprint);
         exf = 0;
-        belt_request();       
+        belt_request();  
+        if (belt > 10) {continue;}     
         ctest();
         if (ct == 1) {continue;}
         else {wait_us(10); printf("7\r\n"); fflush (stdout); wait_us(100);};
-        //ddsreset;
+        ddsreset;
         request();
         while(true){
         t.reset();
@@ -229,6 +234,7 @@
         rasputte();
         mux_group();
         t.stop(); 
+        i2g;
         //fout();
         //////////////////////////
         for (yp = 0; yp < (256*belt); yp++) {printf("%.6f\r\n",yprint[yp]);};
@@ -292,13 +298,13 @@
     int mg = 0;
     int mj = 0;
     int aread=0;
-    sign=1; PA=1; preamp();
+    sign=1; PA=1; range=1; preamp();
     form = 1; freqdata = 50; amp = 5;
-    sinus();
+    sinus();wait_ms(10);
     for (mg = 0; mg < belt; mg++) {
         IE = mg; emux();
         for (mj = 0; mj < 15; mj+=2) {
-            II = mj; IG = mj+1; DI1 = mj; DI2 = mj+1;
+            IG = mj; II = mj+1; DI1 = II; DI2 = IG;
             igmux(); imux(); DI1mux(); DI2mux();
             int xa = (int)5000/freqdata;
             int xaa = (int)xa/5;
@@ -309,12 +315,12 @@
             adc_readn(x,xa);
             sort(x+xaa,x + xa);
             aread = (int)x[xa-1];
-            if ((aread > 4000) &&(test_button.read() == 1))
+            if ((aread > 3500) &&(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;
+    //mclkstop;
      }
 
 
@@ -511,7 +517,7 @@
         for (IE = 0; IE < belt; IE++) {
         emux();
         //wait_ms(20);
-        PA=10; range=10;preamp();
+        //PA=100; range=100;preamp();
         channel();
     }
     //mclkstop;
@@ -524,7 +530,7 @@
    for (j = 0; j<16; j++) {
         //button_check();
         if (j==15) {IG = j; II = 0;} else {IG = j; II = j+1;}
-        igmux(); imux();
+        igmux(); imux(); //DI1=IG; DI2=IG;  DI1mux(); DI2mux();
        //if ((j==0)&&(IE==0)){wait_ms(1);}
         for (k = 0; k<16; k++) {
                 if (k==15) {DI1 = k;DI2 = 0;} else {DI1 = k; DI2 = k+1; }
@@ -564,8 +570,25 @@
 
 void measure()
 {
-    ranging();
-    adc_read();
+   // ranging_1();
+    adc_read1();
+}
+
+void ranging_1()//определение коэффициента усиления и знака
+{
+    int xa = (int)4000/freqdata;
+  //  if (xa < 20){xa=20;}
+   // else if (xa > 200){xa=200;};
+    uint16_t x[xa];
+    int s_ok=0;
+    PA=100; range=100;preamp();
+    adc_init();
+    dma_init();
+    adc_readn(x,xa);
+    sort(x,x + xa);
+    if ((x[xa-1] > 3950)||(x[0] < 50)) {range=10;wait_us(10);} 
+    PA = range; preamp();
+    memset(x,0,sizeof x);
 }
 
 void ranging()//определение коэффициента усиления и знака
@@ -577,7 +600,7 @@
     uint16_t x[xa];
     int s_ok=0;
     //IG = 0; II = 1;DI1 = II;DI2=IG;igmux();imux();DI1mux();DI2mux();wait_ms(10);
-    PA=10; range=10;preamp();
+    PA=100; range=100;preamp();
     //while(s_ok==0){
     adc_init();
     dma_init();
@@ -589,10 +612,10 @@
      //printf("sorted\r\n");
     //for (s_ok = 0; s_ok < xa; s_ok++) {printf("%i\r\n",x[s_ok]);};
     ymax = (int)((x[xa-1]+x[xa-2])-(x[xaa]+x[xaa+1]))/2;
-    if (ymax/PA <= 0.4) {range=1000;s_ok=1;wait_us(20);} 
-        else if (((ymax/PA > 0.4)&&(ymax/PA <= 4))) {range=100;s_ok=1;wait_us(10);} 
-        else if (((ymax/PA > 4)&&(ymax/PA <= 40))) {range=10;s_ok=1;wait_us(10);} 
-        else if (ymax/PA > 40) {range=1;s_ok=1;wait_us(10);};
+    if (ymax/PA <= 0.04) {range=1000;s_ok=1;wait_us(20);} 
+        else if (((ymax/PA > 0.04)&&(ymax/PA <= 0.4))) {range=100;s_ok=1;wait_us(10);} 
+        else if (((ymax/PA > 0.4)&&(ymax/PA <= 4))) {range=10;s_ok=1;wait_us(10);} 
+        else if (ymax/PA > 4) {range=1;s_ok=1;wait_us(10);};
         
       /*  if (ymax <= 3) {range=1000;s_ok=1;wait_us(50);} 
         else if (((ymax/PA > 3)&&(ymax <= 35))) {range=100;s_ok=1;wait_us(50);} 
@@ -615,11 +638,11 @@
 
 void adc_read()//измерение и вывод со всеми коэффициентами
 {
-    int ya = (int)10000/freqdata;
+    int ya = (int)5000/freqdata;
     float ym = 0;
-    if (ya < 200){ya=200;}
-    else if (ya > 1000){ya=1000;};
-    int yaa = (int)ya/3;
+    if (ya < 50){ya=50;}
+    else if (ya > 300){ya=300;};
+    int yaa = (int)ya/20;
     uint16_t y[ya];
     adc_init();
     dma_init();
@@ -630,7 +653,31 @@
     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;
     yprint[yp]=(((ym)*3.3*10)/(4096*range));yp++;
     memset(y,0,sizeof y);
+}
 
+void adc_read1()//измерение и вывод со всеми коэффициентами
+{
+    int s_ok = 1;
+    PA=100; range=100;preamp();
+     float ym = 0;
+     int ya = (int)10000/freqdata;
+    if (ya < 50){ya=50;}
+    else if (ya > 500){ya=500;};
+    int yaa = (int)ya/20;
+    uint16_t y[ya];
+    while (s_ok == 1)
+   {
+    adc_init();
+    dma_init();
+    memset(y,0,sizeof y);
+    adc_readn(y,ya);
+    sort(y+yaa,y + ya);
+    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;};
+    PA = range; preamp();
+   }
+    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;
+    yprint[yp]=(((ym)*3.3*10)/(4096*range));yp++;
+    memset(y,0,sizeof y);
 }