to test synchronize signals by a 22k signal.

Committer:
test
Date:
Tue Apr 17 07:40:02 2012 +0000
Revision:
0:3d76f0b19b14
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
test 0:3d76f0b19b14 1 #include "mbed.h"
test 0:3d76f0b19b14 2 #include "7SegSRDriver.h"
test 0:3d76f0b19b14 3 #include "TextLCD.h" //driver 1602 lcd screen
test 0:3d76f0b19b14 4
test 0:3d76f0b19b14 5 #define pin_debug 0
test 0:3d76f0b19b14 6 #if pin_debug
test 0:3d76f0b19b14 7 DigitalOut pin8(P2_7),pin6(P1_24);
test 0:3d76f0b19b14 8 Ticker pinFlip;
test 0:3d76f0b19b14 9 #endif
test 0:3d76f0b19b14 10
test 0:3d76f0b19b14 11 Timeout CalcRate;
test 0:3d76f0b19b14 12 DigitalOut led1(P2_2);
test 0:3d76f0b19b14 13 DigitalIn signal(P2_9),XFC(P2_8);;
test 0:3d76f0b19b14 14 //InterruptIn flip(P1_21),flip1(P1_23); in mbed P1_21 is defined to be LED1, connect LCD to 3V3, can't generate interrupt
test 0:3d76f0b19b14 15 //InterruptIn flip(P2_8),flip1(P2_9); //flip XFC flip1 signal
test 0:3d76f0b19b14 16 TextLCD lcd(P0_24, P0_25, P0_26, P0_3, P0_2,P1_0,TextLCD::LCD16x2); // rs, e, d4-d7
test 0:3d76f0b19b14 17 int signalTotal,XFCTotal,sync_Pass,sync_Fail;
test 0:3d76f0b19b14 18 int i,max; //used for dataToArry function
test 0:3d76f0b19b14 19 int printArray[4];
test 0:3d76f0b19b14 20 float dataToarray(float data);
test 0:3d76f0b19b14 21 int sync_delay = 16;// sync delay micro seconds.
test 0:3d76f0b19b14 22 void pinflip();
test 0:3d76f0b19b14 23 //7 segment class definition,Data,Clock,latch
test 0:3d76f0b19b14 24 SSegSRDriver display(P2_1,P0_7,P0_9, SSegSRDriver_COMN_CATHODE);
test 0:3d76f0b19b14 25
test 0:3d76f0b19b14 26
test 0:3d76f0b19b14 27 void calcRate() {
test 0:3d76f0b19b14 28 float rate = 0;
test 0:3d76f0b19b14 29 int tempsignalTotal,temp_pass,temp_fail;
test 0:3d76f0b19b14 30 int j =0;
test 0:3d76f0b19b14 31 int LEDArray[4];
test 0:3d76f0b19b14 32 #if pin_debug
test 0:3d76f0b19b14 33 pinFlip.detach();
test 0:3d76f0b19b14 34 #endif
test 0:3d76f0b19b14 35 //put to temp value to ensure these values not change after this.
test 0:3d76f0b19b14 36 tempsignalTotal =signalTotal;
test 0:3d76f0b19b14 37 temp_pass = sync_Pass;
test 0:3d76f0b19b14 38 temp_fail = sync_Fail;
test 0:3d76f0b19b14 39 if(sync_Pass>0)
test 0:3d76f0b19b14 40 rate = (float)temp_pass/(float)(temp_pass+temp_fail)*100;
test 0:3d76f0b19b14 41 else
test 0:3d76f0b19b14 42 rate = 0;
test 0:3d76f0b19b14 43 i=max=0;
test 0:3d76f0b19b14 44 lcd.cls();
test 0:3d76f0b19b14 45 if (rate>50) {
test 0:3d76f0b19b14 46 for (j= 0; j<=3; j++) //clear printArray buffer to 0
test 0:3d76f0b19b14 47 printArray[j] = 0;
test 0:3d76f0b19b14 48 dataToarray(rate);
test 0:3d76f0b19b14 49 //lcd.printf("XFC: %6dHz\n",tempXFCTotal*2); //print XFC: 023000Hz,remeber I'm using one counter to trigger the count
test 0:3d76f0b19b14 50 lcd.printf("Working\n"); //Don't show XFC message.
test 0:3d76f0b19b14 51 lcd.printf("Sig: %6dHz\n",tempsignalTotal);//print Sig: 023000Hz
test 0:3d76f0b19b14 52 j = max; //max is from dataToarray, global variable to index the lenth of the array
test 0:3d76f0b19b14 53 //printf("The array to print is:");
test 0:3d76f0b19b14 54 for (int a=0; a<=4; a++)
test 0:3d76f0b19b14 55 display.clear();
test 0:3d76f0b19b14 56
test 0:3d76f0b19b14 57 while (j<3) {
test 0:3d76f0b19b14 58 //printf("%d",0);
test 0:3d76f0b19b14 59 j++;
test 0:3d76f0b19b14 60 for (int tempIndex = j; tempIndex>=1; tempIndex--)
test 0:3d76f0b19b14 61 printArray[tempIndex]=printArray[tempIndex-1];
test 0:3d76f0b19b14 62 printArray[0] = 0;
test 0:3d76f0b19b14 63 }
test 0:3d76f0b19b14 64 for (j=0; (j<=3); j++) {
test 0:3d76f0b19b14 65 //printf("%d ",printArray[j]);
test 0:3d76f0b19b14 66 LEDArray[j]=printArray[j];
test 0:3d76f0b19b14 67 }
test 0:3d76f0b19b14 68 if (max>3) { //which means 100%
test 0:3d76f0b19b14 69 display.write(LEDArray[3],false);
test 0:3d76f0b19b14 70 display.write(LEDArray[2],true);
test 0:3d76f0b19b14 71 display.write(LEDArray[1],false);
test 0:3d76f0b19b14 72 display.write(LEDArray[0],false);
test 0:3d76f0b19b14 73 } else {
test 0:3d76f0b19b14 74 display.write(LEDArray[3],false);
test 0:3d76f0b19b14 75 display.write(LEDArray[2],false);
test 0:3d76f0b19b14 76 display.write(LEDArray[1],true);
test 0:3d76f0b19b14 77 display.write(LEDArray[0],false);
test 0:3d76f0b19b14 78 }
test 0:3d76f0b19b14 79 }
test 0:3d76f0b19b14 80 else{
test 0:3d76f0b19b14 81 lcd.printf("Warning!\n"); //show warning message message.
test 0:3d76f0b19b14 82 lcd.printf("No Sync signal\n");
test 0:3d76f0b19b14 83 }
test 0:3d76f0b19b14 84 signalTotal = sync_Pass=sync_Fail =0;
test 0:3d76f0b19b14 85 CalcRate.attach(&calcRate,1.0);
test 0:3d76f0b19b14 86 led1 = !led1;
test 0:3d76f0b19b14 87
test 0:3d76f0b19b14 88 #if pin_debug
test 0:3d76f0b19b14 89 pinFlip.attach_us(&pinflip,10); //the best speed is 100k/s
test 0:3d76f0b19b14 90 #endif
test 0:3d76f0b19b14 91 }
test 0:3d76f0b19b14 92 #if pin_debug
test 0:3d76f0b19b14 93 void pinflip() {
test 0:3d76f0b19b14 94 pin8 = !pin8;
test 0:3d76f0b19b14 95 }
test 0:3d76f0b19b14 96 #endif
test 0:3d76f0b19b14 97 float dataToarray(float data) {
test 0:3d76f0b19b14 98 if (data>=0.1) {
test 0:3d76f0b19b14 99 i++; //counter increase
test 0:3d76f0b19b14 100 data = dataToarray(data/10)*10;
test 0:3d76f0b19b14 101 }
test 0:3d76f0b19b14 102
test 0:3d76f0b19b14 103 if (max<=i)
test 0:3d76f0b19b14 104 //make sure max is the biggest number pointer
test 0:3d76f0b19b14 105 max = i;
test 0:3d76f0b19b14 106 float tempData;
test 0:3d76f0b19b14 107 tempData = data*100;
test 0:3d76f0b19b14 108 printArray[max-i] = (int)tempData;
test 0:3d76f0b19b14 109 data = (tempData-printArray[max-i])/100;
test 0:3d76f0b19b14 110 i--;
test 0:3d76f0b19b14 111 return (data);
test 0:3d76f0b19b14 112
test 0:3d76f0b19b14 113
test 0:3d76f0b19b14 114 }
test 0:3d76f0b19b14 115 int main() {
test 0:3d76f0b19b14 116 int tempSignal,tempXFC;
test 0:3d76f0b19b14 117 //lcd.printf("XFC: 0Hz\n"); //initialize
test 0:3d76f0b19b14 118 lcd.printf("Working\n"); //initialize
test 0:3d76f0b19b14 119 lcd.printf("Sig: 0Hz\n");//The Sig: 0Hz
test 0:3d76f0b19b14 120 //clear the led first
test 0:3d76f0b19b14 121 for (int a=0; a<=4; a++)
test 0:3d76f0b19b14 122 display.clear();
test 0:3d76f0b19b14 123 signalTotal = sync_Pass=sync_Fail =0;
test 0:3d76f0b19b14 124 tempSignal = tempXFC = 0;
test 0:3d76f0b19b14 125 CalcRate.attach(&calcRate,1.0);
test 0:3d76f0b19b14 126 #if pin_debug
test 0:3d76f0b19b14 127 pin8 = pin6 =0;
test 0:3d76f0b19b14 128 pinFlip.attach_us(&pinflip,10); //the best speed is 100k/s
test 0:3d76f0b19b14 129 #endif
test 0:3d76f0b19b14 130
test 0:3d76f0b19b14 131 while (1) {
test 0:3d76f0b19b14 132 if(tempSignal!=signal)
test 0:3d76f0b19b14 133 {
test 0:3d76f0b19b14 134 tempSignal = signal;
test 0:3d76f0b19b14 135 signalTotal++;
test 0:3d76f0b19b14 136 }
test 0:3d76f0b19b14 137 if(tempXFC!=XFC)
test 0:3d76f0b19b14 138 {
test 0:3d76f0b19b14 139 tempXFC = XFC;
test 0:3d76f0b19b14 140 wait_us(sync_delay);
test 0:3d76f0b19b14 141 if(tempSignal!=signal) //synchronized
test 0:3d76f0b19b14 142 {
test 0:3d76f0b19b14 143 tempSignal = signal;
test 0:3d76f0b19b14 144 signalTotal++;
test 0:3d76f0b19b14 145 sync_Pass++;
test 0:3d76f0b19b14 146 }
test 0:3d76f0b19b14 147 else //didn't find sync signal
test 0:3d76f0b19b14 148 sync_Fail++;
test 0:3d76f0b19b14 149 }
test 0:3d76f0b19b14 150 wait_us(1);
test 0:3d76f0b19b14 151
test 0:3d76f0b19b14 152
test 0:3d76f0b19b14 153
test 0:3d76f0b19b14 154
test 0:3d76f0b19b14 155 }
test 0:3d76f0b19b14 156
test 0:3d76f0b19b14 157 }