#define INT_A_PORT PORT_INT1 #define INT_A_PIN PIN_INT1 #define INT_A_READ READ_INT1 #define INT_A_ISC ISC_INT1 #define INT_A_ISCL ISCL_INT1 #define INT_A_ISCH ISCH_INT1 #define INT_A_ENABLE_PORT ENABLE_PORT_INT1 #define INT_A_ENABLE_BIT ENABLE_BIT_INT1 // Channel B #define INT_B_VECT VECT_INT6 #define INT_B_DDR DDR_INT6 #define INT_B_PORT PORT_INT6 #define INT_B_PIN PIN_INT6 #define INT_B_READ READ_INT6 #define INT_B_ISC ISC_INT6 #define INT_B_ISCL ISCL_INT6 #define INT_B_ISCH ISCH_INT6 #define INT_B_ENABLE_PORT ENABLE_PORT_INT6 #define INT_B_ENABLE_BIT ENABLE_BIT_INT6 #include "fastquadx2gen.h" #else // Not available static void _init(SENSOR* sensor){ } #endif ENCODER_CLASS c_fastquadx2_INT1_INT6 = MAKE_ENCODER_CLASS(&_init,&__encoder_read,0,0);
#define INT_A_PORT PORT_INT4 #define INT_A_PIN PIN_INT4 #define INT_A_READ READ_INT4 #define INT_A_ISC ISC_INT4 #define INT_A_ISCL ISCL_INT4 #define INT_A_ISCH ISCH_INT4 #define INT_A_ENABLE_PORT ENABLE_PORT_INT4 #define INT_A_ENABLE_BIT ENABLE_BIT_INT4 // Channel B #define INT_B_VECT VECT_INT5 #define INT_B_DDR DDR_INT5 #define INT_B_PORT PORT_INT5 #define INT_B_PIN PIN_INT5 #define INT_B_READ READ_INT5 #define INT_B_ISC ISC_INT5 #define INT_B_ISCL ISCL_INT5 #define INT_B_ISCH ISCH_INT5 #define INT_B_ENABLE_PORT ENABLE_PORT_INT5 #define INT_B_ENABLE_BIT ENABLE_BIT_INT5 #include "fastquadx2gen.h" #else // Not available static void _init(SENSOR* sensor){ } #endif ENCODER_CLASS const c_fastquadx2_INT4_INT5 = MAKE_ENCODER_CLASS(&_init,&__encoder_read,0,0);
#include "../../../pinChange.h" // Called when channel A has changed static void __encChA(const IOPin* io,boolean val, volatile void* data){ QUADRATURE* encoder = (QUADRATURE*)data; boolean chB = pin_get(encoder->channelB); if(val ^ chB){ encoder->encoder.counter++; }else{ encoder->encoder.counter--; } if(encoder->encoder.interpolate){ _encoder_tick(&encoder->encoder); } } // Initialise the device static void __quadrature_init(SENSOR* sensor){ QUADRATURE* encoder = (QUADRATURE*)sensor; pin_make_input(encoder->channelA, FALSE); pin_make_input(encoder->channelB, FALSE); pin_change_attach(encoder->channelA, &__encChA, encoder); } ENCODER_CLASS c_quadrature = MAKE_ENCODER_CLASS(&__quadrature_init,&__encoder_read,0,0);