Los Chiches de la Commodore 64 – Episodio  2- Luces Auto fantástico con un UserPort Breakout Board

En esta ocasión vamos a prender varios leds imitando las luces de KIT el auto fantástico  usando el puerto de usuario de la Commodore 64 para esto vamos a utilizar como Chiche  un User Port Breakout Board.

Estudiaremos que es esta placa, como funciona, cómo conectar un led y escribir un programa en Basic para prenderlo y apagarlo y finalmente cómo conectar una barra de leds y ver las luces estilo auto fantástico.

Qué es un User Port Breakout Board

Es una placa PCB que conectada al Userport de la Commodore 64, nos permite tener un acceso cómodo y fácil a los 24 pines que salen desde este puerto. Este acceso vamos a utilizarlo para acceder a las funciones que nos da el Userport sin tener que lidiar con el mother de la Commodore directamente o con un enchufe al puerto.

Al tener 24 pines expuestos vamos a poder usarlo muy fácilmente junto con un breadboard para nuestro proyecto de encender un led. 

Su forma más típica es la de una placa con un conector para el puerto de usuario y un header de 2×12 pines

Este modelo incorpora un Reset, si quieren saber cómo funciona les recomiendo ver el Episodio 1 de los Chiches de la Commodore – el reset jabonera cuyos links podrán encontrar en las referencias del artículo. También tiene un led para mostrar si hay power conectado y una resistencia para que no se queme ese led.

Existen modelos que podemos pedir directamente desde PCBWay para más información miren en los links de referencia.

UserPort

El puerto de usuario posee el siguiente pinout en una Commodore 64 que podemos observar con el breakout board enchufado.

Para nuestro pequeño experimento comparemos el pin header del breakout board con el significado de cada uno de estos pines.

Estamos interesados en 9 pines específicos el pin 12 o N de ground o tierra nos va a dar valores LOW o cero y los pines del C al L que representan el Port B de la CIA 2 de nuestro Commodore 64. 

Conectando un Led

Vamos a comenzar con el experimento más básico que es prender y apagar un LED. Para conectar nuestro Led vamos a tener en cuenta que el puerto de usuario no puede entregar más de 100 mA de potencia con lo que vamos a usar un Led de 5 Volts y una resistencia de 1k ohms para asegurarnos que no vamos a estar pidiendo más que esa potencia o podríamos quemar la CIA de la Commodore.

El LED tiene dos conectores o patitas normalmente uno es largo y el otro corto, el Largo debe estar conectada a la parte más positiva del circuito que forma parte, en nuestro caso ese va a ser el pin C y la pata corta a la más negativa, en nuestro caso el pin 12 o ground, también podríamos haber usado el pin N.

Conectaremos un cable desde el pin 12 del header de nuestro userport breakout board hasta la línea negativa de nuestro breadboard, donde conectaremos una resistencia de 1k ohms y luego la pata corta del led.  La pata larga la conectaremos al pin C del header.

Programando el UserPort

Los pines de la CIA están configurados como input por default pero para nuestro proyecto vamos a configurarlos como output. La configuración de la CIA vamos a poder realizar en las siguientes posiciones de memoria de la Commodore 64. 

Para elegir si los bits son Input o Output tenemos el registro Data Direction Register B ubicado en $DD03 equivalente al número decimal 56579. Este es un registro de 8 bits correspondiendo cada bit a un pin del Port B de la CIA. Vamos a definir el pin PB0 de la CIA correspondiente al pin C de nuestro breakout board como output, para esto vamos a configurarlo con el valor 1 y dejar los demás valores de los puertos en cero utilizando el comando Poke:

POKE 56579,1

Esto graba el valor binario 1 en el DDRB y permite que el puerto PB0, pin C sea output

PB7PB6PB5PB4PB3PB2PB1PB0
00000001

Ahora que el pin está como output o salida podemos prenderlo usando el registro de Peripheral Data Register B ubicado en las posición $DD01 o 56577 en decimal. Vamos a prender el PB0 correspondiente al pin C para esto vamos a configurarlo con el valor 1 y dejar los demás valores de los puertos en cero a través del comando Poke:

POKE 56577,1

Esto graba el valor binario 1 en el PDRB y permite que el puerto PB0, pin C entregue 5 volts

PB7PB6PB5PB4PB3PB2PB1PB0
00000001

Y con esto podemos ver como está nuestros led prendido!, para apagarlo:

POKE 56577,0

Podemos hacer un mejor programa que prenda y apague el led:.

10 poke 56579,1

20 for i = 1 to 100 : next

30 poke 56577,1

40 for j = 1 to 100 : next

50 poke 56577,0

60 goto 20

El loop hecho con el FOR regula el tiempo de que el led está prendido y apagado.

Tira de Led del Auto Fantástico

Podemos programar también una tira de LED y hacer que esta muestre cómo se desplaza un led hacia la derecha y hacia la izquierda.

Primero vamos a conectar los puertos C hasta el N como conectamos el primer LED, en este caso y al usar una barra de leds la parte positiva la conectaremos a los pines C a M y la parte negativa de cada segmento a una resistencia de 1k ohms y luego a la parte negativa del breadboard que va conectado al pin 12 o al N de nuestro header que también funciona como Ground o Tierra.

Ahora vamos a definir todos los puertos como output:

POKE 56579,255

Esto graba el valor binario 11111111 en el DDRB y permite que todos sean output:

PB7PB6PB5PB4PB3PB2PB1PB0
11111111

Ahora vamos a escribir un programa que maneje la tira sabiendo que a cada pin o bit le corresponde un número en decimal para prenderlo y que sea el equivalente al binario 1 en ese puerto:

PB7PB6PB5PB4PB3PB2PB1PB0
1286432168421

Así que para prender sólo el puerto PB5 correspondiente a la letra J:

POKE 56577,32

Aquí el programa, el mismo va pasando los valores de PB desde 1 a 128 prendiendo y apagando cada puerto, luego va desde 128 a 1 también prendiendo y apagando cada puerto como las luces de KIT. Está escrito en minúsculas por si quieren pegarlo a un emulador de Commodore y grabarlo y llevar el .bas a una commodore real!.

10 poke 56579,255

20 for i = 0 to 7 

30 pb = 2 ^ i :rem use shift 6 for power

40 poke 56577,pb :rem turn on pb

50 for j = 1 to 100 :next j

60 poke 56577,pb : rem turn off pb

70 next i

80 for v = 7 to 0 step -1

90 pb = 2 ^ v :rem use shift 6 for power

100 poke 56577,pb :rem turn on pb

110 for j = 1 to 100 : next j :rem wait

120 poke 56577,pb :rem turn off pb

130 next v

140 goto 20

Un detalle si lo tipean en un emulador el signo de power o elevar a potencia es shift 6 si lo hacen directamente en una commodore 64 tiene la tecla power con forma de flecha hacia arriba al lado de la tecla restore.

Y así veremos nuestra tira con un LED andando de derecha a izquierda y de izquierda a derecha, puede cambiar el loop o agregar más loops para hacerlo más rápido o más lento en su desplazamiento.

Conclusión

Y de esta forma funciona nuestro user port breakout, es una forma muy fácil de usar nuestra Commodore 64 para interactuar con el mundo exterior.

Estudio visual

Para poder estudiar visualmente cómo funciona el Reset Jabonera, les dejo este video que complementa al artículo.

User Port Breakout Board – Los Chiches De la Commodore – Episodio 2 

Referencias

A continuación les dejo algunos links donde profundizar el tema:

VIDEOS

Video para aprender sobre el User Port BreakOut Board..

Los Chiches De la Commodore – Episodio 2   UserPort Breakout Board 

Video para profundizar el saber sobre la CIA.

6526 CIA Complex Interface Adapter Programado – 6502 vs 6510 parte 8 

Aquí tiene acceso a toda la serie de videos:

Los Chiches de La Commodore 

PAPERS

Commodore 64 User Port Project Development PCB – Share Project – PCBWay 

ROM de Commodore 64 comentada 

Mapping the Commodore 64 

6510 MICROPROCESSOR WITH I/O 

Esquema del Mother parte Izquierda Commodore 64

Esquema del Mother parte Derecha Commodore 64 

Reset switch 

Wonder Boy Cheats, Codes, and Secrets for Commodore 64 – GameFAQs 

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 *