domingo, 19 de enero de 2014

Los circuitos periféricos

En la entrada anterior titulada “Construcción de una computadora con chips” vimos un ejemplo práctico de un modelo de microcomputadora de construcción casera usando un puñado de unos cuantos circuitos integrados y ferretería electrónica adicional para unir los componentes montándolos en una tabla fenólica perforada o su equivalente.

Una vez que se cuenta con un modelo básico de máquina, pudiera suponerse que para ampliar las capacidades y funciones de la máquina se vuelve necesario recurrir a un procesador más potente con más funciones para poder tener una máquina más sofisticada que sea capaz de poder hacer más cosas. Sin embargo, esto no es necesariamente cierto. En la mayoría de los casos, más que aumentar la potencia del procesador con más instrucciones, lo que permite hacer más cosas con el mismo procesador es un aumento en la cantidad de memoria de acceso aleatorio RAM disponible. Posteriormente se verá en la serie de entradas tituladas “La máquina Turing” que una máquina que cuente con una cantidad ilimitada de memoria RAM (o lo suficientemente grande para ser considerada casi infinita) es capaz de implementar cualquier programa de cómputo por sofisticado que sea.

De cualquier modo, para aumentar las capacidades de entrada/salida, se vuelve deseable proporcionarle a cada procesador una familia compatible de circuitos periféricos conocidos como controladores que permite descargar sobre estos circuitos periféricos funciones que de otro modo podrían tener a la máquina sumamente atareada distrayendo su atención hacia tareas que podrían ser efectuadas independientemente por circuitos periféricos. Es así como tenemos chips tales como controladores de video, controladores de impresora, controladores USB, etcétera. Por diseño inteligente, los circuitos periféricos son producidos de modo tal que puedan ser interconectados directamente hacia el procesador del cual son parte de la familia, usándose incluso la misma terminología (simbología) para denotar las terminales y así simplificar las interconexiones.

Los circuitos periféricos deben actuar siempre en forma coordinada y sincronizada con el procesador. Hay dos maneras distintas de lograr tal cosa:
1) Mediante el método de “encuesta” conocido como polling en el cual el microprocesador en forma repetitiva le está preguntando a cada periférico: ¿Tienes alguna tarea pendiente? ¿Tienes algo que quieras enviarme? ¿Hay algo que quieres que te envíe? Esto se logra mediante un registro (flip-flop) de un “bit” conocido como una bandera que obra en cada procesador. En lógica positiva, si la bandera tiene un valor lógico “0”, el procesador continúa con lo que estaba haciendo; y si la bandera tiene un valor lógico “1” el procesador detiene en forma ordenada lo que estaba haciendo, poniendo todos los datos que obran en sus registros en una pila de datos y yendo al controlador para obtener del mismo la información que le envía o enviarle la información que pide. Una vez que la tarea pedida por el periférico al procesador ha sido atendida, los valores que habían sido puestos temporalmente en la pila son restaurados a los registros en los que estaban, y así el procesador puede continuar con lo que estaba haciendo antes de atender la solicitud del controlador.

2) El método de las interrupciones. El método anterior tiene la desventaja de que una instrucción dedicada a estar checando el estado de las banderas de los circuitos periféricos, repetida miles de veces cada segundo, puede consumir demasiado tiempo de cómputo del procesador retardando su respuesta para otros asuntos. El método de las interrupciones supone que el procesador tiene integrada tal función en por lo menos una de sus terminales (frecuentemente identificada como INTERRUPT o INT), o mejor aún tiene varias terminales de interrupción (INT 0, INT 1, INT 2, etc.). Con esto, el procesador no pierde tiempo en llevar a cabo ningún “polling”, es el circuito periférico el que llama su atención enviándole una requisición de interrupción. Al recibir la solicitud de interrupción, el procesador detiene en forma ordenada lo que estaba haciendo poniendo todos los datos que obran en sus registros en una <i>pila</i> de datos y yendo al controlador para obtener del mismo la información que le envía o enviarle la información que pide. De nueva cuenta, una vez que la tarea pedida por el periférico al procesador ha sido atendida, los valores que habían sido puestos temporalmente en la pila son restaurados a los registros en los que estaban, y así el procesador puede continuar con lo que estaba haciendo antes de atender la solicitud de interrupción enviada por el controlador.
La computadora Elf básica es quizá lo más primitivo que se pueda encontrar a nivel de construcción de aficionados a la electrónica. Esperaríamos que la electrónica básica de la máquina, el hardware, pudiera ser mejorado de alguna manera para obtener una salida un poco más interesante que un par de dígitos hexadecimales, algo así como una imagen visual en un monitor o en una pantalla de televisión. Y en efecto, esto es lo que se logró con la introducción de un circuito integrado especializado, diseñado y fabricado por la misma empresa (RCA) que produjo el procesador COSMAC CDP 1802, el chip de video CDP 1861 (en la literatura técnica inglesa es lo que se conoce como un video display controller), el cual cuando fue introducido tenía un costo de apenas 20 dólares, considerado como una verdadera ganga en aquél entonces tomando en cuenta las capacidades que podía ofrecer, porque con la simple adición de este circuito integrado era posible enviar salida directamente de la memoria RAM hacia una pantalla de televisión.

Es importante aclarar que la señal de video enviada por el chip de video CDP 1861, aunque era obtenida de una base de datos digital (o mejor dicho, un conjunto de bytes con los cuales era posible conformar una imagen), terminaba siendo enviada como una señal analógica, lo cual en estos tiempos en los que hay monitores y televisores plenamente digitales es considerado como tecnología obsoleta. Sin embargo, cuando hicieron su aparición los primeros microprocesadores, la televisión digital no existía, y ni siquiera había monitores digitales aunque fuese de baja resolución exceptuando unos cuantos bastante primitivos que de cualquier modo tenían precios excesivamente elevados y solo podían ser adquiridos para usos militares en los que el costo no es una consideración de tanto peso.

Otra cosa importante a destacar es que en ese entonces había dos tipos de televisor: el televisor de blanco y negro, y el televisor de colores que era tres o cuatro veces más caro que el televisor de blanco y negro. En el circuito que será considerado, se supone que el televisor encargado de reproducir la imagen en video analógico puede ser ya sea un televisor de blanco y negro o un televisor a colores (las imágenes producidas por el controlador de video del que aquí hablaremos son monocromáticas), habido el hecho de que por compatibilidad con la tecnología previa una señal analógica a colores tenía que poder ser procesada también por un televisor en blanco y negro (sin colores, naturalmente, usándose tonos de grises para simular la luminancia relativa de los distintos colores).

Aún otra cosa importante. El circuito de la computadora Elf II supone que la señal de video es enviada no a través de la entrada de lo que normalmente es la entrada de la señal a través de la antena, sino a través de los circuitos de entrada de procesamiento de video interiores al televisor de colores, lo cual simplificaba los costos, ya que el tratar de enviar la señal de la computadora Elf II a través de la entrada de la antena hubiera requerido “montar” la señal de video analógica en una señal sinosoidal de radiofrecuencia elevada en el proceso conocido como modulación. A continuación se tiene un ejemplo de la señal combinada que se obtiene al sobreimponer una onda moduladora senoidal sobre una onda portadora de mucho mayor frecuencia (la onda portadora es la que es sintonizada en los receptores AM) en lo que se conoce como modulación de amplitud:




En vez de modular la amplitud de la onda portadora podemos desde luego modular la frecuencia de la misma en lo que se conoce como modulación de frecuencia:




Afortunadamente, en aquél entonces estaban disponibles televisores analógicos que además de la entrada obligatoria a través de la antena proporcionaban dos tomas de entrada directa tanto para video como para audio. Igualmente importante es destacar que el proceso de modulación de señal para su transmisión desde las estaciones así como la desmodulación de la misma no ha cambiado en nada en los actuales televisores digitales, es exactamente el mismo proceso, excepto que la señal que modula la señal de alta frecuencia es una señal de video digital en lugar de una señal de video analógica.

Es imperativo destacar que el proceso de modulación de señal de televisión no ha cambiado en nada en los actuales televisores digitales desde que se hizo la transición a la televisión digital, se trata exactamente del mismo proceso de modulación, excepto que la señal que modula a la señal de alta frecuencia es una señal de video digital en lugar de una señal de video analógica.

La microcomputadora Elf, ampliada en sus capacidades para poder enviar una señal de video (analógica) a un televisor de aquél entonces (también analógico), fue rebautizada como la Elf II, y bajo este nombre un “kit” completo de componentes para su ensamble en casa por los aficionados fue puesto en venta por la empresa Netronics creada en ese entonces única y exclusivamente para la comercialización de este producto.

Para poder obtener en un televisor analógico la imagen de video enviada por la computadora Elf mejorada, no basta con el solo hecho de agregar el chip CDP 1861 a la computadora Elf básica. Era necesario agregar también dos circuitos integrados adicionales para conformar el oscilador de cristal

Este es el diagrama del circuito integrado CDP 1861:




Internamente, chips periféricos como el controlador de video CDP 1861 son una cosa muy curiosa, ya que a diferencia de los circuitos integrados de naturaleza digital que únicamente contienen en su interior funciones lógicas que sólo trabajan con dos niveles distintos de voltaje (el que corresponde al “cero” lógico y el que corresponde al “1” lógico), y los circuitos integrados lineares (tales como los amplificadores de audio) identificados a veces con el prefijo LM (Linear Module) que manejan señales analógicas que pueden tomar cualquier valor de voltaje entre cierto rango permisible, estos chips especializados incorporan ambas cualidades, algo que en un principio no fue cosa fácil de lograr.

Para poder obtener en un televisor analógico la imagen de video enviada por la computadora Elf II, no basta con el solo hecho de agregar el chip CDP 1861 a la computadora Elf básica. Era necesario agregar también dos circuitos integrados adicionales para conformar el oscilador de cristal de cuarzo que opera con una frecuencia precisa de 3.579545 Megahertz (los técnicos en electrónica abrevian esta frecuencia refiriéndose a ella simplemente como 3.58 Megaherz, aunque de cualquier modo la frecuencia sigue siendo una frecuencia bastante precisa a 7 dígitos de precisión, algo que sólo se puede lograr con los cristales de cuarzo fabricados precisamente para obtener frecuencias bastante precisas sin tolerancias de variación).

Los dos circuitos adicionales al CDP 1861 que se vuelve necesario agregar a la computadora Elf básica son requeridos para proporcionar dos tipos de pulsos usados para la reproducción de una señal de televisión analógica: los pulsos de sincronía horizontal y los pulsos de sincronía vertical. Para entender de lo que estamos hablando, es necesario dar un repaso a la forma en la cual se reconstruye la imagen en un televisor analógico (estos fundamentos aún no son obsoletos, siguen siendo usados en los televisores digitales así como los monitores de computadora para formar las imágenes en la pantalla). En cualquier televisor, ya sea analógico o digital, después de haberse sintonizado el canal de televisión (lo cual se logra sintonizando el receptor a la frecuencia de la onda portadora que es distinta para cada canal) y después de haberse removido la onda portadora (una onda senoidal de alta frecuencia) para dejar únicamente la señal de video, la imagen se reconstruye subdividiendo la pantalla en cierta cantidad de líneas horizontales que son las que se encargan de “dibujar” la imagen en la pantalla. Se traza la primera línea horizontal de la imagen en la parte superior de la pantalla yendo de izquierda a derecha, de la orilla izquierda a la orilla derecha:




provocando una variación en la intensidad del haz electrónico y con ello una una variación en la luminosidad de los fósforos (en la tecnología antigüa de tubos de rayos catódicos CRT) o en la luminosidad de los puntitos LED reconstruyéndose así la primera línea de la imagen. Tras esto, se empieza con el trazo de la segunda línea que va debajo de la primera línea después de haber regresado el haz electrónico a la orilla izquierda de la pantalla, continuándose con el trazo de la tercera línea, la cuarta línea, y así sucesivamente hasta llenar la pantalla con una imagen conocida como marco, formada por la luminosidad de 512 líneas horizontales:




La persistencia de la luminosidad de los fósforos (en la tecnología antigüa ) permitía tener una imagen completa por el tiempo suficiente para percibirla como una sola imagen fija con el ojo mientras se procedía a enviar la siguiente imagen de video. La reconstrucción de la imagen en el televisor reproduce fielmente el proceso mediante el cual la imagen se forma en las cámaras en los estudios de televisión. El tiempo de “recorrido” del haz electrónico de izquierda a derecha tiene que estar sincronizado estrechamente con el tiempo de salto de la última línea en el borde inferior de la pantalla a la primera línea de la siguiente imagen que de nueva cuenta empieza en el borde superior de la pantalla, y es por ello que se requieren dos tipos de pulsos de sincronía, un pulso de sincronía horizontal requerido entre el trazo de cada línea horizontal, y un pulso de sincronía vertical insertado en el lapso en el cual se pasa de la construcción de una imagen completa a la siguiente (o bien, en la reproducción de un marco a otro).

A continuación se muestra en la parte superior la fotografía tomada con la ayuda de un osciloscopio de una señal de video compuesto a la cual aún no se le han removido ni los pulsos de sincronía horizontal ni los de sincronía vertical, con un pulso de sincronía horizontal entre lo que vienen siendo dos líneas horizontales de video; y mostrándose en la parte inferior la representación de lo que viene siendo el final de la última línea horizontal de video en la parte inferior de la pantalla y la primera línea horizontal de la imagen siguiente con pulsos de sincronía vertical como los que son usados entre cada par de imágenes sucesivas:




Los pulsos de sincronía horizontal y vertical son removidos de la señal de video (y enviados a los circuitos de sincronización del televisor que posteriormente deben separar los pulsos de sincronía horizontal de los pulsos de sincronía vertical) antes de que la señal sea reproducida en la pantalla, y por lo tanto no afectan la imagen. Si se observa el diagrama del CDP 1861 dado arriba, se puede apreciar una terminal COMPOSITE SYNC (terminal 6) que envía la señal mixta que contiene ambos pulsos de sincronía horizontal y vertical, y otra terminal VIDEO (terminal 7) que envía la señal de video digital al televisor.

Obviamente, se requiere separar los pulsos de sincronía vertical de los pulsos de sincronía horizontal generados por el chip CDP 1861, y esta es la razón por la cual se requieren dos circuitos integrados adicionales.

La forma de interconectar los componentes para obtener de la computadora Elf una señal de video en una pantalla de televisión está descrita en la cuarta parte de la serie de artículos publicados en aquél entonces por la revista para aficionados <i>Popular Electronics</i>, específicamente la cuarta parte publicada en julio de 1977, y reproduciremos aquí los detalles técnicos relevantes de dicha revista.

Aunque antes de empezar con un proyecto de esta índole parecería necesario agregarle más memoria RAM a la computadora Elf básica para obtener una imagen completa en un televisor, ello no es indispensable (aunque ciertamente deseable). Se supondrá aquí que se tiene la misma capacidad de memoria RAM instalada que la descrita anteriormente, esto es, 256 bytes, lo cual nos permitirá obtener una imagen. Desafortunadamente, no se podrá lograr más al no quedar memoria RAM disponible para tratar de hacer alguna programación con la computadora Elf.

El diseño que se describe aquí emplea la capacidad de acceso directo a la memoria (DMA, Direct Memory Access) construída internamente en el microprocesador 1802, trabajando al unísono con el chip de video 1861, el cual nos permite hacer un “mapeo” de cualquier segmento de 256 bytes de la memoria RAM al receptor de televisión o monitor empleado. En virtud de la velocidad a la cual debe operar el chip controlador de video 1861, el procesador 1802 se encarga de cederle al 1861 un acceso directo a la memoria RAM, y los ocho bits de cada byte son enviados por la memoria RAM en forma paralela (no bit por bit, sino byte por byte) al 1861 en sus terminales de entrada 13 a 20 (DATA IN Ø, DATA IN 1, DATA IN 2, etc.) La salida producida por el chip 1861 es una señal compuesta de 1 volt que contiene tanto la señal de video como los pulsos de sincronía. Cada byte contenido en la memoria RAM es “proyectado” (o mejor dicho, “convertido”) hacia una porción de la pantalla del modo que se muestra a continuación:




El segmento seleccionado de la memoria RAM aparece en la pantalla como un arreglo rectangular de cuadrados pequeños (bloquecitos cuadrados) que representan los bits de memoria individuales. Si un “bit” de la memoria es un “1”, el cuadrado apropiado será iluminado en la pantalla con un color blanco, mientras que si el bit es un “0” el cuadrado no estará iluminado por el haz electrónico.

En un sistema más sofisticado con una mayor cantidad de memoria RAM, podemos almacenar distintos patrones de bits (imágenes) en la memoria y, usando programación (software), hacer que las imágenes aparezcan sucesivamente en la pantalla para producir efectos de animación. Estos son los mismos principios que se utilizan para producir imágenes mucho más sofisticadas de alta resolución, todo es cuestión de agregar más memoria RAM según se requiera.

Puesto que la computadora Elf básica tiene únicamente 256 bytes de memoria, veremos cómo mostrar en la pantalla contenido de la memoria RAM que será usado para la generación de una imagen. El “mapeo” (tomando prestado el término que usan los matemáticos en la materia de Álgebra Linear) consiste en un arreglo de 64×32 “bloques de imagen” (ocho bytes con ocho bits por cada byte en cada bloque de imagen). El byte en la localidad M(0000) de la memoria RAM es mostrado en la esquina superior izquierda de la pantalla; cada renglón en la pantalla es equivalente a ocho bytes de memoria. El byte en la localidad M(00FF) de la memoria es puesto en la esquina inferior derecha de la pantalla. De este modo, hay 64 bloques de imagen de izquierda a derecha, y los mismos bloques ocupan 32 espacios de arriba hacia abajo.

Cambiando el patrón de bits dentro de la memoria RAM permite cambiar el patrón de imagen que se ve en la pantalla:




Hablaremos ahora sobre la operación del circuito usado para la generación de las señales de video que son enviadas al televisor analógico. El diagrama esquemático completo para el sistema de producción de imágenes se muestra a continuación en las siguientes dos figuras:




El circuito en la figura (A) consta de cinco componentes, empezando por el chip 1861 desde luego, una toma tipo “phono” para la salida del video producido por el chip, y tres resistencias. El circuito (B) aunque parece un poco complicado en realidad no lo es, ya que se trata simplemente de un oscilador usado para reemplazar al cristal de cuarzo original usado en la computadora Elf básica. Las dos compuertas lógicas NAND (en color amarillo) del lado derecho interconectadas al cristal de cuarzo XTAL junto con las dos resistencias R4 de 470 ohms en realidad no están siendo usadas como compuertas lógicas (obsérvese que ambas entradas en cada NAND están conectadas, convirtiendo a cada NAND en un simple inversor lógico), este tipo de arreglo convierte a esta sección del circuito en un oscilador que puede funcionar a una frecuencia muy precisa con poquísima variación, y el tercer NAND conectado a la terminal de reloj C (terminal 3) del flip-flop D simplemente ayuda a “limpiar” la señal obtenida del oscilador convirtiéndola en una secuencia casi ideal de pulsos cuadrados. Puesto que la señal que está entrando a la terminal de reloj del flip-flop tipo D tiene una frecuencia igual a 3.579545 Megahertz, la salida Q del flip-flop D será una serie de pulsos cuadrados con una frecuencia igual a la mitad de la frecuencia aplicada en la entrada C, o sea que Q dará un tren de pulsos cuadrados con una frecuencia de 1.789773 Megahertz. El circuito (B) es necesario porque para poder usar la capacidad gráfica del chip 1861 la frecuencia del cristal original debe ser igual a 1.760640 Megahertz para generar los pulsos de sincronía horizontal y vertical correctos que requiere el televisor, y los cristales de esta frecuencia (a diferencia de los cristales de 3.579545 Megahertz) pueden ser algo caros. El circuito (B) usa un cristal de cuarzo mucho más económico (por los volúmenes en que se produce) de 3.58 Megahertz y un divisor de frecuencia (esta es la función proporcionada en el circuito por el flip-flop D) que genera una frecuencia de 1.789773 Megahertz, que es lo suficientemente cercana para que el chip 1861 pueda trabajar correctamente.

El chip 1861 utiliza el mismo reloj que el microprocesador 1802 para “disparar” contadores internos en el 1861 para proporcionar una señal de sincronía compuesta (sincronía horizontal y sincronía vertical) en la terminal 6 del chip 1861. La imagen en la pantalla es refrescada de la memoria 60 veces cada segundo, lo cual es logrado enviando una solicitud de interrupción (interrupt request) desde la terminal 3 del 1861 al microprocesador 1802 al mismo ritmo.

Cuando el microprocesador 1802 recibe una solicitud de interrupción, temporalmente detiene el programa que esté ejecutando e inmediatamente se ramifica (mediante un salto incondicional) a la rutina de interrupción que previamente se haya almacenado en la memoria RAM. Este salto ocurre cuando el registro P interno al microprocesador es automáticamente fijado en 1 (00000001) y el registro X del microprocesador es fijado en 2 (00000010). El contador de programa de la rutina de interrupción siempre es el registro R1 del microprocesador, que debe ser inicializado al domicilio de la rutina de interrupción (en la memoria RAM) antes de que el generador de video 1861 sea activado y empiece a enviar interrupciones al microprocesador 1802. Un pulso de la terminal NØ del 1802 es enviado al pin 10 del 1861, permitiendo que el 1861 comience a enviar señales de interrupción. Se puede usar una instrucción 69 (hexadecimal) para generar el pulso de activación del chip 1861. El 1861 siempre es apagado cuando la computadora Elf es detenida con el interruptor RUN puesto hacia abajo (en la posición de apagado).

Estaremos haciendo referencia al siguiente programa de prueba que puede ser cargado (antes de echar a andar el programa) bit-por-bit byte-por-byte en la memoria RAM de una microcomputadora Elf a la que se le hayan agregado los circuitos que posibilitan una salida de video (las “etiquetas” en la tabla son meros puntos de referencia, lugares hacia los cuales puede ocurrir un salto del programa, salto que desde luego es producido por las instrucciones en lenguaje de máquina “Bytes” almacenadas en las localidades de memoria RAM “M”):


Programa de Prueba
 Etiqueta  M Bytes Comentarios
 Inicio 0000 90 B1 B2 R1.1,R2.1 = 00
0003 B3 B4 R3.0,R4.0 = 00
0005 F8 2D A3 R3.0 = (principal)
0008 F8 3F A2 R2.0 = (pila)
000B F8 11 A1 R1.0 = (interrupt)
000E D3 P = 3 (ir a principal)
 Retorno 000F 72 restaurar D,R2+1
0010 70 restaurar XP,R2+1
 Interrupción  0011 22 78 R2-1, guardar XP @ M2 
0013 22 52 R2-1, guardar D @ M2
0015 C4 C4 C4 no-op (9 ciclos)
0018 F8 00 B0
001B F8 00 A0 R0 = 0000(refrecar ptr)
 Refrescar 001E 80 E2 D = R0.0
---- ------ 8 ciclos DMA (R0+8)
0020 E2 20 A0 R0-1,R0.0 = D
---- ------ 8 ciclos DMA (R0+8)
0023 E2 20 A0 R0-1,R0.0 = D
---- ------ 8 ciclos DMA (R0+8)
0026 E2 20 A0 R0-1,R0.0 = D
---- ------ 8 ciclos DMA (R0+8)
0029 3C 1E ir a refrescar (EF1 = 0)
002B 30 0F ir a refrescar (EF1 = 1)
 Principal 002D E2 69 X = 2, encender TV
002F 3F 2F esperar para  IN oprimido 
0031 6C A4 fijar MX,D,R4.0 = toggles 
0033 37 33 esperar para IN liberado
0035 3F 35 esperar para IN oprimido
0037 6C fijar MX,D = toggles
0038 54 14 fijar M4 = D,R4+1
003A 30 33 ir a M33


El efecto del programa anterior no es muy difícil de llevar a cabo si se tiene una computadora Elf (o un buen emulador de la computadora Elf) a la mano. Una vez que el programa se está ejecutando, viendo directamente la pantalla del televisor al cual está conectada la computadora Elf podemos cambiar ciertos bytes en la memoria y ver de inmediato el efecto del cambio en la pantalla del televisor.

En el programa mostrado en la tabla anterior, el registro R1 del microprocesador es fijado al domicilio de la rutina de interrupción metida a partir de la localidad de la memoria M(0011), el registro R2 es fijado al domicilio del área de trabajo (o pila) usada subsecuentemente para almacenamiento de bytes, el registro R3 es fijado a la parte principal del programa que inicia en M(002D), y fijando P.=.3 provoca una ramificación (salto incondicional) a M(002D) con el registro R3 haciendo las veces de contador de programa. El programa principal permite el ingreso de bytes en cualquier momento mediante los interruptores de palanca (toggle) de la computadora Elf. Esto le permite a uno ver lo que está sucediendo en la pantalla del televisor conforme los bytes en la memoria RAM son cambiados. El programa se repite en bucle sobre sí mismo hasta que una señal de interrupción es enviada por el chip de video 1861, activado por la instrucción 69 puesta en la localidad de la memoria M(002E)

Exactamente 29 ciclos después de haberse inicializado la rutina de interrupción, el controlador de video 1861 requisiciona ocho bytes secuenciales de memoria poniendo un nivel lógico “bajo” en la línea de requisición de interrupción DMA-OUT (terminal 2 del 1861, obsérvese que es lógica negativa y por lo tanto lo que se requiere es un “0” y no un “1” para poner en marcha la acción indicada por la simbología). Esto ocasiona automáticamente que ocho bytes de la memoria, domiciliados por el registro RØ del procesador, sean procurados secuencialmente y transferidos al controlador de video 1861 a través del bus de datos. Obsérvese que las instrucciones C4 en M(0015) son instrucciones especiales no-op (no operación, usadas para “matar” tiempo) que requieren de tres ciclos para cada ejecución. Estas son usadas para proporcionar el retardo de tiempo requerido para el comienzo de la rutina de interrupción y la primera requisión DMA de ocho bytes generada por los circuitos del 1861.

Cada uno de los ocho bytes de “refrescamiento de imagen” (aunque la imagen sea una imagen estática en la pantalla del televisor, la misma imagen estática tiene que ser puesta por el controlador de video una y otra y otra vez en la pantalla del televisor produciendo la apariencia de una imagen fija en vez de una sola imagen que dura apenas una décima de segundo y se apaga después de su breve existencia en el televisor) requeridos por el 1861 es convertido internamente a una forma serial de bits y es usada para proporcionar los pulsos de luminancia (brillo) que salen del chip de video en su terminal 7 (VIDEO). El rastro (raster) actual en la pantalla consiste de 262 líneas horizontales por cada marco, y en el televisor se reproducen 60 marcos cada segundo. Cada bloquecito en la pantalla tiene una altura de cuatro líneas de rastro, lo que significa que cada renglón de ocho bits en la pantalla tiene que ser repetido cuatro veces. Con la rutina de interrupción, el registro RØ es inicialmente (y sucesivamente) puesto desde M(0000) hasta M(0007) para ser procurado y exhibido en la pantalla. El tiempo de cada línea de rastro es de exactamente 14 ciclos para permitir la transferencia de ocho bytes (ocho ciclos) más la ejecución de tres instrucciones de dos ciclos durante el tiempo de cada línea de rastro. Siguiendo a los ocho ciclos de acceso directo a la memoria DMA requeridos para “refrescar” los primeros ocho bytes, RØ es restaurado a su valor original para que siga apuntando a los mismos ocho bytes.

Las instrucciones E2 20 A0 puestas en las localidades de memoria M(0020), M(0023) y M(0026) son usadas para ocupar seis ciclos de máquina entre las requisiciones DMA y para restaurar el registro RØ a su valor inicial incrementándolo en ocho durante la requisición DMA de ocho bytes. La instrucción 20 decrementa RØ.1 de regreso a su valor inicial si se ha atravesado el límite de una página durante los ocho ciclos DMA precedentes.

Después de que el primer grupo de ocho bytes ha sido mostrado en lo que equivale a cuatro tiempos de rastro de línea, se le permite avanzar al registro RØ al siguiente grupo de ocho bytes a ser exhibido. El proceso es continuado hasta que 32 grupos de ocho bytes cada uno (256 en total) han sido reproducidos en la pantalla del televisor. En este punto, los circuitos internos en el controlador de video 1861 ocasionan que EF1.=.1 (en la terminal 9 del 1861) y la rutina de interrupción concluye.

El refrescamiento del rastro involucra la puesta en la pantalla de 32 grupos de ocho bytes, y cada renglón de ocho bytes es repetido en cuatro trazos de líneas de rastro. Esto implica que el refrescamiento de la imagen atasca al µP 1802 por un poco más de 128 líneas de rastro (32×4). Puesto que hay 262 líneas de rastroi por cada marco, el µP invierte alrededor del 50% de su tiempo llevando a cabo la función de refrescamiento de imagen.

Puesto que los relojes del µP 1802 y el controlador de video 1861 tienen que permanecer sincronizados todo el tiempo, ninguna de las instrucciones de tres ciclos (esto es, instrucciones en lenguaje de máquina que requieren no de un byte o de dos bytes sino de tres bytes) descritas en el manual del usuario del procesador 1802 deben ser usadas de manera concurrente con esta puesta de imagen. La única excepción permisible es el uso de la instrucción C4 en la rutina de interrupción.

El programa de muestra dado en la tabla anterior fué diseñado para correr en sistemas con memoria RAM expandida así como en la Elf básica de 256 bytes. En el sistema expandido, simplemente se cambian los bytes en M(0019) y en M(001C) de modo tal que el registro RØ apunte inicialmente a cualquier segmenro de 256 bytes de la memoria (estos segmentos de memoria con conocidos como páginas) que se quieran mostrar en el rastro de la imagen en la pantalla. Se puede escribir cualquier otro programa principal para que se ejecute en forma concurrente con esta rutina de interrupción.

El chip 1861 también puede ser utilizado para mostrar en la pantalla cualquier número de bytes desde ocho hasta 1024 reescribiendo la rutina de interrupción. Por ejemplo, cámbiese el byte en M(0024) de 20 a 80, y se verán 512 bytes mostrados en la pantalla del televisor como 64 bloquecitos horizontalmente por 64 bloquecitos verticalmente. Si solo se cuenta con 256 bytes de memoria en el sistema, se tendrán los mismos 256 bytes repetidos por partida doble en la pantalla. Cuando se muestran 512 bytes, cada bloquecito representa la mitad de la altura de los que con mostrados cuando se muestran 256 bytes.

Una de las ventajas principales de mapear directamente de la memoria RAM hacia el monitor o rastro de la imagen en el televisor es la habilidad para manipular la puesta en pantalla usando el conjunto normal de instrucciones. En sistemas que emplean un “buffer” (memoria pequeña de almacenamiento temporal empleando flip-flops) para el refrescamiento, se requiere de instrucciones especializadas para cambiar los contenidos del buffer. Además, la memoria de buffer cuesta más dinero. Con el empleo de refrescamiento de buffer a lo que es animación, se deben almacenar dos patrones de imagen en la memoria y alternativamente transferirlas hacia la memoria de buffer. Usando el sistema de graficado mostrado aquí, podemos almacenar los mismos patrones de dos imágenes en la memoria pero únicamente se requiere cambiar el valor inicial del registro RØ para ponerlas en la pantalla en forma alternada. No solamente se ahorra el costo de un buffer de refrescamiento, la programación requerida puede ser simplificada considerablemente.

En la cuarta parte (julio de 1977) de la serie de artículos sobre la computadora Elf publicados por la revista Popular Electronics se proporciona el listado de partes adicionales requeridos para proporcionarle a la computadora básica Elf una salida de video con el chip controlador de video 1861, la cual por completitud se reproduce a continuación:
Listado de partes
C1 -- capacitor de disco de 330 picofarads
IC1 -- CDP 1861 circuito integrado de video (RCA)
IC2 -- 74L00 circuito integrado de baja potencia con bloques NAND de entrada dual
IC3 -- 7474 circuito integrado con dos flip-flops tipo D
J1 -- Enchufe tipo Phono
Todas las resistencias son de 1/4-watt y 10% de tolerancia:
R1,R6 -- 10,000 ohms
R2 -- 2000 ohms
R3 -- 1000 ohms
R4,R5 -- 470 ohms
XTAL -- cristal de cuarzo de 3.579545 Megahertz
Miscelánea. -- Circuito impreso o tabla fenólica perforada, sockets de circuitos integrados (uno de 24 pins, dos de 14 pins), soldadura, tornillería, etcétera
La construcción de la computadora Elf mejorada incorporando el controlador de video 1861 a partir de la computadora Elf básica resulta ser mucho más fácil de lo que parece. El circuito de graficados puede ser montado en la tabla fenólica original, cambiando y relocalizando el cristal de cuarzo y los dos capacitores hacia el centro de la tabla fenólica. Así, el chip 1861 va en el extremo superior izquierdo de la tabla, y la toma de enchufe de salida (de video) va puesta en la parte trasera del chasís (se acostumbra poner las tomas de entradas y salidas de cables interconectores en la parte trasera de la mayoría de los equipos electrónicos). Las resistencias R1 y R2 van montadas en “clips” metálicos para permitir su substitución rápida por resistencias de otros valores para poder acomodarse a los requerimientos de modulación del monitor particular que esté siendo usado.

Para probar la integridad de una construcción casera como ésta, se carga en la memoria de la máquina un programa como el programa de prueba dado en la tabla anterior. Es en este punto cuando cuando se tengan que cambiar los valores de las resistencias R1 y R2 para producir un sincronía estable y el nivel de modulación deseado en los bloquecitos de imagen. Lo que debe aparecer en la pantalla del televisor (o monitor) representa lo que esté almacenado en la memoria de la computadora Elf. Los bloquecitos de imagen en los tres renglones superiores representan el programa dado en la tabla anterior. Es posible familiarizarse en este tipo de proyectos visualizando una rejilla conteniendo 64 cajitas de anchura con una profundidad de 32 cajitas, suponiendo una memoria RAM de 256 bytes. Tómese en cuenta que el programa proporcionado en la tabla dada arriba ocupa (en la pantalla del televisor o monitor) los ocho renglones superiores. Puesto que el programa termina en la localidad de la memoria M(003B), se carga 00 en la localidad de la memoria M(003F) para completar esa línea.

Cuando empezaron a hacer su aparición las computadoras Elf que incorporaban el chip de video 1861, una imagen que resultó muy popular fue la de la nave espacial de la entonces popular serie de televisión Star Trek (Viaje a las estrellas). A continuación se muestra la fotografía de una computadora Elf produciendo tal imagen en un televisor, descansando junto a la edición de julio de 1977 de la revista Popular Electronics que suministró los detalles técnicos para agregarle el chip de video 1861 a la computadora (la imagen es de alta resolución y de mayor tamaño, y puede ser ampliada para poder apreciar con mayor claridad los detalles):




Para poder producir la imagen de la nave espacial, además de cargarse primero en la memoria RAM de la computadora Elf las instrucciones dadas en la tabla anterior es necesario cargar además las instrucciones dadas a continuación en la siguiente segunda tabla, empezando la carga del programa que corresponde a la segunda tabla en la localidad de la memoria M(0040). Se reajusta la computadora Elf a su inicio y se pone en marcha el procesamiento con el interruptor RUN:


Instrucciones adicionales para
producir imagen de nave espacial
M Secuencia de bytes
0040 00 00 00 00 00 00 00 00
0048 00 00 00 00 00 00 00 00
0050 7B DE DB DE 00 00 00 00
0058 4A 50 DA 52 00 00 00 00
0060 42 5E AB D0 00 00 00 00
0068 4A 42 8A 52 00 00 00 00
0070 7B DE 8A 5E 00 00 00 00
0078 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 07 E0
0088 00 00 00 00 FF FF FF FF
0090 00 06 00 01 00 00 00 01
0098 00 7F E0 01 00 00 00 02
00A0 7F C0 3F E0 FC FF FF FE
00A8 40 0F 00 10 04 80 00 00
00B0 7F C0 3F E0 04 80 00 00
00B8 00 3F D0 40 04 80 00 00
00C0 00 0F 08 20 04 80 7A 1E
00C8 00 00 07 90 04 80 42 10
00D0 00 00 18 7F FC F0 72 1C
00D8 00 00 30 00 00 10 42 10
00E0 00 00 73 FC 00 10 7B D0
00E8 00 00 30 00 3F F0 00 00
00F0 00 00 18 0F C0 00 00 00
00F8 00 00 07 F0 00 00 00 00


La siguiente fotografía nos muestra una computadora Elf II cubierta con su gabinete así como unas tabletas de expansión añadidas a la computadora básica:




Y la siguiente fotografía nos muestra la computadora Elf II con un solo conector para una tarjeta de expansión y con el gabinete exterior removido mostrando las entrañas de la máquina:




Además de la computadora Elf II fabricada por la empresa Netronics, la cual proporcionaba un paquete completo incluyendo todos los componentes electrónicos necesarios para construír la computadora Elf II así como instrucciones detalladas de los pasos a seguir en el ensamble, hubo otra empresa de nombre Quest Electronics que también produjo su propio diseño basado en el procesador 1802, bautizado como la microcomputadora Super Elf.

Lo más curioso de todas estas empresas es que no era posible comprar sus “kits” en tiendas comerciales salvo excepciones aisladas. Anunciaban sus productos en publicaciones mensuales para aficionados tales como Popular Electronics o Radio Electronics, y sus productos se tenían que pedir por correo.

Un común denominador en la construcción de este tipo de microcomputadoras a partir de sus componentes básicos era y sigue siendo la alta sensibilidad de los circuitos integrados electrónicos de alta densidad fabricados con tecnología MOS a ser dañados por la electricidad estática (los circuitos integrados MOS de alta densidad son enviados por el fabricante en bolsas de plástico antiestáticas). La extraordinaria sensibilidad a la electricidad estática de los chips MOS y CMOS así como sus familias derivadas es tal que con solo poner un chip sobre una superficie no-metálica (por ejemplo, una mesa de plástico aislante) en la cual pueda haber cargas eléctricas estáticas pequeñas deslizando al chip aunque fuese por unos cuantos centímetros sobre la superficie aislante (con las terminales del chip en contacto con la superficie aislante) podía destruír internamente al circuito integrado dañándolo irremisiblemente. Para minimizar los daños que se puedan ocasionar a estos componentes electrónicos, quienes manipulan este tipo de chips altamente sensibles a daños ocasionados por la electricidad estática acostumbran “aterrizarse eléctricamente” enrollándose en la muñeca un alambre o una banda conductora que va conectada a una “tierra” eléctrica (desde el punto de vista de la electricidad estática), como las siguientes:




El extraordinario valor educativo de estos proyectos del tipo “hágalo usted mismo” es tal que, décadas después de que los componentes para llevar a cabo este tipo de construcciones caseras fueran puestos a la venta en forma de “kits” proporcionándose instrucciones de ensamble y programación, se siguen encontrando en el mercado cosas muy parecidas entre las cuales destaca la computadora la computadora Raspberry Pi, el cual es tan pequeño que cabe fácilmente en una mano:




Históricamente, un primer gran impulso a la diseminación de los microprocesadores como el nuevo elemento para poner al alcance de las masas el enorme poder encerrado en las computadoras digitales fue el mercado creado por los aficionados a los proyectos de electrónica que acogieron con entusiasmo a mediados de los setentas la idea de poder construír en casa su propias computadoras sin tener que invertir cientos de miles de dólares para ello. Resulta curioso que cuatro décadas después de que ocurrió aquel fenómeno la historia se repite con la disponibilidad de “juguetes” que ahora, con fines educativos, ponen a la disposición de cualquiera tablillas de electrónica que exhiben los intestinos de lo que hay detrás de los gabinetes que se venden como computadoras de escritorio. El ejemplo relevante de esto es la computadora Raspberry Pi que por menos de cincuenta dólares le permite a cualquiera el poder experimentar con su propia computadora “hechiza” en casa y familiarizarse con lo que realmente es una computadora por dentro. Interesantemente, la máquina Raspberry Pi, aunque puede funcionar con un sistema operativo (algo que no se encontraba en las computadoras como la Elf de aquellos tiempos), el sistema operativo Linux, no requiere de un disco duro. Todo el sistema operativo es almacenado en una tarjeta SD, lo cual demuestra que con un poco de ingenio se puede prescindir de cosas que muchos toman como absolutamente necesarias para poder sacarle algo de provecho a las computadoras que se venden en “kits”. El entusiasmo por este tipo de tecnología educativa sigue siendo el mismo que el que fue despertado por la computadora Elf al ser introducida como una computadora ensamblable en casa por menos de 100 dólares. Un año después de haber sido introducida el primero de marzo de 2012, se había vendido más de un millón de Raspberry Pi. Raspberry Pi ha tenido un éxito resonante en países asiáticos como China y Taiwan que encontraron en el pequeño “juguete” el instrumento ideal para introducir a los niños y jóvenes de las escuelas primarias y secundarias a la lógica que hay detrás del funcionamiento de las computadoras, y es posible que esto les esté dando una delantera tecnológica a largo plazo sobre los demás países, porque parte del liderazgo tecnológico consiste en saber lo que ocurre y lo que hay adentro de las “cajas negras”. Ante el éxito obtenido por Raspberry Pi, han surgido otras alternativas como la máquina APC8750 fabricada por la empresa VIA.

Pese a su bajo precio y pese al hecho de que ha servido principalmente como una computadora educativa para preparar a las nuevas generaciones en el manejo del hardware, la Raspberry Pi no puede ser considerada como un juguete, superando con creces las capacidades de su gran tatarabuela la computadora Elf. La siguiente figura (que tiene que ser ampliada a su máxima resolución para poder apreciar los detalles) nos muestra las posibilidades de interconexión de uno de los modelos más recientes de Raspberry Pi:




Al igual que su gran tatarabuela en aquél entonces, la Raspberry Pi también se puede conectar a un monitor para obtener una salida legible, por ejemplo un monitor LCD (esta es una fotografía de alta resolución):




Las conexiones requeridas para lograr esto son extraordinariamente sencillas. La siguiente figura (es una figura de alta resolución que puede ser ampliada para mayor detalle) nos muestra todo lo que se tiene que hacer para conectar la Raspberry Pi a una tableta Kindle (esta imagen se puede ampliar para mayor claridad de detalles):




Aún más impresionante es el hecho de que Raspberry Pi, además de poner un verdadero tesoro de poder de cómputo al alcance de cualquier aficionado, con unos cuantos accesorios adicionales (motores y circuitos periféficos de control) pone la robótica y la mecatrónica al alcance incluso de niños y jóvenes de primaria y secundaria. Se pueden encontrar numerosos ejemplos en Internet de cómo iniciarse en la robótica y la mecatrónica con la ayuda de una Raspberry Pi sin tener que gastar cientos o miles de dólares para ello, tales como el Ruby Robot de cuya construcción proporciona algunos detalles Stewart Watkiss en su libro (disponible gratuitamente) Design and build a Raspberry Pi Robot, para lo cual se usa el sistema operativo Raspbian Linux (una versión del sistema operativo Debian Linux específicamente diseñada para la computadora Raspberry Pi) que es gratuito y puede ser adquirido a bajo costo instalado en una tarjeta SD, y el lenguaje de programación Phyton, todo obtenible gratuitamente sin necesidad de tener que estar comprando licencias anuales a una empresa privada.

Hoy, al igual que ayer, no es posible encontrar y poder adquirir computadoras para construcción casera en ninguno de los grandes centros comerciales tales como Wal-Mart o Best Buy, ni siquiera en las franquicias Radio Shack. Los “kits” tienen que ser ordenados a través de Internet o por correo. De cualquier modo, y dado el enorme interés de los gobiernos de varios países de que sus niños y jóvenes mantengan una superioridad tecnológica sobre los niños y jóvenes de los demás países en lo que respecta al hardware de la nueva electrónica, varios países han estado poniendo órdenes en cantidades apreciables por paquetes ya probados en el campo como la computadora Raspberry Pi. Se trata de una cuestión de liderazgo, se trata de quiénes llevarán la delantera y quiénes se irán quedando atrás.

En el terreno de la informática, no hay nada más penoso ni más lamentable que ver a un ingeniero en computación que cuente incluso con un grado de maestría o doctorado al que le falla su computadora ya sea en su casa o en el trabajo, y al quitar el gabinete dejando el interior de la máquina expuesta sin su “cascarón” no tiene ni siquiera la menor idea de cuál pueda ser la función de cualquiera de los componentes electrónicos sobre los cuales está construída la máquina; viéndose en la necesidad imperiosa de solicitar los servicios de un técnico -el cual posiblemente no tiene ni siquiera una formación universitaria- que con solo cambiar la fuente de poder o subsituír el procesador montado en la tarjeta madre restablecerá la máquina a sus condiciones normales de operación, cobrándole de paso una buena cantidad de dinero al ingeniero por los servicios de reparación y mantenimiento de la computadora. Este divorcio entre la teoría y la práctica tiene como consecuencia que este tipo de ingenieros estén impedidos de poder hacer contribución alguna al avance de la tecnología. ¿Y cómo se puede esperar de ellos tal cosa, si ni siquiera son capaces de poder reparar sus propias máquinas? Pudieran argumentar algunos de ellos que si bien no son buenos en lo que toca al “hardware” sí son buenísimos en lo que toca al “software”, conociendo al dedillo todos los sistemas operativos que han sido fabricados por Microsoft así como muchos programas de aplicación, y hasta pueden desarrollar programas de aplicación innovadores. Esto puede ser cierto, en tanto que el software no sea del tipo de software que tiene que interactuar con parámetros físicos que tienen que ser monitoreados del exterior, o sea una programación en tiempo-real. En este tipo de aplicaciones, de las cuales los microcontroladores son un buen ejemplo, las que usan tecnología de punta pueden dar origen a problemas curiosos para los cuales es necesario ser tan proficiente en el hardware como en el software, porque de lo contrario no se sabrá ni siquiera por dónde empezar ni se tendrá idea de dónde pueda estar ubicado el problema, o sea si se trata de una cuestión que compete al hardware, de una cuestión que compete al software, o peor aún, de una cuestión mixta en donde hay una interacción problemática que tiene que ser resuelta desde ambas facetas.

Gracias a la casi increíble reducción de costos que se ha dado en las últimas tres décadas mediante los avances en la microtecnología , es posible hacer con una computadora Raspberry Pi mucho más de lo que se podía hacer con una computadora básica Elf o inclusive una Elf II. Sin embargo, y esto es importante: los principios siguen siendo los mismos. Los programas con los que corren los procesadores de hoy siguen requiriendo una programación en lenguaje binario de máquina, eso no ha cambiado ni va a cambiar en el futuro previsible. Se siguen requiriendo circuitos periféricos especializados. Los requerimientos sobre las fuentes de poder (voltajes estables y bien regulados sin rizo detectable) siguen siendo los mismos. La necesidad de que los componentes sean interconectables y compatibles entre sí sigue en pie. En todo caso, la diferencia es que hay “más de lo mismo”, o sea memorias RAM de mucho mayor capacidad, monitores digitales de pantalla plana en vez de monitores analógicos, y una cantidad mayor de instrucciones disponible en cada procesador así como la capacidad para procesar palabras binarias medidas no en bytes (ocho bits) sino en 32 bits ó 64 bits ó 128 bits. Y para poder asimilar todo lo nuevo, es recomendable empezar con algo más sencillo, con lo que dió origen a lo que vemos hoy. Y esta es la filosofía que se ha adoptado en esta obra.

En las fotografías dadas arriba de la computadora Elf II, se puede apreciar un teclado hexadecimal para dar entrada a la memoria RAM de cada byte no especificando cada bit del byte bit-por-bit con interruptores tipo palanca sino como un par de dígitos hexadecimales a través del teclado hexadecimal, lo cual sin duda alguna es un procedimiento mucho más rápido. ¿Y cómo se logra ésto? Pues agregando circuitos periféricos. En este caso se requiere de algo que convierta la opresión de cada tecla hexadecimal (que es un simple interruptor eléctrico del tipo normalmente abierto y de opresión momentánea) en un conjunto único de 4 bits, de modo tal que si se oprime la tecla 7 se generará el nibble (medio byte) 0111 si se oprime la tecla A se generará el nibble 1010, ó si se oprime la tecla E se generará el nibble 1110. Un circuito integrado para una tarea como ésta, del tipo de circuitos conocidos como codificador de teclado (keyboard encoder) es el chip 74C922:




el cual es un codificador de teclado hexadecimal. La manera en la cual se conecta el chip 74C922 a un teclado hexadecimal es la siguiente:




La forma en la cual trabaja este tipo de circuito es extremadamente sencilla. Por ejemplo, si se oprime la tecla “5”, la “línea de columna” Y2 es conectada electricamente con la “línea de renglón” X2. Cada tecla del teclado hexadecimal produce un corto distinto entre las terminales de renglón X y las terminales de columna Y, y el circuito detecta esto produciendo la salida de una palabra binaria que corresponde a la tecla oprimida. La terminal 13 OE (Output Enable, Habilitar Salidas) es puesta a tierra (“cero” lógico, obsérvese el uso de lógica negativa en la simbología) todo el tiempo para habilitar la salida del equivalente binario de la palabra ABCD a través de las terminales de salida 14-17. La terminal DA (Data Available) indica a la computadora que una tecla ha sido oprimida y que hay una palabra binaria puesta en las terminales de salida que corresponde a la tecla oprimida. La terminal 6 KBM (Keyboard Mask) usa una expresión poco común para lo que es conocido como la función de <i>eliminación del rebote</i> (debounce). Cuando se cierran las terminales de cualquier interuptor eléctrico físico, en lugar de una transición de ideal de “no conectado” a “conectado” lo que se tiene por un espacio muy breve de tiempo es un ruido de transición mientras se establece el contacto firme entre las terminales, lo cual puede ser maltinterpretado por la electrónica. El efecto del rebote es eliminado usualmente con circuitos lógicos de memoria como el flip-flop D o incluso con un flip-flop R-S.

Circuitos codificadores de teclado hexadecimal como el 74C922 no son el único tipo de diseño posible. Un ejemplo de un diseño alterno es el circuito integrado HD0165 en el cual cada tecla no es usada como parte de una matriz sino de modo independiente de modo tal que el circuito integrado en vez de enviar un “1” mediante una terminal de salida recibiéndolo en una de sus terminales de entrada, el circuito integrado tiene únicamente terminales de entrada recibiendo un voltaje en una de sus 16 terminales de entrada dependiendo de la tecla que sea oprimida (el código binario producido en respuesta a cada tecla aparece en las terminales de salida Q1, Q2, Q4 y Q8):




Este tipo de diseño es impráctico cuando el número de teclas en el teclado es relativamente grande, ya que un teclado con 80 teclas requerirá de 80 terminales de entrada en el circuito integrado.

El principio usado en los circuitos codificadores de teclados hexadecimales es el mismo que el que se usa en los teclados de las computadoras de escritorio. Un ejemplo de tal circuito es el codificador de teclado 3600:




que puede detectar la conexión eléctrica que se lleve a cabo entre las dos terminales que correspondan a cualquiera de las terminales horizontales y verticales de una matriz 10×9, convirtiendo el cierre momentáneo debajo del par de terminales que se cruzan en la parte inferior de la tecla en un byte que corresponde al código ASCII (véase el primer anexo puesto al final de esta obra) del caracter seleccionado. El circuito funciona de la manera siguiente: el circuito tiene salidas en las terminales XØ a X9, y recibe entradas en cualquiera de las terminales YØ a Y9. Supóngase que se oprime la tecla que corresponde a la letra “D”. Entonces la salida producida por la terminal 35 (X5) pasa por el interruptor “D”, y el voltaje regresa al circuito integrado en su terminal 19 (Y2), y el circuito integrado al detectar esta combinación que no corresponde a ninguna otra tecla pone en sus terminales de salida ASCII el código binario ASCII que corresponde a la tecla oprimida (véase el anexo titulado “El código ASCII” puesto al final de esta obra), agregando además un “bit” de paridad a la palabra binaria ASCII (en la terminal 6) que puede ser usado opcionalmente para la detección de errores de índole eléctrica. Al mismo tiempo, se envía un pulso a través de la terminal 16 (KP, Key Pressed, Tecla Oprimida) para notificarle al procesador que una tecla ha sido oprimida. Cada tecla en el teclado ASCII pone en corto circuito los alambres que pasan por debajo de la misma. Obsérvese que el circuito integrado 3600 es capaz de producir las palabras binarias que corresponden a códigos ASCII que usualmente no están disponibles en las computadoras caseras (tales como “ack” o “”acknowledge, “can” o “cancel”, “us” o “unit separator”, “bel” o “bell”, “cr” o “carriage return”, “vt” o “vertical tab”, “rs” o “record separator”, “lf” o “line feed”, “ff” o “form feed”, y “si” o “shift in”). El 3600 no es el único circuito integrado que puede ser conectado a un teclado alfanumérico, hay otros circuitos como el 2376 (el cual por cierto no es compatible en las terminales con el 3600 y por lo tanto no puede ser usado como un reemplazo del mismo).

La única razón por la cual hay teclados es porque hay pantallas que permiten una retroalimentación visual, desde las pantallas en los teléfonos celulares hasta los monitores en las computadoras de escritorio. En los casos en los que no hay variaciones en un diseño que será fabricado a gran escala, es común integrar el circuito controlador de video con el codificador del teclado en un solo circuito; de esto es precisamente de lo que trata la integración de circuitos.

A estas alturas tal vez el lector se pregunte: Siguiendo la filosofía de integrar la mayor cantidad posible de componentes dentro de un mismo circuito integrado, ¿por qué no meter el microprocesador y los circuitos periféricos dentro de un mismo circuito integrado? Supóngase que se considera a un circuito integrado de video como el controlador de video CDP 1861 descrito arriba para anexarlo internamente al microprocesador 1802 (para el cual a fin de cuentas fue diseñado). El problema inmediato que surge es que el nuevo circuito integrado combinado requiere de una mayor cantidad de terminales, y para un paquete de encapsulamiento como el Dual-In-line Package o DIP hay un límite práctico al número de terminales que se le pueden agregar arriba del cual no es posible usar tal encapsulamiento presenta problemas de fabricación y de diseño (es sumamente raro encontrar circuitos integrados que hayan sido encapsulados en un paquete DIP con más de 52 terminales), El diseño de microprocesadores cada vez más poderosos requirió recurrir a otro tipo de encapsulamiento como el Pin Grid Array (PGA) que no deja ningún espacio para incluír funciones extra no propias del procesador que requieren de más terminales. Por otro lado, integrar al substrato del microprocesador un circuito periférico como el controlador de video impide que sea físicamente posible actualizar con facilidad una máquina sin tener que remover todo el paquete combinado. Al ir mejorando la resolución de los monitores, por ejemplo, yendo de una resolución CGA (Color Graphics Adapter) a una resolución VGA (Video Graphics Array) y posteriormente a una resolución SVGA (Super Video Graphics Array), en las fábricas en muchos casos no era necesario actualizar el microprocesador, bastaba con actualizar el circuito controlador de video (o mejor dicho, la tarjeta de video en la cual estaba montado el circuito controlador de video, cambiando una tarjeta por otra), reteniéndose el mismo procesador a menos de que este se cambiara pero por otro más poderoso y no con la finalidad de meterle al procesador funciones que no son propiamente suyas. Es buena práctica de diseño, tanto ayer como ahora, mantener al procesador como tal sin meterle cosas que no tenga que ver con lo que hace el procesador, dejando que otros circuitos periféricos se hagan cargo de otras tareas periféricas. La unión exitosa de cualquier procesador con componentes periféricos nuevos que constantemente están saliendo al mercado es una labor que corresponde al integrador de sistemas que al diseñar un sistema informático nuevo tiene que seleccionar los componentes de modo que sean compatibles (eléctricamente) y que se puedan interconectar para llevar a cabo las tareas que se requieren.

No basta con añadir un circuito integrado que proporcione una interfaz entre el procesador y el teclado. Esta integración de componentes tiene que estar respaldada por alguna programación “maestra” que reaccione de inmediato ante cada opresión de tecla (o par sucesivo de teclas, tratándose de un teclado hexadecimal en el cual se requiere de dos teclas oprimida una tras otra para formar un byte) cargando cada byte a partir de un lugar apropiado de la memoria. Una vez que se ha terminado de cargar una porción de la memoria RAM con lo que vendría siendo un programa subsidiario, el programa maestro debe ser capaz de transferir el control de la computadora al programa subsidiario que es el programa que realmente se quiere ejecutar. De este modo, para cada capacidad nueva de hardware que vaya siendo agregada a una computadora básica, se tiene que elaborar un sub-programa que esté bajo el control del programa maestro. El sub-programa es un programa manejador o simplemente manejador (conocido en la literatura técnica inglesa como software driver o simplemente driver, pronunciándose como “draiver”) que proporciona una interfaz entre el programa maestro y los componentes periféricos a través del programa manejador:




No se muestra en la figura anterior, aunque se sobreentiende, el programa de aplicación que se pueda estar ejecutando en la computadora (p. ej. un editor de texto como el Bloc de Notas, o un retocador de imágenes como Photoshop). El “programa maestro”, al igual que un director de orquesta, debe coordinar la ejecución sincronizada entre el los programas manejadores y el programa de aplicación, a una velocidad tal que el usuario no sea capaz de percibir que se está saltando de un programa a otro, obteniéndose la ilusión de que todo ocurre simultáneamente. Este programa maestro en un principio fue conocido como programa monitor o simplemente monitor, porque estaba encargado de estar monitoreando la interacción correcta entre el programa de aplicación, los programas drivers, y el usuario. En el “programa maestro” podemos ver los inicios de lo que se conoce como un programa encargado de la operación apropiada de lo que vaya a ser ejecutado en la computadora, un programa operativo del sistema o sistema operativo. La respuesta que se debe dar a las opresiones de las teclas de un teclado alfanumérico al igual que la manera en la que se debe de manejar el graficado hacia un monitor de la información contenida en la memoria RAM son dos de las funciones del sistema operativo que mantiene bajo control la máquina que el lector está usando precisamente en estos momentos.