Академический Документы
Профессиональный Документы
Культура Документы
estndar. Usar encoders mecnicos o tambin llamados "tipo potencimetro", en el que adems tiene la peculiaridad de que si pulsas el eje (en vez de girar, pulsar) activas un pulsador que est integrado en l. Esta ltima caracterstica servir para poner a cero individualmente el contador correspondiente. Uso el PIC 16F876A porque tiene suficientes entradas/salidas para este propsito.
Cuando queremos controlar ms de un encoder con un slo PIC el programa ha de ser por bucle infinito, o dicho de otro modo, ha de comprobar en todo momento lo que sucede en las entradas del PIC y mostrar resultados. Si el programa detecta un cambio se incrementar o decrementar el contador correspondiente y seguidamente lo representar en el LCD. Haciendo clic aqu te llevar a una introduccin del mtodo "bucle infinito". No es posible (al menos de forma sencilla) usar el mtodo de interrupcin por hardware para controlar
ms de un encoder a la vez.
Vdeo de muestra de funcionamiento.
Uso un LCD de dos lneas y cada lnea puede contener hasta 16 caracteres alfanumricos o grficos (16X2). Es un LCD llamado HD44780 que compr en eBay por menos de tres euros con los gastos de envo incluido en el precio. Los encoders mecnicos que uso dan una resolucin de 20 pulsos por vuelta. En
la imagen de abajo puedes ver un encoder por dentro. El brillo se debe a una grasilla que sirve para minimizar el rozamiento de las escobillas con los contactos. Tiene una bolita que hace que el encoder slo pueda girar si le aplicas un poco de fuerza.
En el apartado 'Encoder' explicaba la necesidad de poner un acondicionador de seal a la salidas de un encoder. Te habrs sorprendido no ver en el esquema un acondicionador, ni siquiera unos condensadores en las salidas ya que usamos encoder tipo potencimetro, pues no hace falta, al menos con este tipo de encoders. En comparacin con las otras construcciones que expongo en esta web, este es el ms lento, y se debe, repito, a que el envo de datos al LCD ralentiza la frecuencia del bucle; por tanto slo es vlido para movimientos lentos al estilo controlar el volumen. El PIC enva la informacin al LCD de forma sincronizada en unos periodos determinados. Las instrucciones "Print" tienen en cuenta esos periodos y lo hace automticamente. Por esta razn hay que declarar el cristal de cuarzo que vas a utilizar. Al usar 4 bits de datos en el LCD en vez de 8 aade latencia, pero es necesario usar slo 4 bits del LCD para tener el nmero mximo de pines del PIC dedicados al mayor nmero posible de encoders. Pasemos a ver el programa. Haz clic aqu para ver el cdigo en CCS C.
ALL_DIGITAL = True LCD_TYPE = 0 LCD_INTERFACE = 4 LCD_LINES = 2 LCD_DTPIN = PORTA.0 para el LCD. LCD_RSPIN = PORTA.4 LCD. LCD_ENPIN = PORTA.5 LCD. Dim Dim Dim Dim Dim Dim Dim X1 X2 X3 X4 X5 Q Aux1 As As As As As As As Word Word Word Word Word Word byte
' Indica qu bit del PIC se usar como RS para el ' Indica qu bit del PIC se usar como EN para el
As As As As As As As
' Bucle infinito. ' Igualamos para ' Aislamos los dos ' Igualamos para ' Si hay flanco de ' Si hay flanco de ' Si es menor de ' Si se ha pulsado el ' Si hay cambios en
Aux3 = Enc3 Enc3 = PORTB & 48 Q=X3 If Aux3 = 32 And Enc3 = 48 If Aux3 = 48 And Enc3 = 32 If X3=65535 Then X3=9999 If PORTC.5=0 If Q<>X3 Then Print At 1, 11, Aux4 = Enc4 Enc4 = PORTB & 192 Q=X4 If Aux4 = 128 And Enc4 = 192 If Aux4 = 192 And Enc4 = 128 If X4=65535 Then X4=9999 If PORTC.4=0 If Q<>X4 Then Print At 2, 1, Aux5 = Enc5 Enc5 = PORTC & 3 Q=X5 If Aux5 = 2 And Enc5 = 3 If Aux5 = 3 And Enc5 = 2 If X5=65535 Then X5=9999 If PORTC.3=0 If Q<>X5 Then Print At 2, 6, Wend End
Como necesitamos dos entradas para poder leer un encoder, hemos de separar de dos en dos bits el puerto de entrada RB y usaremos los dos primeros bits de RC para aadir el quinto encoder. El resto de bits del puerto RC nos servir para leer el reset correspondiente a cada contador. Si no hubiera usado los bits de resets se podran haber aprovechado para aadir ms encoders. Con el PIC 16F876A podemos obtener hasta 8 encoders en total sin reset. Con los reset individuales para cada contador, he querido hacer un ejercicio ms completo y prctico, sin aadir al programa demasiada dificultad. La resolucin de todos los encoders es de 10.000 posiciones posibles (de 0 a 9.999).
Hubiese querido hacerlo con todo el rango de los 16 bits (65.536 posiciones posibles) pero no se puede en una LCD de 16x2 porque contendran cinco dgitos cada contador y no cabran, as que tuve que reducirles un dgito para poder representar los cinco contadoresencoders. Por esta razn en el programa vers que cuando el PIC pasa de cero (hacia atrs) a 65.535 (que es la resolucin mxima) hemos de llevar esa resolucin a 9.999 al instante: If X1=65535 Then X1=9999 X1 es el contador del primer encoder, X2 del segundo y as sucesivamente. Por otra parte, observa que los bits de reset comienza en RC7; por ello RC7 se corresponde con el reset del primer contador (X1), RC6 con el segundo (X2), y as sucesivamente. Si lo deseas, puedes montar el circuito parcialmente, para un slo encoder o dos...; aqu est limitado hasta 5. La nica condicin es no dejar patillas del PIC sueltas al aire, es decir, que han de estar polarizadas con una resistencia a positivo. O bien, otra opcin, si vas a usar menos de 5 encoders, eliminar las partes del programa que no seran usadas. En el esquema vers dos redes de resistencias de 8 salidas cada una de ellas, el noveno pin es la que va a positivo. Son importantes estas resistencias. Las puedes construir tu mismo si lo deseas, o usar las que ya vienen integradas; son muy cmodas. stas llevan un puntito que indica cual es el pin que va directo a VCC. La nica patilla del PIC que queda sin uso y en el programa est configurada como entrada de datos es RC2. Hay que procurar que las patillas que no usemos estn como entrada de dato porque as evitamos accidentes mientras estamos haciendo las pruebas con nuestro PIC. Son buenas costumbres.