jueves, 22 de marzo de 2012

Multiplexación

Una técnica que usaré en mi proyecto PIC, es el multiplexado o multiplexación. Esto significa en pocas palabras, que conectaré varios displays en paralelo, para ahorrar el número de pines, ya que si no lo hiciera de esta manera, me faltarían pines para mi proyecto. Primero, veamos como funcionan los displays.

Display de 7 Segmentos

El display de siete segmentos es una forma de representar números en equipos eléctronicos. Está compuesto de siete segmentos que se pueden encender o apagar individualmente. Cada segmento tiene la forma de una pequeña línea. 

Ahora, existen dos diferentes tipos de displays, de ánodo común, y de cátodo común.

  • En los de tipo de ánodo común, todos los ánodos de los leds o segmentos están unidos internamente a una patilla común que debe ser conectada a potencial positivo (nivel “1”). El encendido de cada segmento individual se realiza aplicando potencial negativo (nivel “0”) por la patilla correspondiente a través de una resistencia que límite el paso de la corriente.
  • En los de tipo de cátodo común, todos los cátodos de los leds o segmentos están unidos internamente a una patilla común que debe ser conectada a potencial negativo (nivel “0”). El encendido de cada segmento individual se realiza aplicando potencial positivo (nivel “1”) por la patilla correspondiente a través de una resistencia que límite el paso de la corriente.
Los diagramas de conexión de cada uno son los siguientes:



Como podemos ver, cada línea en el display, corresponde a una letra, y dicha letra es un pin del display, con lo cual podemos hacer una tabla de los diferentes números para cada tipo de display. (Nota: Hay que recordar que para los de cátodo, el pin debe proporcionar corriente positiva (1), y para los de ánodo corriente negativa (0), para encender los segmentos)


Con esta tabla podemos saber con que entradas al display, nos mostrará en la salida el número que deseamos.

Para hacer esto hay dos formas de controlar el display.

  1. Controlarlo directamente desde un microcontrolador. Para esto usariamos 7 salidas del PIC(o 8 si necesitamos el punto decimal). Una salida para cada letra, y así podemos controlar que númeroso mostrar.
  2. Utilizar además del microcontrolador, un circuito TTL que nos ayude a facilitar el control del display, y también nos ahorra salidas. En este caso, ocupariamos solo 4 salidas del PIC, con las cuales representaríamos en números binarios el número que deseamos mostrar en el PIC. Este número binario lo interpretaría el circuito TTL, y lo pasaría al display, encendiendo los segmentos correspondientes a ese número. Para este método, se usa el circuito integrado 7447 para displays de ánodo, y el 7448 para displays de cátodo.

Los diagramas de conexión son los mismos para ambos. La única diferencia es que el 7447 sirve para displays de ánodo y el 7448 para displays de cátodo.Cada salida corresponde a una letra, y esta se conecta a su equivalente en los pines del display. En cuanto a las entradas, el "1" representa la primera cifra binaria, el "2" la segunda, el "4", la tercera, y el "8" la cuarta. Si queremos mostrar otros números, debemos hacer combinaciones de estos. Por ejemplo, si queremos mostrar un 7, tendríamos que dar la salida binaria(desde el PIC) 0111, lo que significaría encender el pin "1", "2", y "4".

                           
Multiplexación de Displays





Al conectar los displays en paralelo, lo que por lógica de hardware debería suceder, es que si deseamos mostrar un número, éste número se mostraría en todos los displays, haciendo prácticamente inútil esta técnica. Pero el "truco", esta en en el defecto que tenemos los humanos en los ojos (persistencia de la retina) en donde nos da la sensación de ver una imagen cuando esta ya ha desaparecido.

Si tenemos un oscilador que nos controla el encendido y el apagado de un led, creando una intermitencia, en el momento que esta sea lo suficientemente rápida ya no apreciaremos que el led llega a apagarse, sino que nos dará la sensación que esta permanentemente encendido. Prácticamente a frecuencias superiores a 30hz ya no apreciamos el parpadeo.

Para controlar esto, además de las salidas que usemos para controlar el display, agregamos una salida más por display, que se conecta al ánodo o al cátodo del display. Así podemos "seleccionar" al display que queremos mostrar un determinado número, y apagar los demás para que no muestren ese número también. Haciendo esto de manera rápida, no se notaría la intermitencia.


Entonces, si queremos mostrar los números 1, 2, 3, 4 en 4 displays conectados en paralelo, el procedimiento sería:

  1. Seleccionar el display 1, y apagar los demás. Mandar las salidas para mostrar el número 1 en el display. 
  2. Esperar poco tiempo(milisegundos o menos), seleccionamos el display 2, y apagamos los demás. Mandamos las salidas para mostrar el número 2 en el display.
  3. Esperamos de nuevo, seleccionamos el display 3 y apagamos los demás. Mandamos las salidas para mostrar el número 3 en el display.
  4. Esperamos, de nuevo, seleccionamos el display 4 y apagamos los demás. Mandamos las salidas para mostrar el número 4 en el display.
Haciendo esto lo suficientemente rápido, el ojo humano no captara el parpadeo de los displays y podremos verlos todos encendidos al mismo tiempo, mostrando cada display un número diferente.


Ejemplo:

Para demostrar esto, usaré lo siguiente:

  • Protoboard.
  • 7 resistencias de 220 Ohms.
  • 4 displays de 7 segmentos de ánodo común.
  • 1 PIC16F628A
  • Cable para conexiones

El diagrama de conexiones:

   (Click en la imágen para ver en tamaño completo)

Nota: (Los Pines 5 y 14 del PIC se omiten por simplicidad, pero estos van conectados a Tierra y Voltaje Positivo respectivamente)

Código en MikroBasic:

program test
'Asignamos puertos para conectarlos al anodo del display para poder
'seleccionar cual deseamos mostrar (4 displays, 4 puertos)
  symbol select4 = PORTA.6
  symbol select3 = PORTA.7
  symbol select2 = PORTA.0
  symbol select1 = PORTA.1
'Arreglo con constantes binarias para poder mostrar cada numero distinto
'Ej. numeros[7] encenderia los segmentos a b y c para mostrar el 7
'(Por ser de anodo, 0 es encendido, 1 apagado)
const numeros as byte[10] = (%01000000, %01111001, 100100, 110000, 011001, 010010, 000010, %01111000, 000000, 011000)
  main:
    TRISB = 0   'Asignamos todos los puertos A y B como salidas
    TRISA = 0
    select1 = 0 'Inicialmente no seleccionamos ningun display
    select2 = 0
    select3 = 0
    select4 = 0
    while TRUE   'Ciclo infinito
      delay_ms(1) 
      select1 = 1   'Seleccionamos el display 1
      PORTB = numeros[1]  'Mostramos el numero 1
      delay_ms(1)    'Damos un delay de poco tiempo entre selecciones
      select1 = 0    'Apagamos el 1
      select2 = 1    'Seleccionamos el 2
      PORTB = numeros[2] ' Mostramos el numero 2
      delay_ms(1)    '....
      select2 = 0
      select3 = 1
      PORTB = numeros[3]
      delay_ms(1)
      select3 = 0
      select4 = 1
      PORTB = numeros[4]
      delay_ms(1)
      select4 = 0
    wend
end.


Video del circuito funcionando



Referencias:

1 comentario: