En esta ocasión vamos a estudiar uno de los grandes deseos que surgieron en los 80 para usar al máximo la Commodore 64, El Brazo Robot
Vamos a estudiar que hacía, como funciona por dentro, que circuitos tenía y cómo lograr conectar una Commodore con un circuito casero que vamos a diseñar para que funcione nuestro brazo Robot.
Qué es el Brazo Robot SVI-2000
El Brazo Robot es un juguete genial para nuestra Commodore 64 que consiste en un Brazo con 5 ejes en los cuáles vamos a poder hacer diferentes movimientos ya sea usando dos joysticks o conectándolo a nuestra Commodore 64.
El Brazo incluye tres tipos diferentes de agarres, la garra típica, un agarre magnético y una pala para levantar polvo o líquidos
Para funcionar necesita de 4 baterías tipo D que se ubican en la parte de abajo del mismo
Como el Brazo presenta movimientos el mismo tiene “patas” o extensiones que sirven para darle muchas más estabilidad
¿Cómo lo usamos con dos joysticks?
El brazo Robot puede ser utilizado sin ningún contacto con una computadora sólo utilizando dos Joysticks conectados a través de la interfaz DB9.
Axis 1 Rotación Brazo
Control 1 Izquierda: rota a la izquierda el brazo
Control 1 Derecha: rota a la derecha el brazo
Axis 2 Articulación inferior Brazo
Control 1 Arriba: baja el brazo
Control 1 Abajo: sube el brazo
Axis 3 Articulación superior Antebrazo
Control 2 Arriba: baja el antebrazo
Control 2 Abajo: sube el antebrazo
Axis 4 Rotación Garra
Control 2 Izquierda: rota a la izquierda la garra
Control 2 Derecha: rota a la derecha la garra
Axis 5 Apertura Garra
Control 1 botón: abre la garra
Control 2 botón: cierra la garra
Cómo funciona el brazo robot internamente
El brazo robot posee en su interior 4 motores eléctricos para hacer funcionar los distintos ejes y operar la pinza.
Cada uno de estos motores está conectado a una serie de engranajes que sirven para darle más fuerza al movimiento y permitir que el brazo se eleve o rote.
El Brazo recibe los comandos para funcionar desde el puerto db9.
El gráfico anterior muestra las conexiones desde un joystick con lo que la salida deberá ser igual para poder conectarlas al brazo Robot.
Puerto Controlador 1
Los pines 1 y 2 controlan el eje 2 del brazo bajándolo cuando vamos hacia adelante o sea usando el pin 1 y subiéndolo cuando vamos hacia atrás con el pin 2.
Los pines 3 y 4 controlan el eje 1 del brazo rotando hacia la izquierda cuando vamos hacia la izquierda o sea usando el pin 3 y rotando hacia la derecha cuando vamos hacia la derecha con el pin 4.
El pin 6 que corresponde al botón, Abre la Garra.
Los pines 5, 7 y 9 no se conectan
Puerto Controlador 2
Los pines 1 y 2 controlan el eje 3 del antebrazo brazo bajándolo cuando vamos hacia adelante o sea usando el pin 1 y subiéndolo cuando vamos hacia atrás con el pin 2.
Los pines 3 y 4 controlan el eje 4 que es la rotación de la garra rotando hacia la izquierda cuando vamos hacia la izquierda o sea usando el pin 3 y rotando hacia la derecha cuando vamos hacia la derecha con el pin 4.
El pin 6 que corresponde al botón, Cierra la Garra.
Los pines 5,7 y 9 no se conectan.
Funcionamiento
Lo que sucede al por ejemplo presionar un botón es que siempre los pines de movimiento están en +5Volts cuando hacemos un movimiento con el Joystick es el mismo hace que el pin de movimiento descargue a través del pin 8 de ground lo que hace que se active el motor eléctrico correspondiente al eje que queremos mover.
Circuito para mover el brazo robot
Para poder conectar la Commodore 64, la 20c o cualquier computadoras con una interfaz de output basada en un CIA 6526 o en un VIA 6522 vamos a utilizar el siguiente circuito en nuestro brazo robot.
El mismo tiene diferentes componentes siendo los mismos
Puerto SV1 o User Port de la Commodore 64
Analizando este circuito vemos que en realidad sólo utiliza los puertos C,D,E y F que representan las conexiones de la CIA2 PB0, PB1, PB2 y PB3 para enviar las señales del movimiento del brazo Robot y los puertos 2 y N para enviar +5v y +0v o ground a nuestro integrado 4028N.
Decodificador octal 4028BE
El integrado 4028BE es un decodificador de BCD a decimal y posee 16 pines los cuáles se reparten en 4 entradas y 10 salidas, con los dos pines restantes siendo +5v en el VDD y +0v o Ground en el pin VSS.
El funcionamiento de este chip es traducir los valores recibidos en los pines ABCD y hacer una única salida en los pines del 0 al 9 según la siguiente tabla de verdad.
Transistores BC548 + resistencia 12k
El transistor BC548 tiene la función de descargar los pines de nuestras conexiones DB9 al brazo robot, los pines de brazo robot están en +5v y cuando el transistor recibe en su pata Base corriente se activa y hace que se descargue el pin a ground.
Usamos la resistencia de 12K para proteger al transistor, lo que haremos con este valor es ecualizar los valores de +5v TTL de salida del decoder 4028 al conectarse al gate de nuestro transistor. Esto es por que los valores de TTL tiene una diferencia aprox de +2.5V entre el 0 y el 1 lógicos
Comparando transistores BC238 y BC548
Los transistores BC238 que pide el circuito no son muy comunes, por lo que vamos a compararlos con el modelo BC548 para ver si son reemplazables.
Max Ratings | BC238 | BC548 |
Collector Base Voltage | 30v | 30v |
Collector Emitter Voltage | 25v | 30v |
Emitter Base Voltage | 5v | 5v |
Collector Current | 100mA | 100Ma |
Total Power Dissipation | 500mW | 500mW |
DC Current Gainat VCE = 5 V, IC = 2 mA Current Gain Group ABChfe | 220460800 | 220330600 |
Current Gain Bandwidth Productat VCE = 5 V, IC = 10 mA, f = 100 MHz | 150 minimun | 300 typical |
Con esto podemos ver que podemos reemplazar para nuestro circuito los transistores BC238 con los más modernos BC548 ya que poseen valores similares para lo que vamos a utilizar siendo el más importante los 5v a la salida del transistor en el Emitter.
Salidas DB9
La conexión al brazo robot se dará a través de las salidas db9
El gráfico anterior muestra las conexiones desde un joystick con lo que la salida deberá ser igual para poder conectarlas al brazo Robot.
Los valores de estos pines cambian de polaridad para mantener la integridad de la señal asi podemos ver la siguiente tabla:
PIN | Voltage |
1 | -2.5v |
2 | +2.5v |
3 | -2.5v |
4 | +2.5v |
5 | +3v |
6 | -2v |
7 | 0v no está conectado |
8 | GROUND 0v |
9 | -3V |
Armando un circuito básico de prueba
Vamos a armar un circuito de prueba para rotar la garra a izquierda y a derecha para esto vamos utilizar los pines 3 y 4 del controlador 2, como esta armado este circuito el mismo va a ser posible conectarlo a una Commodore 64 ya que está eléctricamente aislado de los puertos del Joystick 1 y 2 a través de un transistor.
Vamos a usar un chip BCD 4028 teniendo para este ejemplo como salidas Q1 y Q2 y como entradas A y B.
Para esto nuestra tabla de verdad se activa cuando A=1 y los demás cero para Q1 y cuando B=1 y los demás igual a cero para Q2.
El siguiente sería el circuito de prueba que armamos, vamos a explicarlo paso a paso:
Qué es lo que sucede en este circuito, al presionar el botón B el pin 3 que está activo o -2.5v pasa a cero al activarse el transistor que este tiene conectado y al presionar el botón A el pin 4 que está activo o +2.5v por default baja a cero al activarse el transistor que este tiene conectado.
El mismo está representado en un breadboard con la siguiente forma:
Dejamos fijos en 0v los inputs C y D y los inputs A y B los conectamos a botones para poder ponerlos en +5v o +0v según deseemos.
Conectamos el brazo Robot en el puerto de Joy 2 pin 3 para ir a la izquierda (cable violeta) , pin 4 para ir a la derecha (cable naranja) y pin 8 para el ground (cable azul).
El único cambio que hicimos con respecto al circuito original fue poner una resistencia de 12K ohms ya que la de 4.7K dejaba pasar algo de voltaje en la base y el brazo seguía girando aunque muy lentamente.
¿Cómo es que sucede esta magia? Veamos la tabla de verdad.
Los pines A,B,C y D están en 0 volts por default, si vemos nuestra tabla de verdad esto hace que se active el pin 0 de nuestro procesador 4028BE el cuál no está conectado a ningún lado.
Al presionar el botón A (derecha), le damos +5v al pin de input A con lo que nuestro input queda en A=1 y B=C=D=0, eso en nuestra tabla de verdad hace que se active el pin de salida 1 de nuestro 4028 lo que activa al transistor por estar conectado a la base, al activarse el transistor el pin 4 de nuestro brazo Robot que está +2.5V por default pasa a cero y esto hace que circule la corriente a tierra. Al estar el pin en cero se mueve la garra, en este caso girando hacia la derecha.
Al presionar el botón B (izquierda), le damos +5v al pin de input B con lo que nuestro input queda en B=1 y A=C=D=0, eso en nuestra tabla de verdad hace que se active el pin de salida 2 de nuestro 4028 lo que activa al transistor por estar conectado a la base, al activarse el transistor el pin 3 de nuestro brazo Robot que está en -2.5V por default pasa a cero y esto hace que circule la corriente a tierra. Al estar el pin en cero se mueve la garra, en este caso girando hacia la izquierda.
Debemos conectar el pin 8 de ambos conectores DB9 de nuestro robot a GROUND para que por ahí se descargue.
¿Cómo lo usamos desde la Commodore 64?
Vamos a conectar el circuito de prueba a nuestra Commodore 64 y vamos armar un pequeño programa para abrir y cerrar la garra.
Para esto vamos a usar un user port breakout board (para más información ver el Episodio 2 de los chiches de la Commodore).
Conexiones Físicas
Fijense que tenemos 4 puertos de input para nuestro 4028BE, vamos a conectarlos mismos al CIA de la Commodore en sus puertos PB0,PB1,PB2,PB3. Para esto vamos a modificar el circuito breadboard anterior y en lugar de botones y resistencias en los inputs vamos a dejarlo conectado a los puertos CDEF de nuestro UserPort BreakOut Board.
Conectaremos los +5v de port 2 y el +0v del port 1 a nuestros rieles rojos y azules de nuestro breadboard.
En nuestra maqueta conectaremos:
PB3/F al pin 13/B del 4028
PB2/E al pin 12/C del 4028
PB1/D al pin 11/D del 4028
PB0/C al pin 10/A del 4028
El Programa
Para hacer funcionar nuestro brazo robot vamos a crear un programa en basic que va a tomar nuestro input y por un segundo de tiempo hará girar la garra del brazo robot a la izquierda o a la derecha. Para esto vamos a programar el UserPort, de nuevo si quieren recordar como hacerlo miren el episodio 2 de los Chiches de La Commodore.
Comenzaremos definiendo como output los bits del Port B escribiendo al data direction register B, queremos que los bits PB0 a PB3 sean de output, esto equivale a 1+2+4+8 = 15
10 POKE 56579,15
Ahora vamos a escribir al Peripheral Data Register B y dejarlo como output en cero para que no realice ningún movimiento nuestra garra.
20 POKE 56577,0
Ahora vamos a escribir al Peripheral Data Register B dos veces una para que gire la barra a la derecha y otra la izquierda. Para ir a la izquierda vamos a tener que activar nuestro botón B que se corresponde al número PB3=1 PB2=0 PB1=0 PB0=0 igual al número decimal 8
30 POKE 56577,8
Esperar 5 segundos
40 FOR I = 1 TO 1000 : NEXT I
Y para ir a la derecha el equivalente al botón A que corresponde a las conexiones
PB3=0 PB2=0 PB1=0 PB0=1. igual al número decimal 1.
50 POKE 56577,1
Esperar 5 segundos
60 FOR I = 1 TO 1000 : NEXT I
Finalmente volvemos a detener la garra.
70 GOTO 30
De esta forma podemos ver como activamos nuestro brazo robot.
Este código lo podemos encontrar en Github en el github de Osolabs en https://www.osolabs.tech/github y ahí buscar el github de los chiches de la Commodore, episodio 3.
Resumen
Y de esta forma funciona nuestra querida Jabonera que tanto hemos usado para poder interrumpir alguno que otro videojuego y ahora sí ,con vidas infinitas, poder terminarlo. Un circuito muy simple y uno de nuestros clásicos chiches de Commodore.
Estudio visual
Para poder estudiar visualmente cómo funciona el Reset Jabonera, les dejo este video que complementa al artículo.
Referencias
A continuación les dejo algunos links donde profundizar el tema:
VIDEOS
Aquí un link al video sobre este episodio
Los Chiches De la Commodore – Episodio 2 UserPort Breakout Board
Aquí tiene acceso a toda la serie de videos:
PAPERS
CD4028B TYPES datasheet (Rev. C)
CODIGO
Todos los ejemplos de código de los videos los pueden encontrar en: