Los Chiches de la Commodore 64 – Episodio  3 – El Brazo Robot

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 RatingsBC238BC548
Collector Base Voltage30v30v
Collector Emitter Voltage25v30v
Emitter Base Voltage5v5v
Collector Current100mA100Ma
Total Power Dissipation500mW500mW
DC Current Gainat VCE = 5 V, IC = 2 mA Current Gain Group ABChfe220460800220330600
Current Gain Bandwidth Productat VCE = 5 V, IC = 10 mA, f = 100 MHz150 minimun300 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:

PINVoltage
1-2.5v
2+2.5v
3-2.5v
4+2.5v
5+3v
6-2v
70v no está conectado
8GROUND 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:

Los Chiches de La Commodore 

PAPERS

CD4028B TYPES datasheet (Rev. C) 

Transistor BC548B 

CODIGO

Todos los ejemplos de código de los videos los pueden encontrar en:

https://github.com/osolabstech/loschiches

Autor: OsoLabs

Empecé con la Commodore de chico, sigo con la Commodore de grande. Programo para 6502, Arduino, Raspberry y algunos algoritmos de Bioinfomática, algo en C++, algo en Python, algo en Assembler. Fanático de la electrónica home brew desde breadboard a diseñar PCBs propios. Armé la 20c y OsoLabs https://www.osolabs.tech Mi GitHub para quien quiera sumarse a los proyectos y chusmear código: https://github.com/carlinhocr/ Desde Argentina al Mundo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *