Commodore 64 user port, collegamenti, pinout, piedinatura, interfacce, cavo, connettore

Controllare la User Port del Commodore 64

Ho sempre trovato interessante considerare il computer non solo come un’entità indipendente, ma bensì in grado di controllare altre apparecchiature. E’ possibile controllare la User Port del Commodore 64 per questo scopo: cioè integrare il computer con l’ambiente circostante.

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Avevo già effettuato degli esperimenti per collegare il Commodore 64 all’impianto domotico di casa: in quell’esperimento, la User Port veniva infatti utilizzata per comunicare con un modem WiFi.

Nell’esperimento di questo articolo, invece, i pin PB0-PB7 della User Port del Commodore 64 vengono utilizzati direttamente per comandare due schede di interfaccia.

Commodore 64 user port, collegamenti, pinout, piedinatura, contatti, ingressi uscite PB0-PB7

Schede di interfaccia per la User Port del Commodore 64

Esistono diversi tipi di interfacce da collegare alla User Port del Commodore 64. In questo articolo descrivo quindi:

  • una scheda di uscita con 4 relay, optoisolata;
  • un’interfaccia di ingresso, con 4 optoisolatori.
Commodore 64 Vic-20 user port, interfaccia rele relay fotoaccoppiatori, ingressi optoisolati uscite

Le interfacce vengono utilizzate per comandare carichi e per acquisire degli stati. La scheda con 4 relay può essere utilizzata per comandare carichi ad alta e bassa tensione. Al contrario, la scheda di ingresso optoisolata, può essere utilizzata solo per misurare la presenza di tensione di rete. Esistono ovviamente versioni anche a bassa tensione.

Ingressi e Uscite della User Port

Per gli appassionati di teoria, ecco un po’ di schemi! Della User Port del Commodore 64, andremo ad utilizzare solo gli 8 pin della porta B: i pin PB0, PB1, PB2, PB3, PB4, PB5, PB6 e PB7. Per questo si abbreviano con PB0-PB7. La porta PB è collegata ai piedini C, D, E, F, H, J, K e L della User Port. C’è da prestare attenzione al fatto che sui connettori azzurri che si acquistano per interfacciarsi alla User Port (di tipo edge 3,96mm a 24 poli), le lettere non sono uguali a quelle della User Port. Pertanto i piedini vanno individuati manualmente.

Commodore 64 Vic-20 user port, schema, collegamenti, uscite PB0-PB7

I pin PB0-PB7 della User Port, come si vede dallo schema ricavato dal Commodore 64 Service Manual, sono direttamente collegati al chip CIA U2 del Commodore 64: il MOS 6526, il cui datasheet è allegato in fondo al presente articolo.

Commodore 64 user port, service manual, schema elettrico, CIA MOS 6526, pinout, piedinatura, ingressi uscite PB0-PB7

Il MOS 6526 è un chip in tecnologia NMOS, per cui riesce ad erogare una corrente soddisfacente solo sul livello logico 0. Detto in altre parole, è come se si comportasse come un piccolo interruttore verso massa. Sul livello logico 1 non è possibile prelevare una corrente soddisfacente, ma andrebbe notevolmente amplificata.

Commodore 64 user port, MOS 6526 datasheet, corrente uscita output current sinking open collector drain NMOS PB0-PB7

Per questo motivo, la scheda con 4 relay (optoisolata) attiva le uscite quando il corrispondente ingresso viene portato a massa, con una corrente di almeno 2 mA. Il Commodore riesce a fornire 3 mA, per cui la corrente è sufficiente.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Per scrupolo, i relay vengono alimentati da una fonte di alimentazione esterna a 5V, non caricando e non sporcando quindi l’alimentazione del Commodore 64. Dalla User Port, quindi, preleviamo solo i segnali e non l’alimentazione.

User Port del Commodore 64, POKE PEEK, ingresso uscita PB0-PB7 connettore cavo

Per quando riguarda la direzione opposta, cioè consentire al Commodore di leggere degli stati o la presenza di una tensione, anche qui è vantaggioso utilizzare delle schede optoisolate open collector. Se è presente tensione all’ingresso del fotoaccoppiatore, la uscita della scheda (e quindi il pin di ingresso della User Port del Commodore 64), va a massa. Se non è presente tensione all’ingresso del fotoaccoppiatore, l’uscita della scheda rimane libera e quindi il pin di ingresso della User Port è libero di andare a livello logico 1, per mezzo del resistore di pull-up (ed anche altri circuiti) già presenti all’interno del chip CIA (MOS 6526) del computer.

I pin PB0-PB7 possono essere configurati singolarmente come ingressi o come uscite. Per comodità, ho utilizzato i pin PB0-PB3 come uscite e PB4-PB7 come ingressi.

Commodore 64 Vic-20 user port, collegamenti, interfaccia rele relay fotoaccoppiatori, ingressi uscite, schema elettrico

Comandi in Basic per le uscite della User Port del Commodore 64

Per controllare gli ingressi e le uscite della User Port dal Commodore, è possibile utilizzare delle semplici istruzioni in Basic.

Relativamente alle uscite a relay, è possibile attivare un relay mediante il comando:

POKE 56579, numero

Il valore numero rappresenta, in sostanza, il pin (o i pin) di uscita da attivare, da calcolare con le potenze di 2: 2 ^ (numero_relay – 1).

Per attivare il relay 1, pin PB0, numero = 2 ^ (1 – 1) = 2 ^ 0 = 1:

POKE 56579, 1

Attivare il relay 2, pin PB1, numero = 2 ^ (2 – 1) = 2 ^ 1 = 2:

POKE 56579, 2

Per attivare il relay 3, pin PB2, numero = 2 ^ (3 – 1) = 2 ^ 2 = 4:

POKE 56579, 4

Infine, per attivare il relay 4, pin PB3, numero = 2 ^ (4 – 1) = 2 ^ 3 = 8:

POKE 56579, 8

Se si vogliono attivare più relay contemporaneamente, si devono sommare i valori precedentemente calcolati. Ad esempio, per attivare il relay 2 e il relay 4, il comando è:

POKE 56579, 10
Commodore 64 user port, POKE 56579, uscita interfaccia rele relay

La disattivazione del relay si ottiene semplicemente sottraendo il numero corrispondente. Al limite, per spegnere tutti i relay, si può digitare:

POKE 56579, 0

Attenzione! In realtà il comando POKE 56579, numero serve per impostare il piedino della porta PB come uscita! Appena impostato come uscita, il piedino corrispondente si porta subito a livello logico 0 (a massa), pertanto attiva il relay.

Inoltre, è possibile utilizzare tutti i 7 pin della porta PB come uscite. Per comodità, ho utilizzato solo i piedini PB0-PB3 come uscite.

Comandi in Basic per gli ingressi della User Port

Relativamente agli ingressi optoisolati, per leggere il valore corrispondente allo stato degli ingressi si utilizza il seguente comando:

PRINT PEEK(56577)

Il valore restituito varia da 0 a 255. Ogni ingresso, quando è presente tensione, si porta a massa, pertanto il bit corrispondente va a 0. Per verificare, quindi, se all’ingresso del fotoaccoppiatore è presente tensione, si può procedere in questo modo:

IF ( PEEK(56577) AND 2 ^ (numero_fotoaccoppiatore + 4 - 1) ) = 0 THEN ...

La somma numero_fotoaccoppiatore + 4 è perché, in questo esperimento, i fotoaccoppiatori 1, 2, 3 e 4 sono collegati su PB4, PB5, PB6 e PB7. Ricordo, anche, che i piedini della porta PB si portano a 1 logico in caso di assenza di tensione. Per verificare, quindi, l’assenza della tensione, è sufficiente togliere “= 0” dal comando.

Verificare presenza tensione ingresso fotoaccoppiatore 1, pin PB4:

IF ( PEEK(56577) AND 2 ^ 16 ) = 0 THEN …

Assenza tensione:

IF ( PEEK(56577) AND 2 ^ 16 ) THEN …

Per verificare presenza tensione ingresso fotoaccoppiatore 2, pin PB5:

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

IF ( PEEK(56577) AND 2 ^ 32 ) = 0 THEN …

Assenza tensione:

IF ( PEEK(56577) AND 2 ^ 32 ) THEN …

Verificare presenza tensione ingresso fotoaccoppiatore 3, pin PB6:

IF ( PEEK(56577) AND 2 ^ 64 ) = 0 THEN …

Assenza tensione:

IF ( PEEK(56577) AND 2 ^ 64 ) THEN …

Infine, per verificare presenza tensione ingresso fotoaccoppiatore 4, pin PB7:

IF ( PEEK(56577) AND 2 ^ 128 ) = 0 THEN …

Assenza tensione:

IF ( PEEK(56577) AND 2 ^ 128 ) THEN …

Utilizzando gli ingressi della scheda fotoaccoppiatori con tensioni alternate, la situazione si complica leggermente, in quanto il piedino PB corrispondente oscilla tra 1 e 0 con una determinata frequenza (ad esempio 50Hz se si collega l’ingresso alla tensione della rete elettrica).

In questo caso, è necessario effettuare più letture, prima di discriminare il valore di presenza o assenza tensione.

Commodore 64 user port, PEEK 56577, ingresso PB interfaccia fotoaccoppiatori

Come già detto, è possibile utilizzare tutta la porta PB come ingresso, ma, per comodità, ho utilizzato come entrate solo i piedini PB4-PB7.

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Documentazione

Per concludere, allego:

Commodore 64 user port, CIA MOS 6526, PCB, ingresso uscita PB0-PB7 connettore

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Ti piace questa pagina? Condividila:

Pubblicato in Retro Computer, Retro Tecnologia ed Elettronica Vintage, Tutti gli articoli.

5 Commenti

  1. Cosa possiamo ancora controllare tramite la user port del C64, oltre ai tuoi progetti fin qui realizzati?

  2. Beh, direi che il campo di applicazione è limitato solo dalla fantasia! Ho collegato la Fiat X1/9, l’albero di natale, la stufetta elettrica, la macchina del caffè… ci puoi fare di tutto!

  3. Molto interessante!
    Posso sapere le specifiche delle due schedine (relé e optoisolatori)?
    Se volessi fare una comunicazione parallela bidirezionale optoisolata con un altro dispositivo, dovrei limitarmi a 4 opto in ingresso e 4 in uscita o c’è un modo per sfruttare tutti gli 8 bit in I/O garantendo comunque l’isolamento?
    Grazie (sono un novellino)

  4. Grazie! La schedina con i relay si trova su Amazon tranquillamente, cercando “relay fotoaccoppiatore per Arduino”. Relativamente alla scheda ingressi, quella la produciamo in ditta, ma non è per uso hobbistico. Non so se ne esistano di già pronte. Al limite, potresti utilizzare una scheda relay collegata “al contrario”: le uscite del relay comandano gli ingressi del Commodore. Costruire una scheda 8 IN e 8 OUT (ma anche di più) è possibile, ma non è immediato come sfruttare direttamente i pin della User Port.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *