Jump to content

miguelzea35

Members
  • Content Count

    4
  • Joined

  • Last visited

About miguelzea35

  • Rank
    Noob Class

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I tried another code to prove only one encoder but think I can't use HIGH and LOW for interrupts in Energiai nt A = PD_1; //variable A a pin digital 2 (DT en modulo) int B = PD_2; //variable B a pin digital 4 (CLK en modulo) float GRADOS = 0; int ANTERIOR = 0; // almacena valor anterior de la variable POSICION volatile int POSICION = 0; // variable POSICION con valor inicial de 50 y definida // como global al ser usada en loop e ISR (encoder) void setup() { pinMode(A, INPUT); // A como entrada pinMode(B, INPUT); // B como entrada // pinMode(23, OUTPUT); Serial.begin(9600); // incializacion de comunicacion serie a 9600 bps attachInterrupt(digitalPinToInterrupt(A), encoder, LOW);// interrupcion sobre pin A con // funcion ISR encoder y modo LOW Serial.println("Listo"); // imprime en monitor serial Listo } void loop() { // digitalWrite(23, HIGH); if (POSICION != ANTERIOR) { // si el valor de POSICION es distinto de ANTERIOR GRADOS=POSICION*0.35; Serial.print(POSICION); // imprime valor de POSICION Serial.print(" "); Serial.println(GRADOS); ANTERIOR = POSICION ; // asigna a ANTERIOR el valor actualizado de POSICION } } void encoder() { static unsigned long ultimaInterrupcion = 0; // variable static con ultimo valor de // tiempo de interrupcion unsigned long tiempoInterrupcion = millis(); // variable almacena valor de func. millis if (tiempoInterrupcion - ultimaInterrupcion > 0.5) { // rutina antirebote desestima // pulsos menores a 5 mseg. if (digitalRead(B) == HIGH) // si B es HIGH, sentido horario { POSICION++ ; // incrementa POSICION en 1 } else { // si B es LOW, senti anti horario POSICION-- ; // decrementa POSICION en 1 } POSICION = min(2000000, max(-2000000, POSICION)); // establece limite inferior de 0 y // superior de 100 para POSICION ultimaInterrupcion = tiempoInterrupcion; // guarda valor actualizado del tiempo } // de la interrupcion en variable static }
  2. I'm trying to read two encoders to know the angular position using interrupts but something is wrong, the code compiles but in serial just prints "0", what can i change? volatile long Left_Encoder_Ticks = 0; volatile bool LeftEncoderBSet; #define Right_Encoder_PinA PC_5 #define Right_Encoder_PinB PC_6 volatile long Right_Encoder_Ticks = 0; volatile bool RightEncoderBSet; void setup() { Serial.begin(9600); SetupEncoders(); } void SetupEncoders() { pinMode(Left_Encoder_PinA, INPUT_PULLUP); pinMode(Left_Encoder_PinB, INPUT_PULLUP); attachInterrupt(Left_Encoder_PinA, do_Left_Encoder, RISING); pinMode(Right_Encoder_PinA, INPUT_PULLUP); pinMode(Right_Encoder_PinB, INPUT_PULLUP); attachInterrupt(Right_Encoder_PinA, do_Right_Encoder, RISING); } void loop() { Update_Encoders(); } void Update_Encoders() { Serial.print(Left_Encoder_Ticks); Serial.print("\t"); Serial.print(Right_Encoder_Ticks); Serial.print("\n"); } void do_Left_Encoder() { LeftEncoderBSet = digitalRead(Left_Encoder_PinB); Left_Encoder_Ticks -= LeftEncoderBSet ? -1 : +1; } void do_Right_Encoder() { RightEncoderBSet = digitalRead(Right_Encoder_PinB); Right_Encoder_Ticks += RightEncoderBSet ? -1 : +1; }
  3. I want know why my code isn't work, I used to use in TM4C129 and edit the code to used in TM4C123GXL, but it doesn't work. #include <stdint.h> #include "driverlib/sysctl.h" #include "driverlib/qei.h" int pos; void setup() { Serial.begin(9600); // Setup QEI Module SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0); GPIOPinConfigure(0x00031806); //GPIO_PD6_PHA0 GPIOPinConfigure(0x00031C06); //GPIO_PD7_PHB0 GPIOPinTypeQEI(GPIO_PORTL_BASE, GPIO_PIN_1 | GPIO_PIN_2); // Configure and Enable QEI QEIConfigure(QEI0_BASE, (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 2147483648); QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, SysCtlClockGet()); // Divide by clock speed to get counts/sec QEIEnable(QEI0_BASE); QEIVelocityEnable(QEI0_BASE); } void loop() { // Report Position & Velocity of Encoder to Serial Terminal Serial.print(QEIPositionGet(QEI0_BASE)); Serial.print(','); Serial.println(QEIVelocityGet(QEI0_BASE)); delay(10); }
×
×
  • Create New...