Exemple #1
0
#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);

Exemple #3
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);