interprete encoder quadrature signals correctly
parent
c151a7bb67
commit
3dafc11535
@ -0,0 +1,69 @@
|
|||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#define ENC_PORT PORTD
|
||||||
|
#define ENC_DDR DDRD
|
||||||
|
#define ENC_A PIND&(1<<2)
|
||||||
|
#define ENC_B PIND&(1<<4)
|
||||||
|
#define ENC_CCW 0
|
||||||
|
#define ENC_CW 1
|
||||||
|
|
||||||
|
void encoder_action(uint8_t dir);
|
||||||
|
|
||||||
|
volatile uint8_t encoder_direction;
|
||||||
|
|
||||||
|
ISR(INT0_vect)
|
||||||
|
{
|
||||||
|
if (ENC_B)
|
||||||
|
{
|
||||||
|
if (ENC_A)
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CCW;
|
||||||
|
encoder_action(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ENC_A)
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CCW;
|
||||||
|
encoder_action(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR (PCINT3_vect){
|
||||||
|
if (ENC_B)
|
||||||
|
{
|
||||||
|
if (ENC_A)
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CW;
|
||||||
|
encoder_action(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CCW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ENC_A)
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CCW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoder_direction = ENC_CW;
|
||||||
|
encoder_action(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue