AAAAAAAAAAAAAAAAAAA

Dependencies:   mbed FastPWM

main.cpp

Committer:
vanenzo
Date:
2016-02-11
Revision:
4:2a0242bfbe0c
Parent:
3:59a57634f1fa
Child:
5:dcaed6b6b3cb

File content as of revision 4:2a0242bfbe0c:

#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 DDS(PC_12, NC, PC_10);
SPI DAC(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)};

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) {
           
        
      //  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);
        ddsstart;  
  DDS.write(0x21C2); ddsstart; DDS.write(0x20C2);
   ddsstop;
    /*    ddsstart;
        ddsreset;
        ddsstop;*/
        
      do {
         fflush (stdout);
         scanf ("%2s",buffer);
      } while (strcmp (key,buffer) != 0);
       fflush (stdout);
       //printf("%i",7); 
        
        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*(5-amp));
        ampReg = uint16_t(ampt & 0xFFF);
        DAC.format(16,1);
        dacstart;
        DAC.write(ampReg*4);
        dacstop;
       // 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() {
        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;
    for (ar=0; ar<=200000; ar++) {
        y =  analog_value.read();
        if (ymax < y) {
            ymax = y;
        }
    }
    mdata = (ymax*3300/*amp*/);
    return 0;
}


int request()
{
             fflush(stdout);
         scanf("%i,%i,%f",&form,&freqdata,&amp);
            for(int i = 0;i < 2082;i++){
                printf("%i",i);
            }


        printf("%i",8);
        fflush(stdout);
    
/*       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");
         }*/
//         for (int i =0; i < 1000; i++){
 //           serial.putc(i);
 //           printf("%i    NO: "+i);    
 //           printf("\r\n");
 //       }
         

//        
//        serial.printf("\r\n %i\r\n",form);
//             serial.printf("\r\n %i\r\n",freqdata);
//              serial.printf("\r\n %f\r\n",amp);
                
      

         
        

return 0;
}
    int rasputte() 
    {
        switch(form) {
            case (1):
                sinus();
                break;
            case (2):
                square();
                break;
            case (3):
                triangle();
                break;
        }
        return 0;
    }