Revistas en papel
Anterior
MenĂº
Logotipo

Amiga.InFo Nº 0 - Noviembre/Diciembre 1994 - Proyecto hard

NOTA: Pulsando sobre las fotos con borde azul ampliarás la imagen.

AMIFORO

Luz verde para tu Amiga...

Aunque algunos se lo salten a la torera, todos sabemos para qué sirve un semáforo... pero seguro que este no se lo saltará nadie, ya que Xim Montero nos fabricará un "Amiforo" que nos ayudará a comprender el control de montajes conectados al puerto paralelo.

En el Amiga, como en todos los ordenadores, existen puertos de expansión que permiten a nuestro equipo poderse ampliar y conectarse a periféricos externos como impresoras, módems otros ordenadores, etc...

Los puertos más comunes en todos los ordenadores son el paralelo, el serie, el bus de expansión y el de Joystick/Ratón.

El puerto paralelo, además de otros controles, lleva 8 líneas (cables) para comunicación tanto de entrada al ordenador como de salida (del ordenador al exterior). Las 8 líneas se asignan a un byte (8 bits) y cada línea puede tener dos estados eléctricos que se corresponden con los dos estados de los bits (1's y 0's)

El puerto serie, permite la comunicación a través de un solo cable, con lo cual los bits van uno detrás de otro (a diferencia del puerto paralelo, en el cual los datos viajan simultáneamente por los 8 cables). Los buses de expansión son conectores que están unidos directamente a las memorias y al procesador (CPU), y así podemos controlar directamente todo el ordenador desde el exterior (es el caso del Action Replay, o los típicos cartuchos de ordenadores C64, Spectrum, Consolas de videojuegos, etc).

El puerto de juegos permite la conexión del ratón, paddles, joystick, lápiz ópticos, y, en general, cualquier dispositivo que se nos ocurra.

Para el artículo presente utilizaremos el puerto paralelo. La idea es montar un semáforo. Como tenemos que controlar varias luces simultáneamente debemos tener varias líneas de control.

En el puerto paralelo hay 13 líneas de comunicación de las cuales 8 son propiamente las de datos, 3 son líneas auxiliares también llamadas líneas genéricas de control (all purpose in/out control lines" (por ejemplo para que una impresora informe de que no tiene papel, etc.) y 2 son de control para asegurar que los datos han llegado a su destino. Las dos líneas de control últimas funcionan automáticamente, sin embargo en este montaje no las vamos a tener en cuenta. Las otras líneas de control (las 3 líneas genéricas) no las vamos a usar tampoco. Usaremos únicamente las 8 líneas de datos.

Estas líneas pueden ser de entrada o de salida, y programables cada una de ellas independientemente de las demás. Cada aplicación concreta las configura a medida. No tienen por qué estar todas a IN (entrada) o todas a OUT (salida).

Una línea está a IN si permite que el ordenador detecte datos del exterior. Una línea está a OUT si permite al ordenador actuar sobre un dispositivo exterior.

Las líneas del ordenador son de comunicaciones. Esto significa que pueden soportar poca potencia (ni se os ocurra poner un motor directamente al puerto paralelo). A pesar de eso pueden llegar a iluminar unos pocos LED's (Light Emitting Diode). Un LED es un dispositivo que se ilumina con unos 10 miliamperios (Ver figura 7). Si ponemos 6 Leds (dos rojos, dos amarillos y dos verdes) tenemos un total de 6x10=60 miliamperiores. El puerto paralelo puede soportar hasta 100 miliamperios (mA) (dato que se puede sacar de los libros que te dan cuando compras el Amiga, sección de conectores) así que todavía podemos encender los 6 a la vez si interesa. (Además, de hecho, no estarán los 6 a la vez en un funcionamiento normal, con lo cual consumiremos menos corriente).


¿COMO ENCENDER UN LED?


FIGURA 1. Circuito típico usado para encender el led. Se requiere un generador de 5 Voltios y, una resistencia.

Para encender un LED el montaje típico es el de la figura 1, donde los 5 voltios son un valor que no tiene por qué ser fijo (una pila de 4.5 voltios sirve igual, una fuente de 15v también, una batería de coche (13,8v)...).

Pongo 5 voltios porque el Amiga entrega 5v en un pin (el 14) del puerto paralelo.

¡¡¡Atención usuarios AMIGA 1000!!! El puerto paralelo tiene otra configuración. Consultar esquema del manual para ver equivalencias. Estos voltios los vamos a aprovechar. La resistencia de 1K (o sea 1000 ohms, ver figura 8 para identificar los colores) limita la corriente. La ley de Ohm dice lo siguiente:

I x R = V

donde 'V' es el voltaje en bornes de la resistencia y 'I' la intensidad de corriente (mide la cantidad de electrones) que circulan a través de dicha resistencia.


FIGURA 2.

Cuando el LED se enciende "cae" 1 Voltio en sus bornes o terminales, esto significa que sólo 4 van a caer en bornes de la resistencia (ver fig.2). Si ponemos una R de 1K (una resistencia de 1000 ohms) podemos saber la cantidad de corriente que circula así I x R = V -> I = V / R -> I = 4V / 1000 = 4mA (4 miliamperios)

Estos amperios indican (o están relacionados) con el número de electrones que atraviesan la resistencia y que obligatoriamente deben atravesar el LED para cerrar el circuito. Al atravesar el LED lo encienden.

Habíamos dicho que un led se enciende con 10 mA, sin embargo si sólo pasan 4 mA como hemos calculado, se iluminará con menos intensidad pero suficiente para poder ser visible. En otros artículos veremos cómo dar potencia a las salidas del ordenador.


FIGURA 3.

Si quisiéramos encender un poco más los LED's podríamos poner una resistencia más pequeña para que la intensidad subiera. Por ejemplo si busco una intensidad I=12mA tendría

I x R = V -> R = V / I -> R = 4 V / 12 mA = 4 / 0.012 = 333 Ohms

Con 12 mA se ilumina ligeramente más que con 10 mA. Un LED aguanta bastante (puede aguantar hasta unos 100mA) pero no tiene sentido forzarlo mucho porque se nos acabaría quemando. Un LED en condiciones normales (10 - 15 mA) tiene una vida aproximada de unos 50 años.

Los pines del puerto actúan como interruptores, de manera que, cuando hay un 0 lógico programado, el interruptor cierra el pin del conector a "masa" o sea cero voltios. Si hay un 1 lógico programado, el interruptor se abre y no pasa corriente. Ver figura 3.


FIGURA 4.

Así, podemos coger un pin que se corresponda con un bit de datos y conectarlo como en la figura 4.

Los pines de control que no usamos (general purpose lines) también actúan así.

Para montar seis leds podemos seleccionar, por ejemplo, los de la tabla siguiente (tenemos 8 líneas para programar):

Bit 0 - salida para LED Rojo, Semáforo 1
Bit 1 - salida para LED Ambar, Semáforo 1
Bit 2 - salida para LED Verde, Semáforo 1
Bit 3 - salida para LED Rojo, Semáforo 2
Bit 4 - salida para LED Ambar, Semáforo 2
Bit 5 - salida para LED Verde, Semáforo 2
Bit 6 - libre
Bit 7 - libre

Observar que los bits 6 y 7 de datos (de líneas de datos) quedan libres y por tanto podemos utilizarlo, por ejemplo, para poner dos interruptores como entrada.


FIGURA 5.

Un bit de datos de entrada, a efectos electrónicos es como si no estuviera conectado y hubiera un "bloque espía" que observara si hay o no tensión (voltaje) en ese pin o para del conector (ver figura 5).

Un montaje típico es el de la figura 6.

Si el interruptor está cerrado, la conexión es directa a masa, a cero voltios, y en el ordenador se detecta un 0 lógico (los 5 voltios quedan como "separados" por una resistencia que no influye).


FIGURA 6.

Ahora bien, si el interruptor lo abrimos, el pin del ordenador no tiene NINGÚN contacto con masa, con los 0 voltios y sí en cambio tiene un camino a 5 voltios a través de la resistencia. Como no hay ningún circuito cerrado (interruptor abierto, y el bloque espía es como si no tocara el pin del puerto) la corriente es cero porque los electrones no pueden circular por ningún camino, y por tanto, según la ley de Ohm, IR=V, si I=0 entonces V=0 en bornes de la resistencia. En la resistencia "caen" cero voltios, si por un lado la conectamos a 5 voltios, al otro lado tenemos también 5 voltios. Los 5 voltiosllegan al pin con lo cual detectamos un 1 lógico. Para cada uno de los pines de salida del puerto, hay que replicar el circuito salida-resistencia-led, y obtendremos el esquema del montaje completo como el que está en la figura 9.

Ya lo tenemos todo. Sólo falta comprar un conector D-25 para el puerto, como el de la figura 12, comprar los LED's, las resistencias y los interruptores, comprar una plaquita de circuito impreso y ponerse a soldar. El conector puede valen unas 100 pesetas, un led 10 pesetas (y si los pedimos de alta eficiencia o alta luminiscencia, brillan más con la misma corriente, costarán unas 30 pesetas), y las resistencias van a poco más de peseta cada una.


PROGRAMACION PUERTO PARALELO

Es recomendable comprarse más led's de la cuenta (5 ó 10 de cada color) y unas 20 resistencias de golpe (de 1K, pero si queréis, comprad ya de otros valores para experimentar por vosotros mismos).

Aun falta comentar cómo se programan los 1's ó 0's en los pins de salida (abrir o cerrar el interruptor a masa) y cómo se leen los 1's y los 0's de entrada (ver si hay o no tensión en un pin de entrada).

El puerto lo tenemos conectado internamente a los llamados CIA del ordenador. Los CIA son unos circuitos integrados (Chips) que el Amiga usa para controlar dispositivos y comunicarlos con el procesador. El Amiga lleva dos CIA (Complex Interface Adapter). Cada uno lleva dos puertos paralelos completos, de los cuales tres son para conexiones internas (con el Led del Power, con el botón del ratón, del Joystick, control de las líneas auxiliares del puerto serie, control unidad de disco, etc.). El puerto que queda libre, Commodore lo ha conectado por completo al puerto paralelo accesible en las conexiones externas.

Para programar el puerto paralelo, necesitamos programar el "puerto B" del llamado CIA Impar (existe el CIA Par y ahora no nos interesa). El "puerto A" controla el botón izquierdo del ratón y el botón del Joystick.

Para programar cada uno de los puertos de los CIAS debemos acceder a dos posiciones de memoria donde está mapeado el chip.

Para el CIA impar las cuatro direcciones de interés son:

$bfe001 - DRA
$bfe101 - DRB
$bfe201 - DDRA
$bfe301 - DDRB

Donde A y B son los nombres de los puertos (el paralelo es el B)

DR significa Data Register (Registro de datos) y contiene los datos que debemos leer o escribir.

DDR significa Data Direction Register (Registro de las direcciones en que van los datos). Un uno significa, en todos los ordenadores, una salida, y un cero es una entrada. Esto se hace así para que cuando encendamos el ordenador (Absolutamente todos los registros del ordenador a cero) las líneas sean de entrada y por tanto no puedan salir datos al exterior y provocar algún funcionamiento indeseado en algún circuito.

Así, si conectamos los bits 0 a 5 del puerto paralelo a los leds y el 6 y el 7 a los interruptores, necesitamos que de 0 a 6 sean salidas (1 en el DDR) y los bits 6 y 7 sean entradas (y por tanto 0 en el DDR).


Haremos, desde código máquina:

MOVE.b #%00111111, $bfe301 ;DDRB, observar que es .b (byte)

FIGURA 7. (Izqda.) FIGURA 8 (Derecha)

Ahora falta programar los datos. Encender el Led es cerrar el circuito, o sea, escribir un cero. Si quiero encender el rojo del semáforo 1 y el verde del semáforo 2, hay que encender los leds de los bits 0 y 5 y el resto apagados, es decir, poner a cero los bits 0 y 5 y poner a uno el resto. El valor que escribamos en los bits 6 y 7 no significa nada puesto que las líneas son de entrada y el bit que nosotros movemos como salida se ignora. Por ejemplo, los podemos poner a cero.

Haríamos:

MOVE.b #%00011110, $bfe101 ;DRB

MATERIAL UTILIZADO

Un Conector D-25 MACHO ¡para soldar en placa!, como el de la figura 11, 6 LED's (2 rojos, 2 ambar y 2 verdes), 6 resistencias de 1 KOhm y 2 pulsadores.

También unaplaca de circuito impreso (de 5 cm x 5 cm y con agujeros estañados). El conector cuesta unas 100 ptas, un led 10 ptas. (los hay de alta luminiscencia, brillan más con la misma corriente, y valen unas 30 ptas), y las resistencias una pta. cada una (Material que fácilmente se encuentra en cualquier tienda de componentes electrónicos)

Finalmente, para leer el estado de los pulsadores, debemos leer el DRB y testear el bit correspondiente (Supongamos que asignamos un botón rojo al bit 6 y un botón amarillo al bit 7).

Para testear el botón rojo, se hace:

BTST #6, $bfe101

Para testear el amarillo se hace:

BTST #7, $bfe101

Notar que para testear el botón del ratón se hace

BTST #6, $bfe001

y para el del joystick

BTST #7, $bfe001

Estos bits están a cero si se cierra el pulsador (conexión a masa).

Si quisiera poner un Led en el Joystick y no necesitara el botón, podría poner la línea como salida haciendo:

BSET #7, $bfe201 ;DDRA (bit=1 -> Salida)

Ahora encendería el LED con un

BCLR #7,$bfe001 ;DRA

y lo apagaría con

BSET #7,$bfe001 ;DRA

Como comentario: a muchos les parece raro que el LED del power del ordenador se encienda con un cero y se apague con un uno cuando parece que lo más lógico sería uno)activo=led encendido. ¡NO! El truco está en que el LED del power se comporta de manera idéntica a los que hemos puesto nosotros (0=circuito cerrado=led encendido), salvo que en el ordenador hay una etapa separadora para dar más potencia al LED y que se ilumine con más intensidad.

BSET #1,$bfe001 (apaga el LED) ;DRA

Os recomiendo a todos que busquéis el circuito eléctrico del ordenador (en los A500 venía con el manual, en los 1200 ya no es así) o observéis los CIA's (Chips llamados 8520) y sus conexiones. Se puede ver su conexión directa al puerto paralelo y al de juegos.

Antes de llegar al final del artículo, faltaría comentar que aunque nuestros ejemplos han sido en código máquina, se puede programar en cualquier lenguaje. Para Basic, por ejemplo, hay que pasar las posiciones hexadecimales a decimal.

Hemos pensado un programa para jugar un poco. El programa se puede ensamblar desde el disco adjunto. Se incluye también el programa ejecutable por si no se quiere pasar por el ensamblador. Aun y así, es recomendable pasar por el ensamblador para poder modificar cosas.

De hecho, a partir de la etiqueta 'SEMAPHORE' se encuentra el "programa" del semáforo. Un programa con un lenguaje que nos hemos inventado:

Las salidas del programa son los LED's. Las entradas son los botones de la placa,

El programa se estructura así:

Hay varias rutinas que el semáforo puede ejecutar. Se cambia de rutina con el pulsador rojo.

Cada rutina consta de una sucesión de combinaciones luminosas. Por ejemplo:

Verde1, Rojo2
Ambar1, Rojo2
Rojo1, Rojo2
Rojo1, Verde2
Rojo1, Ambar2
Rojo1, Rojo2

donde cada combinación puede durar más o menos. Por ejemplo, los verdes durarán por ejemplo siete segundos, mientras los ámbar 2 segundos y los Rojo-Rojo tan sólo un segundo.

La duración puede especificarse como "-1 Segundos" en cuyo caso se entenderá que debe esperarse a la pulsación del botón amarillo.

Cada rutina debe ir precedida del número de combinaciones que tiene, para saber cuándo se termina.

La lista de rutinas puede ser infinita. Indicamos el final escribiendo después de la última rutina un 0. Con ello, se entendería que la próxima rutina tendría cero combinaciones, y como eso es absurdo, se vuelve a empezar por la primera rutina.

La estructura es:

word: Número de líneas de la primera rutina

byte: Duración primera combinación
byte: Primera combinación (Número que será directamente enviado al CIA)
byte: Diración segunda combinación o evento
byte: Segundo evento
...

byte: Duración de la última combinación de la primera rutina.
byte: Ultima combinación

word: Número de eventos de la segunda rutina

byte: duración
byte: combinación
...
byte: duración
byte: combinación

...
word: Número de eventos de la última rutina

byte: duración
byte: combinación
...
byte: duración
byte: combinación

word: #0 ; indica final de la cadena.

Experimentad con esto. Podéis haceros otro montaje con ocho LED's. Poned por ejemplo todo interruptores (8 entradas), para dos joysticks más (como en Dinablaster, ¿no?). Para los amantes de los trenes eléctricos ya tenéis una forma de controlar el cruce de vías, o el paso de peatones... o mil cosas más que se os puedan ocurrir. Probad nuevas combinaciones. Cambiad los programas. Aquí, en la redacción hay quien ha simulado las luces del coche fantástico... (¡Sólo le faltaba el coche!).

Si queréis que los eventos no se midan en pasos de un segundo, haced un cambio en MAX EQU 50 y poned otro valor (un valor menor es más rápido).

Los programas de ejemplo que van incluidos en el disco del mes son:

  • SEMAFORO 1: Semáforo normal, en el que los dos semáforos son de coches y con el botón (simulando el centro de control de tráfico) ponemos los semáforos en espera. (2 programas)

  • SEMAFORO 2: Semáforo de coches uno, y semáforo de peatones el otro (el Led ámbar no se usa). Dos programas: Uno simulando el funcionamiento normal, y otro simulando el funcionamiento en el que el peatón debe pulsar su botón (bit #7) para poder cruzar.

Bye y... ¡a respetar los semáforos!

Comentario: Este montaje consume tan poca corriente que se puede conectar y desconectar con el ordenador en marcha, sin embargo. NO ES NADA RECOMENDABLE HACERLO, puesto que se podrían provocar cortocircuitos indeseados al extraer el montaje del puerto paralelo.

Amiga.InFo y el autor de este montaje no se hace responsable de ningún daño producido por negligencia al hacer este u otros montajes. Después de montarlo, hay que revisar con atención todos los conexionados y evitar errores en las soldaduras. Sólo cuando estemos totalmente seguros, es cuando hay que probarlo con el Amiga.

  • Observación: NUNCA conectéis al mismo cable 5v y masa NI POR EQUIVOCACIÓN, PUEDE DAÑAR EL ORDENADOR.


FIGURA 9 (arriba). Esquema de conexionado del circuito Amiforo. Observar que únicamente utilizamos 10 líneas de conexión al Amiga (2..9, 23 y 14). Hay que prestar especial atención al conectar esas diez líneas.

FIGURAS 10,11 Y 12 (abajo). Diferentes vistas del Amiforo ya montado y probado.


Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal