En esta segunda entrega explicaremos la teoría y la práctica del registro de desplazamiento, que es el corazón del display, y también abordaremos la construcción del cerebro del proyecto: la placa controladora.
Por sí solo, el display propiamente dicho es incapaz de mostrar ningún tipo de información, dado que solo es una colección de LEDs conectados entre sí.
Para que sea capaz de representar algún dato, tenemos que lograr controlar individualmente cada segmento que compone cada uno de los cuatro dígitos, y también los dos LEDs centrales (los “:”).
Tres alternativas para controlar el display
Existen muchas maneras de hacer esto, y por lo general se opta por una de tres alternativas posibles.
La primera alternativa: control directo mediante pines de E/S
La primera de ellas, la más sencilla de las tres, consiste en controlar cada uno de los segmentos implicados mediante un pin de E/S del microcontrolador. Esta opción tiene la ventaja de la simplicidad a la hora de escribir el programa que maneje el display, pero tiene la gran desventaja de requerir un número prohibitivo de pines, ya que en nuestro caso debemos controlar 28 segmentos más dos LEDs centrales.
La segunda alternativa: multiplexado
La segunda opción es el multiplexado. Este consiste en utilizar una línea de control para cada dígito, y siete más conectadas a cada uno de los segmentos. De esta manera, todos los segmentos que están en la misma posición están unidos entre sí. El software de control, que debe ser más elaborado que en el primer caso, debe encargarse de seleccionar un dígito, encender los segmentos que sean necesarios, esperar un cierto tiempo (algunos milisegundos), luego seleccionar el segundo dígito, encender los segmentos que correspondan, volver a esperar… y así hasta el cuarto dígito.
Esta operación, repetida continuamente y a gran velocidad, permite que el ojo humano, debido a su lentitud al reaccionar a la luz, perciba los cuatro dígitos encendidos simultáneamente, cada uno con los segmentos adecuados encendidos. Es el mismo principio que nos permite ver imágenes en movimiento en una TV o en el cine.
Como ventaja, se utilizan (en el caso de este display) solo 12 líneas de control: siete para los segmentos, cuatro para los dígitos y una para los dos puntos centrales. Menos de la mitad que en la primera alternativa. La desventaja radica en la complejidad del software, ya que deberemos escribir un programa lo suficientemente rápido y eficaz para que el display no presente parpadeos. Para ello, necesitamos repetir todo el proceso descrito al menos 30 veces por segundo, lo que puede no dejar demasiado tiempo para otras tareas de control.
Afortunadamente, existe una tercera alternativa, que veremos a continuación.
El registro de desplazamiento
La tercera alternativa de la que hablábamos antes es utilizar un registro de desplazamiento (en inglés, Shift Register). Explicado con palabras simples, un registro de desplazamiento es una especie de conversor de datos en forma serial, a datos en forma paralela. Tiene un pin de entrada, por el que se introducen uno a uno los bits (“0”s y “1”s) que necesitamos obtener en las salidas, y el registro se encarga internamente de manejarlos.
Esto tiene muchas ventajas. En primer lugar, el uso de pines de control disminuye drásticamente: si en la primera opción necesitábamos 29 pines, y en la segunda 12, ahora solo nos arreglaremos con 4 (que pueden ser solo tres). Uno para los datos propiamente dichos (al que llamaremos DATA), uno para los pulsos de clock, que son los encargados de “marcar el ritmo” al que ingresan los datos (CLOCK), uno destinado a limpiar el contenido del registro de desplazamiento (que llamaremos RESET) y, por último, un pin que, si bien no controla directamente el registro de desplazamiento, será necesario en nuestro proyecto, ya que será el que apague el display mientras escribimos los datos en el registro; de esta forma evitaremos que se vean titilar brevemente los segmentos.
En lo que respecta al software, el uso de este tipo de registros también permite simplificar las cosas, ya que solo deberemos escribir datos en el display cuando se produzca algún cambio en él, y el resto del tiempo podremos dedicar los recursos del microcontrolador a otras tareas. Esto es posible gracias a que el registro de desplazamiento mantiene el estado de sus salidas sin cambios aunque hayan desaparecido las señales de su entrada.
En el esquema que publicamos al final de esta página se puede ver cómo conectar entre sí varios 74LS164N para formar un registro de desplazamiento de 32 bits. No abundaremos sobre el funcionamiento interno de este integrado, ya que existe un artículo sobre el tema en Neoteo (ver links).
Como se puede apreciar en el esquema, las señales llegan a los integrados a través de un conector de 5 pines, que será el encargado de unir esta segunda placa con la de control. La línea ON/OFF pasa directamente a la placa del display, y es la que permite el encendido/apagado de todos los LEDs, mediante los transistores que los manejan. Esta entrada debe estar en “0” para que los LEDs enciendan, y en “1” para que el display permanezca apagado.
El pin llamado DATA es el encargado de transmitir los bits de datos desde el controlador hacia la entrada del primer integrado. Hay que recordar que las entradas del 74LS164N se hacen mediante una compuerta NAND, por lo que cuando escribamos un “0” habrá un “1” en la salida correspondiente, y viceversa.
CLOCK, que es el tercer pin de este conector, es el que debe proveer los pulsos de reloj. En cada flanco de subida de los pulsos de reloj, es decir cuando pasa de estado bajo a estado alto, se produce el ingreso al registro de desplazamiento del dato presente en la entrada.
El pin que hemos llamado RESET es el encargado de limpiar el contenido del registro, escribiendo “0” en todas las salidas. Esto provee un mecanismo rápido y sencillo para el borrado del display, aunque debido a la poca profundidad de este registro en particular (solo 32 bits) se puede prescindir de su uso, y limpiar el registro simplemente escribiendo mediante DATA y CLOCK los 32 “0”s. Recordemos que la entrada RESET del 74LS164N está negada, lo que significa que deberá estar en “1” para que el registro funcione normalmente, y en “0” para que se produzca el vaciamiento de sus datos.
Se puede ver también que la última salida de cada 74LS164N está unida a la entrada del siguiente, de forma que cuando el primero se “llena”, los bits de datos son empujados al integrado siguiente.
Las salidas de todos los integrados se conectan mediante cables planos al display, tal como se puede ver en la foto. La correspondencia de pines es tal cual se puede ver en el esquema de este artículo y en el del display de la primera parte.
Por último, hemos incluido una pequeña etapa de alimentación, con un regulador de voltaje del tipo LM7805 y algunos condensadores asociados, que se encargan de convertir los 12 voltios de corriente continua que deberá entregar la fuente de alimentación del proyecto a 5 voltios perfectamente estables, destinados a alimentar los LEDs del display y los integrados del registro de desplazamiento.
La placa controladora
Una pequeña placa dotada de un microcontrolador y unos pocos componentes accesorios es la encargada de dar vida al proyecto.
Hemos elegido un PIC16F628A, debido a su bajo costo y disponibilidad, aunque hay muchos modelos más que pueden tranquilamente servir para este proyecto. Si el lector dispone en su cajón de componentes algún otro microcontrolador, puede animarse a modificar esta parte del display para utilizarlo.
A pesar de que el PIC16F628A puede funcionar con un oscilador interno, hemos decidido incluir un cristal externo de 4MHz, conectado a los pines 15 y 16, que junto a un par de condensadores de 22pF se encargarán de generar los pulsos de reloj necesarios para que el microcontrolador funcione. Este cristal brinda una estabilidad mayor, indispensable si elegimos crear un reloj con este display.
Los pines 6, 7, 8 y 9, correspondientes a los bits 0, 1, 2 y 3 del puerto B, serán los encargados de llevar las señales necesarias a la placa del registro de desplazamiento, por lo que están conectados a una ficha idéntica a la existente en dicha placa. Hemos colocado cuatro resistencias de 100k, que unen cada uno de estos pines a masa, de manera de reducir al máximo la posibilidad de que el ruido eléctrico de algún artefacto funcionando en los alrededores del display introduzca datos espurios en las líneas de control.
Siempre teniendo en cuenta la utilización del display como reloj y termómetro, también consideramos útil la inclusión de un par de pulsadores, que tendrán la función de ayudarnos a poner en hora el reloj, o pasar de la función “reloj” a la del termómetro. También se incluyeron las consabidas resistencias de 100K para evitar disparos accidentales, y dejamos para el soft la tarea de eliminar los rebotes que se puedan producir en la tecla.
Quedan varios pines disponibles en el microcontrolador, que podemos destinar a la conexión de diferentes sensores, cuyo valor leído puede ser exhibido en el display. Nosotros solamente vamos a emplear el pin 10, que se corresponde con el bit 4 del puerto B, para conectar un sensor del tipo DS1820, tal como comentamos en la primera parte de este artículo.
Este sensor nos entregará directamente en binario (y en forma serial, por eso “consume” solo un pin de E/S) la temperatura leída. Además, incluye algunas funciones extra como una pequeña memoria EEPROM, alarmas, y la posibilidad de conectar varios sensores del mismo tipo en un solo hilo, pero que no implementaremos en este proyecto.
Otra forma de controlar el display
No podemos dejar de decir que existe otra forma de controlar este display. En efecto, si el lector dispone de un ordenador con un puerto paralelo, tranquilamente se puede escribir un programa en Visual Basic (o en realidad, en cualquier otro lenguaje de los disponibles) que maneje los pines del puerto LPT, y conectar, mediante un cable y una ficha apropiados, cuatro de sus pines de salida (por ejemplo D0 a D3) y el negativo. El programa debe generar los pulsos de CLOCK, DATOS, RESET y encendido/apagado del display. De esta manera, se puede mostrar la hora del ordenador en el display, el tiempo restante de algún proceso que estemos realizando, etc.
Justamente para que diferentes formas de control sean posibles, se incluyó un regulador de voltaje para el display y el registro de desplazamiento, y también en la placa de control, de manera que el PIC esté correctamente alimentado, y lo mismo el display, independientemente de la forma de control que elijamos.
La próxima entrega
Efectivamente, hemos terminado con la parte “hard” del display. En la próxima (y última) entrega de esta serie veremos cómo crear un software capaz de aprovechar las características del display para mostrar la hora y la temperatura que recoja el sensor conectado a la placa de control.
Para los más ansiosos, les adelantamos que utilizaremos una versión del lenguaje BASIC para microcontroladores de Microchip, llamada Mikrobasic. La hemos elegido no solo por lo avanzado de su entorno de desarrollo y por la gran cantidad de librerías incluidas, que facilitan mucho la programación, sino porque es posible bajar del sitio del fabricante una versión de prueba que, si bien limita el tamaño máximo del código generado a 2Kb., es más que suficiente para proyectos pequeños como este.
Aquellos que quieran ir ganando tiempo pueden descargar e instalar este programa, e incluso leer la abundante documentación que lo acompaña, de manera que el próximo artículo los encuentre listos para poner manos a la obra.
Hasta la próxima.
Más información Más información