top of page
  • Adal

MPLAB X 5 Contador binario con encoder rotatorio

Actualizado: 9 mar 2022

Hoola!


En esta practica haremos un código para leer el modulo del encoder rotatorio Ky-040 el cual tiene montado en Ec-11 y conectadas 3 resistencias de 10kΩ en los pines CLK, DT y SW; y dependiendo hacia que lado se gire se aumentara o disminuirá la cuenta en binario, esto se vera reflejado en los 4 Leds de nuestra placa Xpress


En Device Resources solo tendremos que agregar las EXT_INT y cambiar a que lo detecte cuando sea flanco de bajada, esto es así porque el modulo Ky-040 y sus resistencias, el micro siempre estará viendo 5v hasta que se rote el enconder y esto genera un flanco de bajada.

El pin de la interrupcion se lo asignaremos a RB0, mientras que RB1 lo configuraremos como Input, y por ultimo de RA0-RA3 los configuraremos como Outputs.

Generemos el MCC y cerramos


En los archivos generados por el MCC buscamos el ext_int.c y ahi dentro de la función escribiremos este código, lo que hace es que cuando detecta un flanco de bajada en RB0 pregunta a RB1 si esta en alto o bajo, y dependiendo de la respuesta es hacia que lado esta girando, horario o anti horario, y ya después solamente tenemos que restar o sumar 1 a todo el puerto A para que este sea nuestro testigo de contador

Nota: recuerden que

  • TRISx ->es para configurar un puerto como entrada o salida

  • PORTx->es para leer o escribir datos en los nuevos micros, en los legacy solo es para leer

  • LATx ->es para escribir datos, tanto como en los nuevos micros como en los legacy

  • También podemos utilizar la palabra bits para acceder específicamente a un bit, ejemplo:

  • TRISAbits.TRISA0

  • PORTAbits.RA0

  • LATAbits.LATA0


Experimentando un poco con ese código note que se hacían algunas veces sumas o restas de 2, esto puede ser ocasionado por el debounde el encoder, y en efecto, checándolo con mi osciloscopio note que si tenia rebotes, es por eso que decidí agregar un capacitor en paralelo entre el pin CLK a Gnd de 100nF (104) y de igual manera uno entre DT a Gnd, con estos cambios pude notar una salida mas limpia, sin rebotes, y que las sumas o restas si fueran de 1 en 1 en el contador

Salida Con Capacitor, se puede ver que en la salida no se presentan picos

Salida Sin Capacitor, en la salida se tienen 2 picos, algo que el micro puede leer y nosotros no queremos.

La conexión para los dos canales y el botón quedaría algo así, CLK o A a RB0 y DT o B a RB1


Corregido el problema de hardware (también el debounce lo podríamos haber solucionado por Software, pero creo que es una solución mejor planificada, elegante y rápida en procesamiento si la hacemos por HW), compilamos en el martillito y subimos el .Hex a nuestra Xpress Board


109 visualizaciones0 comentarios

Entradas Recientes

Ver todo
bottom of page