Вы находитесь на странице: 1из 6

Cinco Encoders y un slo PIC Vamos a controlar varios encoders con un slo PIC y veremos los datos en un LCD

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.

Interior de un encoder mecnico o "tipo potencimetro".

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.

Programa cinco Encoder con un slo PIC en Proton IDE:


The translation could modify the code. Use the code without translating.
Device = 16F876A REMINDERS = FALSE Config XT_OSC, PWRTE_ON, CPD_OFF, WDT_OFF, BODEN_OFF, LVP_OFF REMINDERS = TRUE XTAL = 4 TRISA TRISB TRISC = %000000 = %11111111 = %11111111 ' Indicamos el cristal que vamos a usar. ' Todo el PortA como salidas. ' Todo el PortB como entradas. ' Todo el PortC como entradas. ' Todas las entradas/salidas son digitales. ' ' ' ' Configurado como LCD alfanumrico. Slo 4 entradas de datos. Es de dos lneas. Indica el primer bit de datos, de los 4 que tiene,

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

Dim Dim Dim Dim Dim Dim Dim

Aux2 Aux3 Aux4 Aux5 Enc1 Enc2 Enc3

As As As As As As As

byte byte byte byte byte byte byte

Dim Enc4 As byte


Dim Enc5 As byte X1 =0: X2 =0: X3 =0: X4 =0: X5 =0 ' Ponemos todas las varibales a cero. Aux1=0: Aux2=0: Aux3=0: Aux4=0: Aux5=0 Enc1=0: Enc2=0: Enc3=0: Enc4=0: Enc5=0 Cls LCD. Print At 1, 6, "Hola!" DelayMS 2000 Cls DelayMS 250 Print At 1, 1, DEC4 X1, " ", DEC4 X2, escribe el contenido Print At 2, 1, DEC4 X4, " ", DEC4 X5 contadores. While 1=1 Aux1 = Enc1 luego saber si hay cambios en el encoder. Enc1 = PORTB & 3 primeros bits de PortB. Q=X1 luego saber si hay cambios en el contador. If Aux1 = 2 And Enc1 = 3 Then Inc X1 subida, incrementa el contador. If Aux1 = 3 And Enc1 = 2 Then Dec X1 bajada, decrementa el contador. If X1=65535 Then X1=9999 cero, cargar el valor mximo 9999. If PORTC.7=0 Then X1=0 encoder, poner a cero el contador. If Q<>X1 Then Print At 1, 1, DEC4 X1 el contador, visualizar la cantidad en el LCD. Aux2 = Enc2 mismo. Slo cambia los nombres de las Enc2 = PORTB & 12 aislamiento de pares de bits que corresponde Q=X2 turno. If Aux2 = 8 And Enc2 = 12 Then Inc X2 If Aux2 = 12 And Enc2 = 8 Then Dec X2 If X2=65535 Then X2=9999 If PORTC.6=0 Then X2=0 If Q<>X2 Then Print At 1, 6, DEC4 X2 ' Borra el contenido visual del ' Al comienzo veremos un saludo ' durante dos segundos.

" ", DEC4 X3 ' Inicialmente ' de todos los

' 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

' Todo lo dems es lo ' variables y el ' con el encoder de

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

Then Inc X3 Then Dec X3 Then X3=0 DEC4 X3

Then Inc X4 Then Dec X4 Then X4=0 DEC4 X4

Then Inc X5 Then Dec X5 Then X5=0 DEC4 X5

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.

Вам также может понравиться