Ivan Scherbakov
/
last_2_1_0_interchange_208_byte
AAAAAAAAAAAAAAAAAAA
Diff: main.cpp
- Revision:
- 16:41e558cc18f1
- Parent:
- 15:6c8afb8fa44d
- Child:
- 17:e2f843372f7b
diff -r 6c8afb8fa44d -r 41e558cc18f1 main.cpp --- 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); }