Oscilloscope 20Hz20kHZ Labview kl25z

Dependencies:   ComparatorIn mbed

main.cpp

Committer:
inuD
Date:
2016-12-19
Revision:
0:b04378e035d8

File content as of revision 0:b04378e035d8:

#include "mbed.h"
#include "ComparatorIn.h"

#define MAX_SAMPLERATE 50000
#define Min_FREQ 20
#define MAX_FREQ 20000
#define MaxFrdmVAnalogRef 3.3
#define ThresholdOut 1000

Serial pc(USBTX,USBRX);

double AutoTrig, ValTrig, RiseOrFall, nWave;              //  1-0 for autotrig, value of trigger, on rise or fall of WaveFront
double AutoSr, ValSr;                    //  1-0 for autoSampleRate (max Value), value of SampleRate
double NumberSample, TranslationSample;  //  number of sample send to pc, first or last sample discard

double Threshold = 0;
double SampleRate = MAX_SAMPLERATE;
double MaxFrdmVAnalog;

int dimArr;
int stopArray = -1;
int startArray = -1;
int numbWave = 1;
double range;
double BottomLimit;
double TopLimit;
double adcRead;


AnalogIn DAC_In (PTB0);
ComparatorIn COMP_In(PTC8, PTE30); // in+ = PTC8, in- = 12-bit DAC


// Comparator callback functions
void cmp_rise_ISR(void){
    stopArray = stopArray + 1;
    startArray = 0;
    }

void cmp_fall_ISR(void){
    stopArray = stopArray + 1;
    startArray = 0;
    }

void Setting(double autoSr, double valSr, double autoTrig, double valTrig, double riseOrFall){
            if (autoSr == 1){           
            SampleRate = MAX_SAMPLERATE;           
            }
            
        else{            
            SampleRate = valSr;
            }        
        
        Threshold = (valTrig * MaxFrdmVAnalog) - BottomLimit;                   //Value Trigger desired / Max Input
                                                                                //all /MaxFrdmVAnalogRef
                                                                                //Threshold = (valTrig / MaxFrdmVAnalog) + BottomLimit; 
        
        if (autoTrig == 1){
            
            COMP_In.treshold(Threshold);                          //Set Threshold
            
            if (riseOrFall == 0){            
              COMP_In.rising(cmp_rise_ISR);                // Set pointer to rising interrupt functio
                }
            else {          
              COMP_In.falling(cmp_fall_ISR);               // Set pointer to falling interrupt function       
                }     
            }
        else{      
            COMP_In.treshold(ThresholdOut);    
            } 
    }

void printWave(int dimarr, int sampleRate, int numberSample, int translationSample){
    
    double dataLab[dimarr];
    for (int i = 0; i < dimarr; i++){ // fare if di variabile - su callback function
                
        adcRead = (DAC_In / MaxFrdmVAnalog) + BottomLimit; //all *MaxFrdmVAnalogRef?
        dataLab[i] = adcRead;
        
        double SR = sampleRate;
        wait(1 / SR);                    
        }
        
    int dimarray = dimarr - numberSample;
    int startarray = dimarray*translationSample/10;    
    
    for(int j = startarray; j< dimarr - dimarray; j++){                   
            printf("%f ", dataLab[j]);   
        }
    
    }


int main() {
    
    if (MAX_SAMPLERATE < 2*MAX_FREQ)
        {
            printf("Error SampleRate");
            }

    while(1) {
        // there are some parameters only for Labview
        pc.scanf("%f,%f,%f,%f,%f,%f,%f,%f,%f", &AutoTrig, &ValTrig, &nWave , &RiseOrFall, &AutoSr, &ValSr, &NumberSample, &TranslationSample, &TopLimit, &BottomLimit);
        double DimensionArray = (SampleRate / Min_FREQ) * 2;        //at least 2 waveform of the minimum Frequ   
        dimArr = int (DimensionArray);
        //numbWave = int (nWave);

        range = TopLimit - BottomLimit;
        MaxFrdmVAnalog = MaxFrdmVAnalogRef / range;
        
        Setting(AutoSr, ValSr, AutoTrig, ValTrig, RiseOrFall); //testing - setting every some sec(contator intern)
        if (AutoTrig == 1){
            if (startArray == 0 && stopArray == 0){
                printWave(dimArr, SampleRate, NumberSample, TranslationSample);
                startArray = -1;
                stopArray = -1;
                }    
            }
        else{
            printWave(dimArr, SampleRate, NumberSample, TranslationSample);
            }
        }
    }