Copy Link
Add to Bookmark
Report

Fundamentos teóricos: El bus, decodificación

Fulcrum Magazine #2
11 de Febrero de 1996

eZine's profile picture
Published in 
Fulcrum Magazine
 · 2 years ago

Editorial

Hoy por hoy, en estos días que corren, con todo este boludeo del Windows 95 y de los sistemas totalmente armados, vemos que en este mundo que se viene, ya no va mas eso de vender negros en la plaza del pueblo. Ahora, en el mundo del electrón y del chip la esclavitud no se mide por la libertad sino por la imposición tecnológica.

Todo, hoy en día, tiende a que cualquier boludo se ponga al frente de una PC y se pierda por un laberinto de ventanas. Nadie sabe nada, ni los vendedores de hard, no los profesionales, ni los técnicos especializados. El otro día acompañé a un amigo a cambiar un soft que le vino fallado en una impresora que compró. Nos dirigimos al Service oficial del famoso fabricante y cuando nos atendió el INGENIERO de E***N, especialmente preparado sobre el funcionamiento de impresoras a chorro de tinta, sobre las cuales realiza el service, le explicamos el problema y mientras nos copiaba nuevamente el soft, se me ocurrió preguntarle como era que a partir de gotas de tinta formaban por ejemplo un caracter. El tipo me miro como si fuera un marciano y ante el publico que se encontraba en la sala esperando su turno me respondió: 'Mira acá, ves, el tambor expulsa gotas de tinta... y mediante un control de servos se modifica la posición y listo'. Cuando me vio la cara que le puse se dio cuenta de que se mandó cualquier verdura. Cuando nos retiráramos, y ante una clara disconformidad por su respuesta técnica remato: ' sabes lo que pasa pibe, vos viste como es acá, si algo no anda cambiamos la plaqueta y listo, esto es así'. Cualquiera, las chorros de tinta no funcionan hací ni a palos, similar que en un TV las gotas se cargan electricamente y se expulsan hacia el papel y mediante un campo magnético que se aplica cuanto estas están en el aire se las hace deflectar cambiando hací su trayectoria y de esta forma se hace que formen la impresión.

El caso de todo esto es que se tiende a un conocimiento nulo en la materia, ustedes pueden usar WINDOWS, y esta bien pero no saben una nada de la PC. Pueden programar virus y eso está yoja, pero no pueden usar la PC como una herramienta. Para que les sea realmente útil se tiene que tener una placa que te permita interactuar con el medio exterior. Esta publicación tiene ese sentido, el de poder sembrar conocimientos para el desarrollo de estas aplicaciones. Hoy, en este número de FULCRUM MAGAZINE les dejo un ejemplo de una placa básica para que puedan ir viendo como es la cosa. Les aclaro que hice varias placas que funcionaron al toque, pero esta en particular no la implementé nunca haci que si la quieren hacer verifiquen bien todo, igual no creo que ande mal, es muy básica. A, para poder ver el circuito se tienen que bajar el ORCAD que es el soft con el que hice el plano y haci poder ver el FULC002.SCH (pueden configurar el orcad con draft /c)

No se dejen engañar, la PC es una herramienta que puede hacer cosas que ni siquiera soñaron, una simple placa de I/O puede sorprenderlos, lean FULCRUM MAGAZINE y conozcan, descubran, y especialmente comprueben que la vieja XT, con el viejo DOS y un par de placas puede mas que un Pentium con Windows...

and...will by happy!!!
[Biggs]

Fundamentos teóricos: "El bus, decodificación"

Puede decirse que el bus está conformado por tres secciones que son: bus de datos, bus de direcciones y bus de control. Mediante el primero fluyen los datos de lectura y escritura. Pero si todos los dispositivos usaran el bus de datos simultáneamente existiría contención de datos, es decir que se mezclarían no solo dando un resultado erróneo sino que también entrarían en cortocircuito todas las tarjetas que estén conectadas al bus. Para subsanar este problema se ideó el bus de direcciones en el cual se pone la dirección de la tarjeta con la cual se quiere hacer una operación de I/O y por un ciclo de bus, el bus de datos será usado solamente para esa tarjeta. A su vez en el bus de control se activan las señales correspondientes que me indican si la operación se está realizando sobre un puerto de I/O o sobre la memoria ( el bus de control tiene varios usos que luego se describirán ).

En resumen lo que ocurre es que el controlador de bus coloca la dirección de la placa con la que desea trabajar, activandose también las señales del bus de ctrol. correspondientes, y entonces el bus de datos solo puede ser usado por ese puerto.

Cuando se diseña una placa, debe existir en esta un circuito capaz de censar el bus de direcciones y control para determinar cuando está presente en estos la dirección con la que fue seteada previamente dicho dispositivo. Este es llamado decodificador de direcciones y su forma mas general es implementarlo con dos 74LS138.

Otro dato a tener en cuenta es que el bus de datos debe estar aislado de la interfaz por medio de un buffer y este solo será activado cuando el decodificador de direcciones envíe a este una señal indicando que la placa está siendo direccionada.

En la decodificación se incluyen las señales A0-A9, para poder determinar la dirección, IOR-IOW para saber si se desea realizar una operación de lectura o escritura y la línea AEN para saber si se está haciendo una operación de DMA, en caso de no estar activada se concluye que se trata de una operación con un puerto.

Pero la placa que vamos a direccionar no puede estar posicionada en cualquier dirección, así que acá les mando para que se direcciones se la puede programar; El micro (XT) puede direccionar dentro de su mapa de memoria 2^20 posiciones de memoria (1Mbyte) y dentro del mapa de puertos 2^16 (64Kbyte), sin embargo la PC utiliza solamente 2^10 direcciones, es decir que se pueden direccionar 1024 puertos distintos. En la figura vemos el espacio de los puerto de I/O

          0000h - ⁄------------ø 
| 512 | usada en el sistema base
01ffh - √------------¥
0200h - √------------¥
| 512 | en el slot de la PC
03ffh - √------------¥
0400h - √------------¥
| |
| |
| 64512 | no usada en la PC
| |
| |
| |
| |
ffffh - ¿------------Ÿ

Pero del sector reservada a los puertos (0200h-03ffh) no todo está disponible ya que, por ejemplo el puerto de la impresora LPTx tiene una dirección fija que nunca varía y entonces hay ciertas direcciones dentro de ese rango que no podemos usar, acá va una descripción de lo que hay entre 0200h y 03ffh:

                - ⁄-------------ø 
0200h |######1######| NO USADA
- √-------------¥
0201h | 1 | ADAPTADOR DE JUEGOS
- √-------------¥
0202h |####118######| NO USADA
0277h |#############|
- √-------------¥
0278h | 8 | SEGUNDO ADAPTADOR DE IMPRES.
027fh | |
- √-------------¥
0280h |####120######| NO USADA
02f7h |#############|
- √-------------¥
02f8h | 8 | SEGUNDO ADAPTADOR SERIE
02ffh | |
- √-------------¥
0300h |####120######| NO USADA
0377h |#############|
- √-------------¥
0378h | 8 | ADAPTADOR DE IMPRESORA
037fh | |
- √-------------¥
0380h |#############|
|#####48######| NO USADA
03afh |#############|
- √-------------¥
03b0h | |
| 16 | ADAPTAD. MONOCR Y DE IMPRES.
03bfh | |
- √-------------¥
03c0h |#############|
|#####16######| NO USADA
03cfh |#############|
- √-------------¥
03d0h | |
| 16 | AREA DE TARJETA CGA
03dfh | |
- √-------------¥
03e0h |#############|
|#####16######| NO USADA
03efh |#############|
- √-------------¥
03f0h | |
| 8 | ADAPTADOR DEL DISCO DE 5¨
03f7h | |
- √-------------¥
03f8h | |
| 8 | ADAPTADOR SERIAL
03ffh | |
- ¿-------------Ÿ

Como vemos la tarjeta de video, controladora y multi-ide tiene direcciones fijas, por lo tanto la placa que nosotros diseñemos debe quedar configurada en alguna o en varias de las áreas resaltadas, lo cual no quita que estas estén usadas por otras tarjetas como ser modem, scanner, etc. Por esto se colocan unos jumpers en la placa, actuando estos sobre el decodificador de direcciones para cambiar la posición de la placa.

También se puede implementar el decodificador de direcciones con una GAL 22v10. Si conocen a alguien que las programe la pueden implementar. Ustedes le alcanzan la programación y listo, les queda todo en un solo integrado y con más potenciales direcciones y todo!!!

Para los que no saben que es una GAL les cuento que son un montón de compuertas que mediante un array que se programa podes formar la función que quieras y adentro de una GAL podes poner funciones que involucren decenas y hasta cientos de compuertas y todo eso en un integrado.

Una forma más cheta y profesional de hacer una placa con puertos es usando un 8255 PPI (interfaz de puertos programables) que es un integrado que me permite tener 3 puertos de 8 bits cada uno y programarlos como se me cante, es decir como entrada o salida y en medio de una operación puedo cambiarle la programación y el puerto que funcionaba como entrada pasa a ser de salida. Pero si vamos a usar puertos fijos es al pedo, si lo quieren pídanmelo y en la próxima edición se los mando.

La decodificación de memoria es muy similar a la de los puertos, la diferencia principal es que la señal AEN no se incluye en este proceso por razones obias. Todo es igual asi que no lo voy a decir de nuevo, la IOR y la IOW son ahora reemplazadas por MEMR y MEMW respectivamente pero cumplen la misma función.

EL EJEMPLO

Dicho esto y, dado que ya explicamos la base de una placa de I/O vamos a ver el ejemplito, para lo cual sería joya si imprimen el plano y lo miran mientras leen estas líneas. Empezando por el decodificador vemos que colocando UN jumper en alguna de las 7 posibles posiciones obtendremos una dirección distinta de la placa. Esto se hace por si justo la dirección entra en conflicto con otro periférico y bueno, entonces nos movemos a una dirección libre donde no jodamos a nadie. Si miran en la tabla les indico en que dirección quedan posicionados los tres puertos según la posición del jumper. De estos puertos podemos decir que tenemos 1 puerto de salida (controlado por la salida Y2 del decoder) con salida a relay, es decir que cada bit puede manejar algo asi como 700W, pero por seguridad yo les aconsejo que se fijen bien cuanto se aguanta el relay. Esto les permite manejar luces, motores y cualquier artefacto de potencia. Si se les ocurre poner censores o si bueno, quieren ingresar datos a la PC tienen un puerto de entrada (Y0 del decoder) y un oscilador trucho-programable (Y1). Echo la presentación de los tres puertos sigamos viendo el decoder, este es activo en bajo, es decir cuando se activa aparece un cero en la salida correspondiente. Está implementado con dos 74ls138 que son los IC1 y 2.

Vamos a ver primero el puerto de entrada. Se encuentra con un buffer independiente (IC13) al de los puertos de salida porque sino existiría contención de datos. Vemos que solo cuando el decodificador detecta la dirección correspondiente y cuando además se detecta que se quiere leer el puerto, solo en esa circunstancia se pone a cero la patita G sacando al buffer de alta impedancia. Por tratarse de un puerto de entrada, cuando se detecta que se está accediendo al puerto, en ese lapso de tiempo se detiene el clock del registro de dicho puerto (IC6) para que este no modifique el valor de sus salidas, es tan solo una cuestión de prolijidad. En todo el tiempo restante, es decir, cuando no se accede al puerto este recibe los pulsos de clock censando asi las entradas. Los operacionales que se encuentran a la entrada del registro (IC15-16) están en configuración buffer y los mandé para poder ingresar tensiones mas altas y para independizar la salida del registro por si alguno se manda alguna cagada. Los tres registros tienen una pata de reset la cual se conectó a un circuito RC. Dicho circuito logra una exponencial creciente que resetea los puertos al prenderse el equipo.

El puerto de salida es en esencia similar. El buffer (IC3) se activa cuando se direcciona cualquiera de los dos puertos de salida, pero dependiendo de cual se selecciona se le dará clock a uno u a otro registro (IC7). En este sentido el funcionamiento es opuesto al del puerto de entrada, cuando se detecta que se está direccionando el puerto, ahí se le da clock al registro para que pueda cargar el dato que le está mandando el micro y cuando no se lo direcciona no se aplican dichos pulsos ya que esto significaría que cargase datos no válidos. Como queremos controlar potencia con los dichosos 8 bits de salida, los pasamos por operacionales (IC11-12) en configuración buffer para que ganen un poco de corriente ya que con lo que nos entrega el registro no llegamos a exitar los relay.

El oscilador programable es una truchada, digo es un ejemplo nada mas, si lo tengo que hacer bien lo hago con un 8253 TIMER, pero como es un flor de IC me pareció un poco zarpado ponerlo en el segundo número de la revista, asi que implementé uno para algunas frecuencias. Las idea es que tengo un contador (IC18) que cuenta y cuando llega a un valor determinado, que en este caso es Eh se resetea cargando el valor que se encuentra en las entradas preseteables. Si dicho valor es, por ejemplo Ah cuenta una cantidad de veces hasta que llega a Eh y se resetea a Ah nuevamente, pero se modifico este valor (Ah) modifico el tiempo que se tarda en llegar a dicho pulso de reset modificando de esta forma la frecuencia. Se aclara que el contador deja de contar cuando se direcciona el puerto afín con este mediante la pata de control G. Para que la salida sea con un ciclo de actividad de un 50%, el pulso de reset ataca a un flip-flop JK (IC 17)haciendo que para cualquier frecuencia seleccionada se obtenga dicho ciclo de actividad. Entonces vemos que todo depende del valor que coloque en las entradas preseteables y dicho valor es el que cargo en el registro del timer. Dicho registro (IC8) controla con sus 4 bits mas significativos las entradas preseteables del contador mientras que los otros 4 bits no se usan para nada.

Este contador recibe un clock de 1.79 Mhz a la cual llamaremos frecuencia F0 y el valor de carga del contador en decimal lo llamamos Count. La frecuencia que se obtiene a la salida es

Fsal=F0/((14-Count)*2)

Count no puede adoptar los valores 14 y 15 porque caería en un estado de indeterminación.

Solo nos resta analizar el divisor de frecuencia (IC9). Como la frecuencia que obtenemos a partir del bus es muy alta para ser aplicada a los integrados, la pasamos por un divisor que en este caso, tomamos la salida que divide por 8 y asi obtenemos un clock mas bajo que puede ser aplicado sin problemas a los IC.

Bueno creo que eso fue todo respecto a la placa solo me resta darle la lista de componentes:

 IC1................74ls138 
IC2................74ls138
IC3................74ls245
IC4................74ls03
IC5................74ls08
IC6................74ls273
IC7................74ls273
IC8................74ls273
IC9................74ls93
IC10...............74ls32
IC11...............lf444
IC12...............lf444
IC13...............74ls245
IC14...............74ls32
IC15...............lf444
IC16...............lf444
IC17...............74ls111
IC18...............74ls190
R..................10KÍ*¨W
C..................2,2Êf*16v

Esto es todo por ahora, espero poder haberles aclarado los dudas y si no, cualquier cosa nos vemos en el área de mensajes de, RAW POWER - 238/2144 -.

A, una última línea, si no saben de electrónica digital, compren un libro, es fácil, muy fácil, no se dejen impresionar, no pueden dejar de tener conocimientos en esta área.

Nos vemos en la próxima edición de FULCRUM MAGAZINE!!!

by
[Biggs]

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT