Sei sulla pagina 1di 18

Sin lugar a dudas, la comunicación paralela en la cual se pueden enviar

simultáneamente varios dígitos binarios (bits) a la vez a través de varios alambres


independientes es la que ofrece la mayor rapidez posible. Esto es precisamente lo
que se hace al interior de una microcomputadora, en donde a través de un bus
formado por ocho o más líneas independientes podemos enviar información en
forma paralela. Sin embargo, hay ocasiones en las que esto no se puede llevar a
cabo. Frecuentemente queremos enviar hacia el exterior información digital pero no
contamos con el lujo de varias líneas independientes que nos permitan enviar
simultáneamente dígitos binarios diferentes que representen distintos valores. Un
ejemplo de ello es la línea telefónica, en donde no contamos ni siquiera con un
grupo de cuatro cables que nos permitan enviar a través de la línea telefónica
cuatro bits a la vez. Otro ejemplo de ello es la comunicación satelital, en donde al
enviar o recibir algo de un satélite lo logramos mediante una señal
electromagnética de alta frecuencia. En tales casos, nos vemos forzados a llevar a
cabo la comunicación en forma serial en donde en vez de enviar varios bits a la vez
tenemos que enviar de uno en uno. En principio, esto requiere del envío simultáneo
de una señal de reloj que le permita al receptor saber cómo distinguir entre un bit y
el siguiente. A manera de ejemplo, considérese la siguiente señal digital de 16 bits:

0011010010101110

Suponiendo que la señal sea enviada siguiendo un orden de izquierda a derecha,


entonces se enviará primero un "0", tras lo cual se enviará otro "0", tras lo cual se
enviará un "1" y después el "1" que le sigue, seguido de un "0", y así
sucesivamente. Desde el punto de vista de presencia y ausencia de voltajes en la
línea para denotar los "unos" y los "ceros", conforme avanza el tiempo esta señal
mostrará el siguiente aspecto:

Si en este diagrama de tiempos borramos los "unos" y los "ceros" que están puestos
encima de la señal digital, de cualquier forma podemos recuperar la información
escribiéndola de nuevo gracias a los pulsos sincronizados de la "señal de reloj".
Obsérvese que el envío de una "señal de reloj" es un complemento indispensable en
la transmisión serial de una señal digital. Sin esta señal de reloj, el receptor no tiene
forma alguna de saber cuándo y en dónde empieza un "cero" y termina un "uno" o
viceversa, como tampoco tiene forma alguna de saber cuál es la duración de cada
intervalo de tiempo que subdivide a los "bits" que están siendo enviados. Aunque a
primera vista pudiera creerse que la subdivisión del tiempo puede ser extraída por
el receptor del intervalo de tiempo más corto detectado en una señal entre un "uno"
y un "cero", esto no ofrece garantía alguna. En efecto, si enviamos las siguientes
señales digitales de 16 bits, una tras otra:

1111111111111111 0000000000000000 1111111100000000


0000000011111111

y el receptor se basa únicamente en la duración del intervalo más corto, que


correspondería a la secuencia "11111111", erróneamente podría concluír que se le
ha enviado una señal compuesta de tan sólo 8 bits, la señal "11001001", cuando en
realidad se le ha enviado una señal de 64 bits. El problema que tenemos para
decodificar la señal basada en los tiempos de transmisión es el mismo que el que
tenían los telegrafistas de antaño para comunicarse a través de sus primitivos
aparatos mediante el "código Morse". (Generalmente, los telegrafistas trataban de
mantener cierto "tiempo" razonable entre la transmisión de cada letra, un "tiempo
razonable" que pudiera ser leído "razonablemente" por ambos, y aún así era
necesario que el receptor después de haber recibido el mensaje telegráfico
retransmitiera el mensaje al que lo envió para ver si no se había cometido error
alguno. El problema que tenemos aquí es que en la transmisión de datos digitales
estamos transmitiendo no el equivalente de una letra del alfabeto cada dos
segundos, sino el equivalente de miles de bits de información a velocidad
electrónica con la cual ningún humano se podría dar abasto.)

Queda pues fuera de toda discusión la necesidad de tener que enviar una "señal de
reloj" junto con la señal digital para que el receptor pueda recuperar íntegramente
el mensaje. El problema estriba en que en muchas ocasiones no tenemos ni siquiera
el lujo de contar con un cable extra que nos permita enviar dicha "señal de reloj". El
cable telefónico consta en esencia de tan sólo dos alambres, de tan sólo dos líneas,
un cable es usado para enviar la señal de corriente eléctrica, y el otro cable es
utilizado como "tierra eléctrica" para recibir la corriente de retorno. No existe un
tercer cable a través del cual podamos enviar una señal de reloj.

¿Entonces cómo es posible que una computadora pueda enviar y recibir una señal
de Internet a través de la línea telefónica?

Hay dos respuestas a este dilema.

La primera respuesta tiene que ver directamente con la selección del formato con el
cual están codificados los datos binarios, lo cual requiere tratar un tema que
habíamos dejado pendiente hasta ahora.

Empezaremos hablando acerca de algunos tipos de formatos usados para la


codificación de datos digitales en preparación para su transmisión a través de un
canal de comunicaciones. Un esquema que es la representación más sencilla de
todas es el método No Regreso al Nivel Cero (Non Return to Zero Level ó NRZ-L)
en el cual el "0" es representado como ningún voltaje (o mejor dicho, cero voltaje) y
el "1" es representado por un nivel alto de voltaje. Esta es una representación a la
que ya deberíamos de estar acostumbrados, puesto que es precisamente la
representación con la cual hemos construído casi todos los diagramas de tiempo
mostrados en este libro desde el principio, es el mismo formato que se ha estado
utilizando en la construcción de todo los diagramas de tiempo relacionados con el
comportamiento de los circuitos digitales combinatorios y secuenciales.

Otra variante es el método NRZ-I (Non Return to Zero Inverted) en la cual solo
ocurre una transición cuando aparece un "1" (un "0" no produce ningún cambio). La
ventaja de este método es que es más fácil para los circuitos eléctricos detectar un
cambio de voltaje que estar midiendo niveles absolutos de voltajes. Este método es
el utilizado en las comunicaciones que se llevan a cabo en los puertos USB de las
computadoras caseras. La desventaja de este método es que no hay cambio alguno
cuando hay una secuencia formada por puros "ceros" además de que no lleva
consigo ninguna información que permita al receptor sincronizar su propio "reloj"
con el "reloj" con que fue construído el dato recibido. Para superar esta deficiencia,
en 1949 hizo su aparición el esquema de codificación Manchester, utilizado
ampliamente en las redes de computadoras conectadas bajo la convención
Ethernet, en el cual se utiliza una transición de un voltaje bajo a un voltaje alto a la
mitad del bit para representar un "1" y una transición de un voltaje alto a un voltaje
bajo a la mitad del bit para representar un "0". Para lograr una codificación
Manchester, la señal NRZ-L es sometida junto con la señal de "reloj" a una
operación de OR-EXCLUSIVO, lo cual transforma a una señal codificada como NRZ-L
en una señal Manchester. La ventaja del método Manchester es que envía al mismo
tiempo el dato y la información sincronizadora de los pulsos del reloj con los cuales
se construyó la palabra binaria, ya que tiene una transición para cada ciclo sin
importar que la palabra binaria esté formada por una larga secuencia de "unos" y
"ceros". La enorme desventaja es que al recurrir a transiciones a la mitad de cada
bit,el ancho de banda requerido para la transmisión de la señal se duplica, de modo
tal que una señal codificada en formato NRZ-L que pueda ser enviada en un ancho
de banda de 200 Megahertz requerirá un ancho de banda de 400 Megahertz para
poder ser enviada. A continuación se muestran los tres esquemas NRZ-L,
Manchester y NRZ-I:

Una derivación del método Manchester es el esquema Manchester diferencial


(differential Manchester), en el cual si un "1" es representado por una transición,
entonces el "0" es representado por dos transiciones, y viceversa. En el siguiente
diagrama tenemos tres palabras binarias distintas, la palabra "000", la palabra
"101" y la palabra "011", codificadas bajo el esquema "Manchester diferencial":

Otro esquema es el esquema de Regreso a Cero (Return to Zero ó RZ) en el cual


cada vez que aparece un "1" se eleva la señal de un nivel de voltaje bajo a un nivel
de voltaje alto, tras lo cual la señal es regresada a su nivel de voltaje bajo:
Existen también otros métodos tales como NRZ-M (Non Return to Zero Mark) en el
cual la polaridad de la señal cambia cuando lo que va a ser enviado es "1" y en el
cual no hay cambio alguno en la polaridad de la señal cuando lo que va a ser
enviado es un "0"; y NRZ-S (Non Return to Zero Space) que trabaja igual que NRZ-
M excepto que la polaridad de la señal cambia cuando lo que va a ser enviado es un
"0", no habiendo cambio alguno cuando lo que va a ser enviado es un "1". A
continuación se presentan los diagramas de tiempo mostrando la palabra binaria
enviada "101100101" en los formatos NRZ-L, NRZ-M y NRZ-S:

Así pues, con la selección de un


formato de codificación de los
datos binarios como el código
Manchester, es posible transmitir
en forma simultánea una serie de
datos binarios así como los pulsos
de "reloj" que permitan establecer
una sincronización entre el
transmisor y el receptor.

La segunda respuesta al dilema


de transmitir tanto los datos
digitales como la señal sincronizadora radica en uno de los muchos trucos que hay
en el costal del ingeniero electrónico. Consiste en "romper" la transmisión de la
señal digital que será enviada, subdividiéndola en "paquetes" iguales formados
cada uno de ellos una cantidad de algo así como ocho bits (un byte), y al enviar la
señal digital -bit por bit- a lo largo de la línea injertamos entre cada "paquete" una
serie de pulsos sincronizadores de alta precisión de la manera como se muestra en
la siguiente figura:

Como puede verse en este


diagrama de tiempos, al inicio
de las comunicaciones el
transmisor envía cuatro pulsos
"sincronizadores" de reloj al
receptor para permitirle al
receptor poder sincronizar su
propio reloj con el reloj del
transmisor, los cuales son
seguidos del primer dato byte que será enviado, la palabra 00110100, tras lo cual el
receptor envía nuevamente otros cuatro pulsos "sincronizadores" para permitirle al
receptor volver a sincronizar nuevamente su propio reloj con el reloj del transmisor
para compensar por cualquier diferencia pequeña que se haya ido acumulando
debido a la imposibilidad física de poder construír dos relojes distintos con
calibraciones idénticas. Esencialmente, desde el lado del "transmisor", lo que se
está haciendo es convertir la información paralela que está siendo enviada por el
microprocesador a información serial que puede ser enviada bit-por-bit a través de
un solo canal de intercomunicación:

con pulsos sincronizadores de alta


precisión añadidos entre cada
"paquete". Se sobreentiende que, del
lado del "receptor", habrá electrónica
lo suficientemente precisa como para
poder extraer del torrente digital que
le está llegando las señales de reloj con las cuales se irá "sincronizando" con el reloj
del "transmisor" con el fin de poder ir reconstruyendo los datos digitales que le
están llegando en "paquetes". Tanto el transmisor como el receptor cuentan con
relojes de alta precisión ajustados a la misma frecuencia. Al llegar la señal digital al
receptor, lo primero que hace es "sincronizar" su reloj de alta precisión usando para
ello la serie de pulsos sincronizadores que está recibiendo al inicio del mensaje.
Hecho esto, una vez sincronizados los relojes de ambos, se envía la señal digital en
el sobreentendido de que los unos y los ceros estarán subdivididos en el tiempo de
acuerdo a lo que marcan los relojes sincronizados. En virtud de que no se está
enviando una "señal de reloj" de manera independiente sino que se está
incorporando dentro de la misma señal, a este modo de comunicaciones se les
conoce como comunicaciones asíncronas.

De hecho, cuando una computadora se está conectando a Internet a través de la


línea telefónica o a través de cualquier otro medio, ya sea cable, señal satelital, o
cualquier otra cosa que se llegue a inventar en el futuro, después de marcar la línea
telefónica la computadora lo que hace es enviar una serie de pulsos preliminares
con los cuales trata de que el servidor Web del otro lado se "sincronice" con su
señal. Si el receptor no "entiende" el mensaje sincronizador, entonces va ajustando
su propia velocidad de diálogo -su propio "reloj interno"- hacia arriba o hacia abajo
según se requiera hasta que pueda empezar a sacar sentido alguno del mensaje
que está recibiendo. Esta transacción se lleva a cabo a alta velocidad hasta que
ambos llegan a un "acuerdo" y se fija una velocidad de transmisión común en
ambas vías. Como ya se dijo, es necesario estar enviando los pulsos sincronizadores
entre cada "paquete" de información debido a que dos relojes diferentes, por
precisos que sean, eventualmente se comenzarán a desfasar, porque siempre uno
de ellos será un poquito más lento o más rápido que el otro, aunque sea por una
diezmillonésima de segundo, y cuando se están enviando muchos datos digitales a
alta velocidad, cualquier desfase se puede acumular rápidamente arruinando la
recepción de la señal.

Puesto que el primer gran problema a resolver cuando hicieron su aparición las
computadoras de escritorio fue el tratar de intercambiar información a través de la
línea telefónica, algo indispensable para la creación de Internet, para poder llevar a
cabo las primeras comunicaciones asíncronas a través de los primeros modems se
diseñó un circuito integrado que al igual que el microprocesador ha ido
evolucionando con el paso del tiempo hasta convertirse por cuenta propia en algo
tan complejo como los primeros microprocesadores: el UART (acrónimo del inglés
Universal Asynchronous Receiver Transmitter, que significa "Receptor Transmisor
Asíncrono Universal).
Con el UART, dos microcomputadoras situadas en puntos remotos que tengan
necesidad de comunicarse entre sí lo harán bajo la siguiente configuración:

Como puede verse en el anterior


diagrama, el proceso de
intercomunicación entre dos
microcomputadoras (que en su
nivel más básico es en realidad un
proceso de intercomunicación entre
dos microprocesadores) requiere de
dos UARTs, uno instalado cerca de cada máquina.Cuando compramos en la tienda
una tarjeta de modem para darle capacidad de intercomunicación Internet por la
línea telefónica a una computadora que aún no tiene dicha capacidad, en realidad
lo que estamos comprando es un sofisticado UART montado en una tarjeta de
circuito impreso, junto con el programa de software driver que le permite a la
computadora reconocer al modem durante el proceso de instalación.

Así como los microprocesadores Intel 8086 y Motorola 6800 marcaron la pauta a
seguir para los diseños de los microprocesadores utilizados en las computadoras
actuales, del mismo modo también
hubo dos "grandes abuelos" que
han marcado la pauta de los
estándares a seguir en
comunicaciones seriales
asíncronas: el UART 16450

(también conocido como el


circuito integrado 8250) y
el UART 16550, ambos
circuitos integrados de 40
pins. A continuación se muestra la relación de pins para los dos:

El empaque mostrado en ambos diseños es el tipo de encapsulamiento conocido


como DIP (Dual In-line Package). El UART 16550 también se puede obtener
comercialmente en un empaque "cuadrado" de 44 pins (11 pins colocados a cada
lado del cuadrado):

Es común ver instalado en casi todas las computadoras de antaño en muchas


tarjetas de modem un UART que está implementando para su comunicación con el
mundo exterior un protocolo de comunicaciones seriales conocido como el
estándard RS-232:

En este último dibujo tenemos el diseño esencial de una computadora personal (PC)
de escritorio cuyo componente central es, naturalmente, un microprocesador (µP)
con sus memorias RAM y ROM. La línea roja gruesa que
podemos apreciar en el dibujo es esencialmente el bus de
datos por medio del cual se pueden sacar datos tanto de
la memoria RAM como de la memoria ROM para ser
canalizados hacia afuera a través del UART, bajo la
coordinación externa de otro componente esencial para
que la acción del UART se pueda sincronizar con las
labores llevadas a cabo por el microprocesador: el
Controlador Programable de Interrupciones
(simbolizado en la literatura como PIC, acrónimo del
inglés Programmable Interrupt Controller).

Un Controlador Programable de Interrupciones PIC es casi


una necesidad cuando se están implementando no sólo
comunicaciones seriales con el mundo exterior a través
de un modem sino inclusive cuando la computadora simplemente está recibiendo
información serial de componentes que le son periféricos a la misma tales como el
teclado. Cuando oprimimos una tecla en el teclado, esencialmente le estamos
enviando al microprocesador una señal de requisición de interrupción (denotada
como IRQ, acrónimo de la expresión inglesa Interrupt Request) diciéndole "necesito
que detengas momentáneamente lo que estás haciendo, porque te estoy enviando
un dato que necesito que proceses de manera inmediata). Si hubiera un solo
componente enviándole señales de interrupción al microprocesador, la tarea sería
relativamente fácil y el mismo microprocesador podría atender estas peticiones sin
perder mucho tiempo en procesarlas. Pero cuando hay varios componentes tales
como un teclado, un módem, una impresora serial, etc., todos ellos enviándole
señales de interrupción al microprocesador, el microprocesador por potente que sea
puede terminar muy atareado atendiendo estas requisiciones, distrayéndose de sus
labores principales de procesamiento de información. Es por ello que, con el fin de
aligerar la carga de trabajo del microprocesador, se desarrolló el Controlador
Programable de Interrupciones, el cual se encarga de darles su prioridad respectiva
a cada una de las interrupciones que se están efectuando en el entorno del
microprocesador. Como un ejemplo de un Controlador Programable de
Interrupciones, podemos citar el circuito integrado 8259 diseñado y comercializado
originalmente por Intel, cuya relación de pins es la siguiente:

Este componente también es un circuito integrado sofisticado por dentro, como


podemos verlo en el diagrama esquemático de su lógica interna:

Esencialmente, el Controlador Programable de Interrupciones proporciona una


interfaz entre el microprocesador y otros componentes periféricos que requieran la
atención del microprocesador, entre ellos el UART. A continuación tenemos un
bosquejo de cómo la señal de
interrupción enviada por un UART
16550 es canalizada a través del
Controlador Programable de
Interrupciones 8259 hacia un
microprocesador 80x86:
El lector atento se habrá dado cuenta de que el anterior esquema puede manejar
hasta 16 requisiciones de interrupción, desde la IRQ0 hasta la IRQ15, provenientes
de hasta 16 unidades periféricas, siendo que la relación de pins dada para el PIC
8259 únicamente tiene capacidad para poder manejar hasta ocho requisiciones de
interrupción, desde la IRQ0 hasta la IRQ7 (desde el pin 18 hasta el pin 25 en
el circuito integrado mostrado más arriba). Y se habrá preguntado ya, ¿de
dónde viene esta capacidad extra para manejar requisiciónes de
interrupción? La respuesta a
esto es sencilla: por diseño,
se pueden conectar dos PICs
en una configuración
Maestro-Esclavo que
permite ampliar la
capacidad en el manejo de
señales de interrupción. A
continuación se muestra la
manera en la cual se debe
llevar a cabo esta
inteconexión entre dos PICs:

Ahora puede ver claramente


el lector cuál es el verdadero
propósito de los pins 12, 13
y 15 (CAS0, CAS1 y CAS2)
en el dibujo de la relación de
pins del PIC 8259. Son pins
para inteconexión en
cascada para aumentar la
capacidad en el manejo de
señales de requisición de
interrupción.

A continuación se muestra un diseño más completo en donde se han


interconectado en una tarjeta de circuito impreso dos PICs 8259 para
aumentar la capacidad de procesamiento de requisiciones de interrupción
(como de costumbre, las líneas D0-D7 representan las líneas del bus de
datos, para el manejo paralelo de información de los ocho bits de un byte,
mientras que las líneas A0-A15 representan las líneas del bus de
domicilios):

Otro componente muy popular con un elevado nivel de integración para auxiliar al
microprocesador en su manejo de unidades periféricas es el conocido como
Interfaz Programable Periférica (simbolizada en la literatura como PPI,
acrónimo del inglés Programmable IPeripheral Inteface), de la cual el circuito
integrado 8255 (o su equivalente el 82C55) es quizá uno de los más conocidos. Su
relación de terminales "pins" es la siguiente:

A continuación tenemos otro diagrama que muestra al PPI 82C55 no con la


asignación física de "pins" arriba mostrada sino con las terminales reacomodadas
de modo funcional para que el funcionamiento de este circuito integrado sea un
poco más comprensible:

Como puede verse, hay


tres puertos disponibles
para la canalización
paralela de datos
binarios, el puerto A
(port A, seleccionable
con una entrada de A1A0
= 00), el puerto B (port
B, seleccionable con una
entrada de A1A0 = 01) y
el puerto C (port C,
seleccionable con una
entrada de A1A0 = 10).
La entrada A1A0 = 11
está reservada para
girarle una instrucción a
este componente para
que lleve a cabo alguna
de las funciones que
puede llevar a cabo. Las líneas D0 a la D7 son para canalizar los datos de entrada o
de salida de una palabra de 8 bits a través de uno de los tres puertos. En un
sistema, este componente se conectaría de una manera como la siguiente:

El siguiente diagrama nos muestra cómo se utilizaría el PPI 82C55 para construír un
circuito para llevar cabo la lectura de una de las 16 teclas de un teclado externo:

Obsérvese cómo las teclas del teclado externo están dispuestas en un arreglo
rectangular de renglones (conectados independientemente a cuatro de las ocho
terminales del puerto A) y columnas (conectadas independientemente a cuatro de
las ocho terminales del puerto B). A su máxima capacidad, este mismo diseño se
puede ampliar fácilmente para leer cada una de las teclas de un teclado de 64
teclas no muy diferente al que está usando el lector en estos momentos.

Como el nombre del componente lo indica, el PPI 82C55 es programable. A


continuación tenemos la forma en la cual la ejecución de las instrucciones se puede
llevar a cabo:

Como ya se mencionó previamente, la entrada A1A0 = 11 está reservada para


girarle una indicación al PPI 82C55 de que una instrucción será llevada a cabo. Al
poner esta entrada, los ocho bits a la entrada del puerto A se convierten en un byte
de comando (Command Byte A), y los ocho bits a la entrada del puerto B también
se convierten en otro byte de comando (Command Byte B). Dependiendo del valor
que tenga cada uno de estos ocho bits en cada uno de estos dos bytes de comando,
se obtendrá un resultado diferente. Por ejemplo, si al bit 4 del byte de comando A
se le pone un valor de 1 lógico, entonces el puerto A se convertirá en un puerto
para la entrada de datos, y si se le pone un valor de 0 lógico, se convertirá en un
puerto para la salida de datos. El bit 2 del byte de comando A es interesante,
porque nos permite seleccionar uno de los modos de operación del PPI 82C55, el
cual funcionalmente puede trabajar de hasta tres modos distintos (designados por
los fabricantes como mode 0, mode 1, mode 2) de acuerdo con lo que indican los
siguientes diagramas:

Existen otros controladores periféricos programables más recientes, además de los


ya mencionados que marcaron la pauta a seguir, tales como el PIC12C508/509, el
PIC16F84A, el PIC16F628 el PIC18F4550, y el PIC16F87X.

No se entrará más a fondo aquí en el estudio de este tipo de componentes porque


ello requeriría de un libro como este.

Es importante señalar que para poder utilizar un UART con el fin de que el
microprocesador pueda llevar a cabo comunicaciones seriales hacia el mundo
exterior bajo un estandard de comunicaciones seriales como la norma RS-232 (en la
cual el "1" lógico está especificado como un voltaje positivo de +15 volts, y el "0"
lógico como un voltaje negativo de -15 volts), se requiere otro componente que
pueda garantizar las conversiones eléctricas de los niveles de voltaje usados por los
otros componentes con los que trabaja el microprocesador (por ejemplo, los niveles
de cero volts para un "0" y de +3 volts para un "1" con que funcionan los circuitos
integrados TTL), un componente como el transceptor (transceiver) MAX232:

Con la adición de cinco capacitores externos de bajo costo especificados por el


fabricante, la conversión realizada por este circuito es llevada a cabo en forma
directa sin mayor ciencia:

El diagrama funcional del circuito integrado


MAX232:

nos indica que si la terminal de entrada para convertir señales con niveles
TTL/CMOS es la terminal 11 (T1IN), entonces las señales ya convertidas a niveles
RS-232 se podrán obtener en la terminal 14 (T1OUT); mientras que si la terminal de
entrada para convertir señales con niveles RS-232 es la terminal 13 (R1IN),
entonces las señales ya convertidas a niveles TTL/CMOS se podrán obtener en la
terminal 12 (RIOUT). El circuito integrado proporciona otros dos pares de terminales
para lograr lo mismo, los pares 10/7 (conversión TTL/CMOS a RS-233) y 8/9
(conversión RS-232 a TTL/CMOS).

Lo interesante del circuito integrado MAX232 es que aunque puede generar las
señales de voltaje RS-232 de +15 volts y -15 volts, lo puede hacer alimentado con
una fuente de voltaje de +5 volts.

A continuación se muestra la transmisión de un byte con el cambio de niveles de


voltaje en el pin de salida del UART (o y +5 volts) a los niveles de voltaje mayores
(-12 volts y +12 volts) requeridos para la transmisión bajo el estándard RS-232,
usando el caracter ASCII que representa a la letra "J"
(B7B6B5B4B3B2B1=01001010):

Consideraremos que el bit B0=0 está siendo usado como bit de paridad. Obsérvese
que antes y después de la transmisión del byte se requiere agregarle dos bits al
dato que será enviado:

(1) Un bit de comienzo (START) puesto antes del byte, en este caso igual a "0".

(2) Un bit de terminación (STOP) puesto después del byte, en este caso igual a "1".

Al comienzo de la transmisión de cada byte, es necesario añadir el bit de comienzo


START para hacerle saber al receptor que un byte de datos va a ser enviado, el cual
le permitirá al receptor poder sincronizarse con los bits posteriores. El bit de
terminación STOP proporciona un período de tiempo antes de que el siguiente bit de
comienzo (START) sea transmitido, y tiene un nivel (ó sentido) opuesto al bit de
comienzo para permitirle al bit de comienzo el poder ser "visto" por el receptor. El
proceso de "enmarcar" un dato entre un bit de comienzo START y un bit de
terminación STOP es conocido en la literatura técnica como framing, y podemos
representar un "marco" de la siguiente manera:
en donde el bit de comienzo START está representado a la izquierda de color verde,
el bit de paridad que le sigue está representado de color marrón, los siete bits que
representan un símbolo ASCII son de color ciano, y el bit de terminación STOP está
representado a la derecha de color rojo.

En el siguiente diagrama esquemático simplificado de una microcomputadora


tenemos la presencia ineludible de un UART, el UART 16C550, junto con el PPI
82C55 (designado en el diagrama como un bloque funcional PIO, un acrónimo del
inglés que significa Programmable Input Output, lo cual para nuestros propósitos no
es más que otra designación para los componentes PIC y PPI utilizados en
conjunción con el UART para el manejo de las unidades periféricas), junto con el
imprescindible MAX232 para el envío y recepción de señales seriales RS-232 de y
hacia equipo periférico.

En el capítulo 5, vimos que un "0" lógico y un "1" lógico pueden estar


representados no sólo como la ausencia de un voltaje y la presencia de un voltaje
de, digamos, +5 volts, sino también como un campo magnético de cierta
orientación y un campo magnético de orientación contraria. De hecho, hay muchas
otras maneras en las cuales podemos representar un "0" y un "1", tales como la
ausencia y la presencia de un rayo de luz. Es así como es posible transmitir señales
digitales a través de un cable de fibras ópticas en las cuales el medio de tranmisión
es la luz y no un potencial eléctrico. Y aunque podemos transmitir a lo largo de un
alambre metálico "pulsos" de voltaje con una forma de onda cuadrada como la que
hemos visto en los diagramas de tiempos (esta es precisamente la manera en la
cual se llevaba a cabo la transmisión de datos a través del telégrafo mediante el
código Morse), no es necesario estar limitados a este tipo de formato. La enorme
flexibilidad en la forma en la cual podemos representar un "0" y un "1" nos permite
elaborar otros esquemas que suelen ser mucho más eficientes que la simple
transmisión de "pulsos" de voltaje de corriente directa, los cuales de cualquier
manera no pueden ser utilizados para la transmisión de datos digitales a través de
una antena transmisora hasta una antena receptora. El ejemplo más notorio de ello
es la representación de un "1" como un "pulso" que en realidad es una onda de alta
frecuencia. Esto requiere modular una señal ondulatoria continua usando el nivel
de "1" lógico para convertirla en un pulso ondulatorio de alta frecuencia de una
manera como la siguiente en la cual la onda portadora (carrier) del "1" es modulada
por un "1" convencional produciendo un resultado modulado:

Este esquema conocido como un esquema de modulación de amplitud identifica


una señal digital ondulatoria como un "1" lógico, y la ausencia de la misma como un
"0" lógico. De este modo, un torrente continuo de información que empieza con la
siguiente señal digital binaria mostrada de color azul siendo modulada por la señal
ondulatoria de color verde producirá la señal modulada de color rojo que será
transmitida hacia afuera:
El aparato transmisor que cambia a la señal digital
modulándola antes de ser transmitida recibe el
nombre de modulador, mientras que el aparato
receptor encargado de recuperar la señal digital
removiendo su componente ondulatorio se llama
demodulador. Este es precisamente el origen de
la palabra modem, MODulador-DEModulador, el
aparato capaz de modular señales digitales para
enviarlas hacia afuera a través de la línea telefónica
en forma de pulsos ondulatorios, y capaz también
de demodular los pulsos ondulatorios enviados
desde fuera por un transmisor, el cual era un
aditamento externo a las computadoras caseras:
antes de ser incorporado adentro de las mismas computadoras cuando los
constantes avances de la microelectrónica permitieron miniaturizar todos los
componentes de los modems para permitir su inserción en un circuito integrado de
alta densidad dentro de la tarjeta madre o como una tarjeta accesoria para ser
insertada dentro de una de las ranuras especiales que muchas computadoras
tienen para ello.

Existe otro esquema que es precisamente el mismo que fue utilizado inicialmente
para la transmisión de señales digitales a través de la línea telefónica usando para
ello los primeros modems caseros: mediante señales de tonos audibles. Bajo este
concepto, cuando se transmite una señal a través del cable telefónico se hace
utilizando dos ondas de frecuencias diferentes para identificar al "0" y al "1". Este
esquema es conocido como modulación de frecuencia (aunque también es
conocido como FSK o Frequency Shift Keying), esquema en el cual la frecuencia de
la señal portadora es alternada entre dos frecuencias diferentes en una manera
como la que se muestra a continuación:

Uno de los primeros circuitos


integrados utilizados justo para la
construcción de los modems que
empezaron operando mediante el
concepto de tonos es el circuito
integrado 4412 fabricado con
tecnología CMOS por la empresa
Motorola:
Este circuito integrado hoy obsoleto
que fue uno de los pioneros para la
construcción a gran escala de los
primeros modems (externos)
trabaja de la siguiente manera: el
paquete convierte datos binarios
seriales ("unos" y "ceros"),
usualmente enviados de y hacia un
UART, en el sistema de "tonos"
audibles propios para la
comunicación telefónica
compatibles con el llamado
"sistema 103". En el modo Originar,
un "0" es transmitido como una
señal con una frecuencia de 1070
Hertz (ciclos por segundo) y un "1"
es transmitido como una señal con
una frecuencia de 1270 Hertz. En el
modo Contestar, un "0" es
transmitido como una señal con
una frecuencia de 2025 Hertz y un "1" es transmitido como 2225 Hertz. Puesto que
los modems se usan en pares, el receptor responde con el grupo de tonos que no
está siendo transmitido. Esta es precisamente la forma en la cual se lleva a cabo la
comunicación en servicios de Internet de baja velocidad. La entrada de la
transmisión es compatible con la familia de circuitos lógicos TTL y responde a una
transferencia de datos de 300 bauds o menos. La amplitud de una onda típica de la
señal de salida es de 300 milivolts rms hacia una carga resistiva de 100 mil ohms.
La entrada al receptor debe provenir de un filtro activo sofisticado y bien diseñado y
un limitador simétrico con distorsión controlado de algo llamado el "retardo del
grupo" (group delay). Esta entrada es compatible con las familias lógicas TTL y
CMOS. La salida del Receptor de Datos (terminal "pin" 7) sigue a esta entrada
después del proceso de demodulación.

Junto con el UART podemos hablar de otro circuito integrado que además de las
capacidades para comunicaciones asíncronas del UART incorpora la capacidad para
poder establecer comunicaciones síncronas. Se trata del USART, cuyas siglas
significan Universal Synchronous/Asynchronous Receiver-Transmitter, del
cual el gran "abuelo" prototipo que marcó la pauta en los diseños posteriores que
habrían de seguir es el 8251:

desarrollado originalmente por la


empresa Intel, cuyo diagrama
funcional de bloques es el
siguiente:

Existe disponible en Internet,


como una cortesía de la
Universidad de Hamburgo en
Alemania, un programa animado
que muestra con una simulación
el funcionamiento en modo
asíncrono de un USART, la cual se
puede accesar en el siguiente
domicilio:
http://tams-www.informatik.uni-hamburg.de/applets/hades
_________/webdemos/50-rtlib/65-usart8251/usart-transmit.html

En esta demostración, si hacemos "clic" sobre el "monitor" que está bosquejado en


el extremo derecho del diagrama que contiene al USART 8251, aparecerá una
"ventana" típica de las ventanas de texto de la época en la que los monitores de las
computadoras sólo tenían capacidad para el trazado de texto sobre un fondo negro
y no de gráficos; y lo que se está simulando es una simple terminal receptora de
texto a la cual le llega el mensaje clásico que dice "Hello, world!" (Hola, mundo!).
Esta "estación terminal" puede ser configurada en su velocidad (baud) y en la
paridad que será utilizada para la detección de errores (paridad par, paridad impar,
o ninguna paridad). Al entrar en esta página se activa de inmediato el simulador de
diagramas de tiempo "Hades Waveform Viewer". El botón derecho del mouse,
cuando el cursor está puesto dentro de la "ventana" de simulación del circuito, abre
una lista vertical de opciones de menú, en la cual el punto de inicio es la opción
"simulación" (simulation) que nos dá las tres posibilidades: stop (detener la
simulación), pause (pausar la simulación) y run (correr la simulación), mismas
opciones que se encuentran también disponibles en el borde inferior de la ventana
principal del simulador. Si la ventana de diagramas de tiempo "Hades Waveform
Viewer" no aparece, en este menú del "mouse" la podemos invocar con la opción
view de donde escogemos show waveform viewer; y con esta misma opción la
podemos seguir invocando cuantas veces sea necesario a lo largo de una
simulación. Dentro de la ventana del Hades Waveform Viewer, la punta de la flecha
del cursor tiene anexadas permanentemente una línea horizontal y una línea
vertical, las cuales nos permiten localizar en forma precisa dentro de la ventana del
"Viewer" con el cursor vertical un tiempo específico situado dentro del tiempo de la
simulación, y con el cursor horizontal uno de los parámetros (RESET, nCS, CnD,
nRD, nWR, DATA, nTXC, TXD,TXRDY, TXE y nCTS) cuyo valor binario será desplegado
inmediatamente en el renglón como "Value:". Hay una línea adicional aquí titulada
"comment" en la cual se nos describe lo que está sucediendo en cierto intervalo de
tiempo. Por su parte, la ventana principal en donde está el circuito (no la ventana
Hades Viewer) tiene en su parte inferior un botón i para imprimir el status del
simulador, un botón de doble flecha apuntando hacia la izquierda para "reajustar" el
tiempo de simulación hasta t=o, un botón de doble flecha apuntando hacia la
derecha para correr la simulación en modo "perpetuo" (interactivo) y un botón con
una sola flecha apuntando hacia la derecha que nos permite seleccionar un
intervalo de tiempo de simulación, el cual tenemos que especificar previamente en
la ventana numérica a su derecha así como las unidades de tiempo del intervalo de
simulación (nanosegundos, microsegundos, milisegundos, segundos, minutos,
horas). Es necesario oprimir este "botón" dos veces para ir más allá del tiempo
inicial de simulación programado por el "StimuliGen" con una duración de 0.83
segundos. Los tres "foquitos" LED a la derecha nos indican que la simulación está
detenida (foquito rojo), la simulación está pausada (foquito amarillo), o la
simulación está corriendo (foquito verde). Se puede afirmar que esta simulación,
para haber sido elaborada con propósitos meramente educativos, es una simulación
bastantes sofisticada.

Hasta ahora, al hablar acerca de las comunicaciones seriales lo hemos hecho


teniendo en mente el protocolo de comunicación serial basado en el estándard RS-
232. Es importante señalar aquí que, en buena medida, el protocolo RS-232 para el
cual fueron diseñados varios de los circuitos integrados que hemos visto en este
Suplemento está siendo superado por un nuevo estándard de comunicaciones
seriales más universal, el conocidísimo estándard USB (Universal Serial Bus), el
cual es implementado con sus propios circuitos integrados que también se pueden
obtener comercialmente en el mercado para el desarrollo de proyectos o la
construcción de computadoras.

Existen varias ventajas del estándard USB sobre el estándard RS-232. La primera
ventaja es que se pueden conectar varios equipos (impresoras, cámaras digitales,
escáners, teclados MIDI, etc.) a una misma
computadora sin necesidad de tener que construírle a
la computadora puertos de entrada adicionales, ya que
se puede utilizar el mismo puerto de entrada USB de la
computadora ampliando la capacidad de dicho puerto
con un hub expansor:
de modo tal que es posible tener tres o cuatro unidades
periféricas distintas enviando información serial a la
misma computadora a través de la misma entrada USB
de la computadora (anteriormente, si se quería
conectar un equipo con modo de comunicación serial a
una computadora, había que desconectar el equipo que ya estuviese instalado,
frecuentemente la impresora, para utilizar dicho puerto de entrada como canal de
intercomunicación con la computadora, lo cual hoy ya no es necesario). Bajo el
estándard USB, hasta 127 piezas de equipo (lo cual incluye los hubs expansores de
capacidad) se pueden conectar a una misma computadora. El estándard inicial USB
fué el USB 1.0, apoyado por sistemas operativos como Windows 98, ofreciendo una
capacidad de transmisión de datos de hasta 12 Megabits por segundo; el cual está
siendo superado por el USB 2.0 que ofrece las mismas características pero a una
velocidad de intercomunicación mucho mayor (40 veces mayor) de 480 Megabits
por segundo con las unidades periféricas que se le conecten a la computadora. El
siguiente paso evolutivo programado para este estándard es el USB 3.0 que debe
poder ofrecer una capacidad de transmisión serial de datos de hasta 4.8 Gigabytes
por segundo. Otra ventaja del estándard USB sobre el estándard RS-232 es que las
unidades periféricas se pueden conectar, desconectar y volver a conectar en el
orden que sea a las entradas USB de la computadora tiempo después de que haya
sido encendida la máquina (esta característica es conocida en la literatura técnica
como hot swapping), mejor conocida desde el punto de vista del sistema operativo
Windows como PnP (Plug-and-Play), lo cual no era posible anteriormente ya que al
encender la máquina los programas de "arranque" (contenidos en el BIOS) para los
puertos seriales inicializaban todo al inicio y no era posible alterar posteriormente la
comunicación.

En su esencia, un cable USB para comunicaciones seriales entre una computadora y


una unidad periférica consta de únicamente cuatro alambres aislados en su interior:
dos cables para envío de energía eléctrica identificados de la manera usual como
power (voltaje) y ground (tierra eléctrica) así como dos alambres identificados como
D+ y D-. Los cables de energía eléctrica son requeridos cuando la unidad periférica
que está siendo conectada carece de su propia fuente de energía y tiene que ser
energizada por la computadora, como es el caso de los flash drives. Cuando una
unidad periférica se conecta a la computadora, la computadora (o el hub) detecta la
presencia de la unidad periférica mediante una resistencia eléctrica que actúa como
pullup dependiendo de que la unidad periférica sea una de baja velocidad (USB 1.0)
o de alta velocidad (USB 2.0). Una resistencia pullup puesta en el cable que
corresponde a la señal D- indica que se trata de una unidad de baja velocidad,
mientras que una unidad periférica de alta velocidad tiene una resistencia pullup en
el cable D+. Para el manejo de las señales USB, hay varios circuitos integrados en el
mercado, uno de los cuales es el PIC 16C745, de la empresa Microchip. Este
Controlador Programable de Interrupciones es en su interior un circuito integrado
tan complejo y tan sofisticado que en la literatura técnica se le identifica también
como un microprocesador, aunque en el sentido estricto de la palabra no lo es. A
continuación tenemos un bosquejo de un PIC 16C745 dispuesto para el manejo de
una unidad periférica de baja velocidad, con una resistencia pullup puesta en la
línea D-:
A continuación tenemos en mayor detalle un proyecto construído como parte de
una tarea escolar por dos estudiantes canadienses como parte de los
requerimientos para poder obtener su grado en Ingeniería Física en la University of
British Columbia, el cual como puede verse está configurado para ser de baja
velocidad:

En la esquina superior derecha de este diagrama esquemático podemos ver las


asignaciones que bajo el estandárd USB se deben hacer a cada una de las
terminales de un conector USB.

Aquí puede surgir una duda sobre cómo es posible que una computadora pueda
distinguir entre las diversas señales digitales que le están enviando varias unidades
periféricas a través de lo que es esencialmente una sola línea de entrada. ¿Cómo
evitar confundir una señal digital que le está llegando desde una cámara Web con
una señal digital que le está llegando de una impresora? La respuesta radica en el
hecho de que bajo el estándard USB cada pieza de equipo tiene su propio
identificador, algo así como su "nombre propio" y sus apellidos, lo cual le permite a
la computadora el poder distinguir -con la ayuda del sistema operativo- una unidad
periférica de la otra. De hecho, la primera vez que se conecta con un cable USB
una unidad periférica a una computadora en la que nunca antes se había utilizado,
lo primero que hará la computadora será buscar entre su "catálogo de equipos USB"
interno el "nombre propio" y apellidos de tal unidad periférica, y al no encontrarlo el
sistema operativo le pedirá al usuario el disco CD de instalación de los programas
drivers que le permitan al sistema operativo poder procesar la información que le
envíe dicha unidad periférica. Una vez que se ha llevado a cabo este procedimiento,
el sistema operativo agrega tal unidad periférica a su "catálogo interno", de modo
tal que la próxima vez que tal unidad periférica se vuelva a conectar a la misma
computadora se llevará a cabo la búsqueda de rigor en dicho catálogo interno, y al
encontrar que los programas drivers para tal unidad periférica ya están
almacenados en el disco duro el sistema operativo cargará dichos drivers en la
memoria RAM para poder intercomunicarse con dicha unidad periférica.

Aunque aún es posible ver muchas computadoras que tienen en su parte trasera un
puerto para interconectar las impresoras a un conector basado en el estándard RS-
232, la mayoría de las nuevas impresoras en el mercado están equipadas ya con un
puerto USB para ser interconectadas de este modo a la computadora. De cualquier
modo, aunque el estándard RS-232 termine siendo desplazado por completo,
mucho de lo que hemos aprendido en este Suplemento sigue siendo
completamente válido porque los principios esenciales siguen siendo los mismos, al
igual que las tres funciones lógicas básicas AND, NOT y OR sobre las cuales a fin de
cuentas se viene basando el diseño de cualquier computadora.

Potrebbero piacerti anche