I'm using a rotary encoder (dial switch) with the eQEP module of RM46.
The encoder has A and B 90° phase shifted, and the contacts are hardware debounced.
I started from he HALCoGen example_eqepEdgeCapture.c, and the code reacts on moving the encoder.
I have difficulties getting a reliable value in eqepREG1->QPOSCNT though.
I do get values in the register, but they don't really represent the number of clicks I rotate the encoder.
I'm struggling with what settings to use to get a representation of the rotation made (left or right in the eQEP eqepREG1->QPOSCNT.
Code (almost identical to the HALCoGen example_eqepEdgeCapture.c example:
/* USER CODE BEGIN (1) */ #include "eqep.h" #include "sys_core.h" #include <stdio.h> /* USER CODE END */ void main(void) { /* USER CODE BEGIN (3) */ uint16 deltaT = 0U; float velocity = 0U; /* EQEP initialization based on GUI Configuration. */ QEPInit(); /* Enable Position Counter */ eqepEnableCounter(eqepREG1); /* Enable Unit Timer. */ eqepEnableUnitTimer(eqepREG1); /* Enable capture timer and capture period latch. */ eqepEnableCapture(eqepREG1); while(1) { /* Status flag is set to indicate that a new value is latched in the QCPRD register. */ if((eqepREG1->QEPSTS & 0x80U) !=0U) { printf("Count %i!\n", eqepREG1->QPOSCNT); /* Clear the Status flag. */ eqepREG1->QEPSTS |= 0x80U; } } /* USER CODE END */ }
If you've used eQEP with a rotary encoder dial, it would be great if you share your experience.