Есть енкодер, подключенный к микроконтроллеру(atmega8) к ножкам PINB.2, PINB.1. схема подключения - стандартная
с1,с2 = 0,1 мкф, r1,r2 = 10 ком

Но вот проблема в том, что иногда при бистром повороте в одном направление, "программа" может подсчитать 10 положительных импульсов и 3 отрицательных, хотя должно быть 13 положительных. И наоборот.
Вот такой программный код
Код: Выделить всё
#define DECODER_BUTTON_PLUS_IN PINB.2
#define DECODER_BUTTON_MINUS_IN PINB.1
#define DEC_0 0
#define DEC_STEP 1
#define DEC_FIN 2
PrintLineText, PrintLineNumber - вивод текста на екраy типа wh1602
char ShowDialogInt(const char* sCaption, int* iRes, int iMin, int iMax)
{
int i = 0, iStep = 0;
char iCurDec = DEC_0;
PrintLineText(0, sCaption);
PrintLineNumber(1, *iRes);
while(1)
{
if(0 == DECODER_BUTTON_PLUS_IN && 0 == DECODER_BUTTON_MINUS_IN)
{
if(DEC_FIN == iCurDec)
{
(*iRes) = (*iRes) + (int)iStep;
if((*iRes) < iMin) (*iRes) = iMin;
if((*iRes) > iMax) (*iRes) = iMax;
PrintLineNumber(1, *iRes);
iCurDec = DEC_0;
}
}
else if(1 == DECODER_BUTTON_PLUS_IN && 0 == DECODER_BUTTON_MINUS_IN)
{
if(DEC_0 == iCurDec)
{
iCurDec = DEC_STEP;
iStep = -1;
}
}
else if(0 == DECODER_BUTTON_PLUS_IN && 1 == DECODER_BUTTON_MINUS_IN)
{
if(DEC_0 == iCurDec)
{
iCurDec = DEC_STEP;
iStep = 1;
}
}
else
{
if(DEC_STEP == iCurDec)
{
iCurDec = DEC_FIN;
}
}
}
}
есть подозрения что это дребезг контактов на енкодере, но как от него избавится?
Спасибо!


only pure true norwegian blackx 