Ivan Scherbakov
/
last_2_1_0_interchange_208_byte
Diff: main.cpp
- Revision:
- 0:957268dd05c4
- Child:
- 1:8b6ad9d92745
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Jan 09 15:32:27 2016 +0000 @@ -0,0 +1,227 @@ +#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) + + +//пины управления мультиплексорами генератора +/*DigitalOut outA0(PA_3); +DigitalOut outA1(PA_2); +DigitalOut outA2(PA_10); +DigitalOut outA3(PB_3); +DigitalOut outE1(PB_5); +DigitalOut outE2(PB_4); +DigitalOut outE3(PB_10); +DigitalOut outE4(PA_8); +DigitalOut outE5(PA_9); +DigitalOut outE6(PC_7); +DigitalOut outE7(PB_6); +DigitalOut outE8(PA_7); +DigitalOut outE9(PA_6); +DigitalOut outE10(PA_5); +//пины управления мультиплексорами измерительной части +DigitalOut inA0(PB_9); +DigitalOut inA1(PB_8); +DigitalOut inA2(PC_9); +DigitalOut inA3(PC_8); +DigitalOut inE1(PC_6); +DigitalOut inE2(PC_5); +DigitalOut inE3(PA_12); +DigitalOut inE4(PA_11); +DigitalOut inE5(PB_12); +DigitalOut inE6(PB_2); +DigitalOut inE7(PB_1); +DigitalOut inE8(PB_15); +DigitalOut inE9(PB_14); +DigitalOut inE10(PB_13);*/ +AnalogIn analog_value(PC_4); +Serial serial(USBTX,USBRX); +FastPWM mclk(PA_15); +FastPWM sq(PB_7); +SPI DAC(PC_12, NC, PC_10); +SPI DDS(PC_12, NC, PC_10); +DigitalOut SYNC1(PC_11); +DigitalOut SYNC2(PD_2); + +//DigitalOut mux_out[10] = {(PB_5), (PB_4), (PB_10), (PA_8), (PA_9),(PC_7), (PB_6),(PA_7),(PA_6),(PA_5)}; +//DigitalOut mux_in[10] = {(PC_6), (PC_5), (PA_12), (PA_11), (PB_12),(PB_2), (PB_1),(PB_15), (PB_14),(PB_13)}; + +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() { + serial.printf("start \r\n"); + /*outE1=0; + inE1=0; + outE2=outE3=outE4=outE5=outE6=outE7=outE8=outE9=outE10=0; + inE2=inE3=inE4=inE5=inE6=inE7=inE8=inE9=inE10=0; + outA0=0;outA1=0;outA2=0;outA3=0; + inA0=1;inA1=0;inA2=0;inA3=0; */ + ddsstop; + dacstop; + DDS.format(16,2); + // DAC.format(16,1); + // DDS.frequency(1000); + ddsstart; + DDS.write(0x21C2); ddsstart; DDS.write(0x20C2); + ddsstop; + /* ddsstart; + ddsreset; + ddsstop;*/ + mclk.period_us(0.1); + mclk.pulsewidth_us(0.05); + request(); + serial.printf("finish"); + serial.printf("\r\n"); + rasputte(); + adc_read(); + serial.printf("begin"); + serial.printf("\r\n"); + serial.printf("%f\r\n", mdata); + serial.printf("end"); + serial.printf("\r\n"); + //ddsstart; + //ddsoff; + //ddsstop; + } + + int amplitude () { + uint16_t ampt; + uint16_t ampReg; + ampt = uint16_t(819.2*amp); + ampReg = uint16_t(ampt & 0xFFF); + DAC.write(ampReg*4); + serial.printf("amp %X \r\n", ampReg*4); + 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); + serial.printf("uptemp %X \r\n", Uptemp + 0x4000); + serial.printf("lowtemp %X \r\n", Lowtemp + 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() { + ddsstart; + tripin; + ddsstop; + amplitude(); + freqsq(); + return 0; + } + + int triangle() { + ddsstart; + trisoft; + ddsstart; + freq(); + ddsstop; + amplitude(); + return 0; + } +int adc_read() +{ + float y=0; + float ymax=0; + int ar = 0; + for (ar=0; ar<=200000; ar++) { + y = analog_value.read(); + if (ymax < y) { + ymax = y; + } + } + mdata = (ymax*3300/*amp*/); + return 0; +} + + +int request() +{ + while(1) { + serial.printf("Vyberite formu signala :1 - sinus, 2 - pryamougolniy, 3 - treugol'nyi \r\n"); + serial.scanf("%i", &form); + serial.printf(" %i\n",form); + if (form >= 1 && form<= 3) break; + else form = 1; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n"); + + } + + while(1) { + serial.printf("Vvedite chastotu toka: 20..200kHz \r\n"); + serial.scanf("%i", &freqdata); + serial.printf(" %i\n",freqdata); + if (freqdata >= 20 && freqdata<= 200) break; + else freqdata=20; serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n"); + } + + while(1) { + serial.printf("Vvedite amplitudu toka s shagom 0.1 mA: 1..5mA \r\n"); + serial.scanf("%f", &); + serial.printf(" %f\n",amp); + if (amp >= 0 && amp<= 5.0) break; + else amp=1.0;serial.printf("Nepravil'nyi vvod, vvedite ewe raz \r\n"); + +} +return 0; +} + int rasputte() + { + switch(form) { + case (1): + sinus(); + break; + case (2): + square(); + break; + case (3): + triangle(); + break; + } + return 0; + } +