Exponsor

CURSO TÉCNICO INSTALADOR DE ENERGÍA SOLAR TÉRMICA

Visita el siguiente enlace: http://enersolartermica.blogspot.com.es/ ¡No pierdas esta magnifica oportunidad de poder formarte en esta profesión con gran demanda de empleo! Ahora por oferta de lanzamiento y por tiempo limitado puedes adquirir este curso por solo 9,95€, cuando su valor de mercado es de 49€.

jueves, 23 de abril de 2009

LAS COMUNICACIONES ASÍNCRONAS ( IV )

En artículos anteriores 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 (ampliar imagen):



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.

Para obtener más datos sobre los detalles técnicos de los UART, se recomienda consultar el siguiente enlace:

http://www.freebsd.org/doc/en_US.ISO8859-1/articles/serial-uart/

Por otro lado, se puede obtener mayor información sobre el estándard de comunicaciones seriales RS-232 consultando la Wikipedia en el siguiente enlace:

http://en.wikipedia.org/wiki/RS-232

También en la misma Wikipedia se puede obtener mayor información en el siguiente enlace acerca del estándard USB que está desplazando rápidamente al estándard RS-232:

http://en.wikipedia.org/wiki/USB

LAS COMUNICACIONES ASÍNCRONAS ( III )

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 (ampliar imagen):


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 (ampliar imagen):



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 (ampliar imagen) 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 (ampliar imagen):