Kupiłem impulsatory na allegro no name i napisałem program do ich obsługi.
Problem w tym, że działa w 90% więc da się używać impulsatora ale czasami jest to niewygodne.
Jeżeli ktoś wie jak poprawić, mój program byłbym wdzięczny za informację.
Poniżej mój program:
Problem w tym, że działa w 90% więc da się używać impulsatora ale czasami jest to niewygodne.
Jeżeli ktoś wie jak poprawić, mój program byłbym wdzięczny za informację.
Poniżej mój program:
//--------------------------------------------------------------------//
//---------------------- impulsator -----------------------------------//
//--------------------------------------------------------------------//
volatile unsigned char enc;
#define encoder_a (!((PINC&_BV(2))>>2))
#define encoder_b (!((PINC&_BV(1))>>1))
void impulsator(void)
{
static unsigned char stara_a,stara_b,tab[3],xd;
if((stara_a!=encoder_a)||(stara_b!=encoder_b))
{
_delay_ms(5); //redukcja drgań styków
if((stara_a!=encoder_a)||(stara_b!=encoder_b))
{
if((encoder_a==1)&&(stara_a==0)) //rosnace zbocze
{
tab[2]=tab[1];
tab[1]=1;
stara_a=1;
}
if((encoder_a==0)&&(stara_a==1)) //opadajace zbocze
{
tab[2]=tab[1];
tab[1]=3;
stara_a=0;
}
if((encoder_b==1)&&(stara_b==0)) //rosnace zbocze
{
tab[2]=tab[1];
tab[1]=5;
stara_b=1;
}
if((encoder_b==0)&&(stara_b==1)) //opadajace zbocze
{
tab[2]=tab[1];
tab[1]=2;
stara_b=0;
}
xd=(tab[2]-tab[1]);
if((xd==252)||(xd==1))
{
enc++;
tab[2]=0;
tab[1]=0;
}
if((xd==4)||(xd==255))
{
enc--;
tab[2]=0;
tab[1]=0;
}
}
}
}
![[Atgega8][C] Obsługa impulsatora (enkodera) obrotowego [Atgega8][C] Obsługa impulsatora (enkodera) obrotowego](https://obrazki.elektroda.pl/64_1263919402.jpg)