![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
to test synchronize signals by a 22k signal.
main.cpp@0:3d76f0b19b14, 2012-04-17 (annotated)
- Committer:
- test
- Date:
- Tue Apr 17 07:40:02 2012 +0000
- Revision:
- 0:3d76f0b19b14
1.0
Who changed what in which revision?
User | Revision | Line number | New 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 | } |