The code taken from http://forum.43oh.com/topic/8875-problems-using-qei-with-ek-tm4c123gxl/ is good, and makes testing simple. The post was created because the person was actually using hall effect sensors for feedback, not an encoder.
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#define PART_TM4C123GH6PM
#include "driverlib/pin_map.h"
#include "driverlib/qei.h"
#include "driverlib/sysctl.h"
void config_QEI()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
//Unlock GPIOD7
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80;
HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= ~0x80;
HWREG(GPIO_PORTD_BASE + GPIO_O_DEN) |= 0x80;
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0;
// Enable QEI Peripherals
SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0);
//Set Pins to be PHA0 and PHB0
GPIOPinConfigure(GPIO_PD6_PHA0); //GPIOPinConfigure(0x00031806); //0x00031806 =>GPIO_PD6_PHA0
GPIOPinConfigure(GPIO_PD7_PHB0); //GPIOPinConfigure(0x00031C06); // 0x00031C06 => GPIO_PD7_PHB0
//Set GPIO pins for QEI
GPIOPinTypeQEI(GPIO_PORTD_BASE, (GPIO_PIN_6 | GPIO_PIN_7));
//HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_M;
// Configure quadrature encoder, use an arbitrary top limit of 2000 and enable QEI
QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 2000);
QEIEnable(QEI0_BASE);
//Set position to a middle value
QEIPositionSet(QEI0_BASE, 1000);
//Configure and enable velocity
QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, SysCtlClockGet()); // Divide by clock speed to get counts/sec
QEIVelocityEnable(QEI0_BASE);
}
void setup()
{
config_QEI();
Serial.begin(9600);
Serial.println("Start:");
Serial.println("--------");
}
void loop()
{
uint32_t velocity, position;
int32_t rotatingdirection;
position = QEIPositionGet(QEI0_BASE);
velocity = QEIVelocityGet(QEI0_BASE);
rotatingdirection = QEIDirectionGet(QEI0_BASE);
Serial.println(position);
Serial.println(velocity);
Serial.println(rotatingdirection);
Serial.println("--------");
delay(1000);
}
Output:
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
'GPIO_PD6_PHA0' was not declared in this scope
i got this error please help
Are you sure? yes | no