
AAAAAAAAAAAAAAAAAAA
main.cpp
- Committer:
- vanenzo
- Date:
- 2016-02-11
- Revision:
- 6:a24da8bee018
- Parent:
- 5:dcaed6b6b3cb
- Child:
- 7:299b41477dfb
File content as of revision 6:a24da8bee018:
#include "mbed.h" #include "FastPWM.h" #define ddsstart SYNC2 = 1;wait_ms(1);SYNC2 = 0;wait_ms(1) #define ddsstop SYNC2 = 1;wait_ms(1) #define ddsreset DDS.write(0x21C0) #define sinsoft DDS.write(0x2000) #define trisoft DDS.write(0x2002) #define tripin DDS.write(0x2202) #define ddsoff DDS.write(0x2048) #define dacstart SYNC1 = 1;wait_ms(1);SYNC1 = 0;wait_ms(1) #define dacstop SYNC1 = 1;wait_ms(1) //основные пины 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); // мультиплекс, ЦАП, кнопко AnalogIn analog_value(PC_4); DigitalIn button(PA_13); // проверка нажатой кнопки пауза //пины управления мультиплексорами генератора DigitalOut outA0(PC_5); DigitalOut outA1(PC_6); DigitalOut outA2(PC_8); DigitalOut outA3(PC_9); //пины управления мультиплексорами измерительной части 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)}; //пины поясов int mg;//переменная поясов int j;//мультиплексор генератора int k;//мультиплексор измерительной части int muxout(int j); int muxin(int k); int mux_init(); int channel(); int mux_group(); int button_check(); char key[] = "5"; char buffer[2]; // переменные генератор-цап int freqdata; float amp; int form; float mdata; int sinus(); int square(); int triangle(); int adc_read(); int request(); int rasputte(); int adc_read(); int main() { while(true) { 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;//выключение прямоугольника после ??? //ddsstart; //ddsoff; //ddsstop; } } 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() { 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; } } printf(" %.5g\r\n",ymax*3.3); return 0; } int request() { fflush(stdout); scanf("%i,%i,%f",&form,&freqdata,&); 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() { int mi = 0; for (mi = 0; mi < 10; mi++) { mux[mi] = 1; } return 0; } 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; } int 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(); } } return 0; }