to test synchronize signals by a 22k signal.

main.cpp

Committer:
test
Date:
2012-04-17
Revision:
0:3d76f0b19b14

File content as of revision 0:3d76f0b19b14:

#include "mbed.h"
#include "7SegSRDriver.h"
#include "TextLCD.h" //driver 1602 lcd screen

#define pin_debug 0
#if pin_debug
DigitalOut pin8(P2_7),pin6(P1_24);
Ticker pinFlip;
#endif

Timeout CalcRate;
DigitalOut led1(P2_2);
DigitalIn signal(P2_9),XFC(P2_8);;
//InterruptIn flip(P1_21),flip1(P1_23);    in mbed P1_21 is defined to be LED1, connect LCD to 3V3, can't generate interrupt
//InterruptIn flip(P2_8),flip1(P2_9); //flip XFC flip1 signal
TextLCD lcd(P0_24, P0_25, P0_26, P0_3, P0_2,P1_0,TextLCD::LCD16x2); // rs, e, d4-d7
int signalTotal,XFCTotal,sync_Pass,sync_Fail;
int i,max; //used for dataToArry function
int printArray[4];
float dataToarray(float data);
int sync_delay = 16;// sync delay micro seconds.
void pinflip();
//7 segment class definition,Data,Clock,latch
SSegSRDriver display(P2_1,P0_7,P0_9, SSegSRDriver_COMN_CATHODE);


void calcRate() {
    float rate = 0;
    int tempsignalTotal,temp_pass,temp_fail;
    int j =0;
    int LEDArray[4];
#if pin_debug
    pinFlip.detach();
#endif
    //put to temp value to ensure these values not change after this.
    tempsignalTotal =signalTotal;
    temp_pass = sync_Pass;
    temp_fail = sync_Fail;
    if(sync_Pass>0)
        rate = (float)temp_pass/(float)(temp_pass+temp_fail)*100;
    else
        rate = 0;
    i=max=0;
       lcd.cls();
    if (rate>50) {
        for (j= 0; j<=3; j++) //clear printArray buffer to 0
            printArray[j] = 0;
        dataToarray(rate);
        //lcd.printf("XFC: %6dHz\n",tempXFCTotal*2); //print XFC: 023000Hz,remeber I'm using one counter to trigger the count
        lcd.printf("Working\n"); //Don't show XFC message.
        lcd.printf("Sig: %6dHz\n",tempsignalTotal);//print Sig: 023000Hz
        j = max; //max is from dataToarray, global variable to index the lenth of the array
        //printf("The array to print is:");
        for (int a=0; a<=4; a++)
            display.clear();
        
        while (j<3) {
            //printf("%d",0);
            j++;
            for (int tempIndex = j; tempIndex>=1; tempIndex--)
                printArray[tempIndex]=printArray[tempIndex-1];
            printArray[0] = 0;
        }
        for (j=0; (j<=3); j++) {
            //printf("%d ",printArray[j]);
            LEDArray[j]=printArray[j];
        }
        if (max>3) { //which means 100%
            display.write(LEDArray[3],false);
            display.write(LEDArray[2],true);
            display.write(LEDArray[1],false);
            display.write(LEDArray[0],false);
        } else {
            display.write(LEDArray[3],false);
            display.write(LEDArray[2],false);
            display.write(LEDArray[1],true);
            display.write(LEDArray[0],false);
        }
    }
    else{
      lcd.printf("Warning!\n"); //show warning message message.
      lcd.printf("No Sync signal\n");
    }
     signalTotal = sync_Pass=sync_Fail =0;
    CalcRate.attach(&calcRate,1.0);
    led1 = !led1;
    
#if pin_debug
    pinFlip.attach_us(&pinflip,10); //the best speed is 100k/s
#endif
}
#if pin_debug
void pinflip() {
    pin8 = !pin8;
}
#endif
float dataToarray(float data) {
    if (data>=0.1) {
        i++; //counter increase
        data = dataToarray(data/10)*10;
    }

    if (max<=i)
        //make sure max is the biggest number pointer
        max = i;
    float tempData;
    tempData = data*100;
    printArray[max-i] = (int)tempData;
    data = (tempData-printArray[max-i])/100;
    i--;
    return (data);


}
int main() {
    int tempSignal,tempXFC;
    //lcd.printf("XFC: 0Hz\n"); //initialize
    lcd.printf("Working\n"); //initialize
    lcd.printf("Sig: 0Hz\n");//The Sig: 0Hz
    //clear the led first
     for (int a=0; a<=4; a++)
            display.clear();
    signalTotal = sync_Pass=sync_Fail =0;
    tempSignal = tempXFC = 0;
    CalcRate.attach(&calcRate,1.0);
#if pin_debug
    pin8 = pin6 =0;
    pinFlip.attach_us(&pinflip,10); //the best speed is 100k/s
#endif
   
    while (1) {
        if(tempSignal!=signal)
        {
            tempSignal = signal;
            signalTotal++;
        }
        if(tempXFC!=XFC)
        {
            tempXFC = XFC;
            wait_us(sync_delay);
            if(tempSignal!=signal) //synchronized 
            {
                tempSignal = signal;
                signalTotal++;  
                sync_Pass++;
            }
            else //didn't find sync signal
                sync_Fail++;
        }
        wait_us(1);
        
        


    }

}