En esta segunda entrega explicaremos la teoría y practica del registro de desplazamiento que es el corazón del display. También abordaremos la construcción del cerebro del proyecto: la placa controladora.Por si 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 si.
Para que sea capaz de representar algún dato, tenemos que lograr controlar individualmente cada segmento que componen cada uno de los cuatro dígitos, y también los dos LEDs centrales (los “:”).
Existen muchas maneras de hacer esto, y por lo general se opta por una de tres alternativas posibles. La primera de ella, 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.
A segunda opción es el multiplexado. Este consiste en utilizar una línea de control para cada digito, y siete mas 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 si. El software de control, que debe ser mas elaborado que en el primer caso, debe encargarse de seleccionar un digito, encender los segmentos que sean necesarios, esperar un cierto tiempo (algunos milisegundos), luego seleccionar el segundo digito, encender los segmentos que correspondan, volver a esperar….y así hasta el cuarto digito. Esta operación, repetida continuamente y a gran velocidad permite que el ojo humano, debido a su lentitud al reaccionar al 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.
La tercera alternativa de la que habláramos antes es utilizar un registro de desplazamiento (en ingles, 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 pines, 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 ultimo 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 que 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 el, 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 pagina, se puede como conectar entre si 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 esta 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 ultima salida de cada 74LS164N esta 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 ultimo, 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 de proyecto a 5 voltios perfectamente estables, destinados a alimentar los LEDs del display y los integrados del registro de desplazamiento.
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 encargaran 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 conectadas 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 disponible 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 primer parte de este articulo.
Este sensor nos entregara 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.
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 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 que se incluyo 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 este correctamente alimentado, y lo mismo el display, independientemente de la forma de control que elijamos.
Efectivamente, hemos terminado con la parte “hard” del display. En la próxima (y ultima) entrega de esta serie veremos como 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 gran cantidad de librerías incluidas, que facilitan mucho la programación, sino por que 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 mas que suficiente ara 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 articulo los encuentre listos para poner manos a la obra.
Hasta la próxima.