We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have done software debounce logic with 2/3 voter logic and kindly verify the coding i don't no whether it is correct or not. Please help me
Coding:
void inputRoutine() { uint16_t temp; InputP1_Temp=P1&0x00; for(Index1=0;Index1<MAXINPUTS;Index1++) { temp=debounce(Index1); if(temp==1) { Input_TableP1[Index1]=1; } else if(temp==0) { Input_TableP1[Index1]=0; } } } /***************** -- Debounce Port P1 -- *****************/ bit debounce(uint16_t IN_INDEX) { uint16_t INDEX2,ONE=0,ZERO=0; char TEMP,SHIFT_RESULT[3]=0x00; for(INDEX2=0;INDEX2<3;INDEX2++) { TEMP= P1; SHIFT_RESULT[INDEX2]=(TEMP>>IN_INDEX)& 0x01; delay_10micro_sec(); } /* Comparision of 3 values retreived from same pin*/ for(INDEX2=0;INDEX2<3;INDEX2++) { if(SHIFT_RESULT[INDEX2]==1) ONE++; else if(SHIFT_RESULT[INDEX2]==0) ZERO++; } return (ONE>ZERO); }
With Thanks, G.Karthik Ragunath
"...makes you vulnerable to changes in the frequency of the timer."
Never seen that as a problem. I (nearly) always have a periodic tick running at a similar rate anyway to provide timing for the foreground tasks etc.
The ISR triggered by the time may have a variation - But it is slight and probably better than the jitter that might occur in a 'super-loop'.