Dependencies:   mbed FastPWM

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", &amp);
+        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;
+    }
+