Da quando Alex80 ha un’uscita video VGA, i primi test naturali sono stati dei giochi: un semplice clone di breakout, con l’idea di arrivare presto anche a qualcosa che ricordi Pong. Funzionano gia con due pulsanti, ma chi ha presente il Pong originale sa che il controller vero non e un pulsante: e una manopola, il cosiddetto paddle, che permette un movimento continuo invece che a scatti.
Realizzare un paddle significa pero affrontare un problema diverso da quello dei pulsanti: bisogna trasformare la posizione di un potenziometro, cioe una tensione analogica, in un valore digitale che Alex80 possa leggere e usare per posizionare la racchetta sullo schermo. In questo episodio vediamo come si arriva a questo risultato con un convertitore analogico-digitale d’epoca ma ancora reperibile, un piccolo generatore di clock, e la solita dose di imprevisti da risolvere in corsa.
Perché serve un convertitore analogico-digitale
Un potenziometro da 10 kOhm alimentato tra massa e VCC restituisce, ruotando la manopola, una tensione compresa tra 0 V e la tensione di alimentazione. Per usarla come coordinata su schermo, questa tensione va campionata e quantizzata, cioe convertita in un numero binario a intervalli regolari: lo stesso principio gia accennato in un video precedente del canale sul campionamento, e che tornera in modo piu approfondito nel corso di elettronica digitale.
Per questo compito e stato scelto un ADC0808, un convertitore analogico-digitale storico, ancora reperibile (in questo caso ordinato su AliExpress) e affidabile. E un chip pensato per scenari piu complessi di quanto serva qui: ha otto ingressi analogici selezionabili tramite tre linee di indirizzo, pensate per scandire in sequenza piu canali con un solo convertitore. Per il paddle serve un solo canale, quindi le linee di indirizzo sono cablate fisse e un solo ingresso viene collegato al potenziometro.
La conversione avviene a 8 bit: una risoluzione che oggi si considera bassa, ma piu che sufficiente per posizionare un oggetto su uno schermo a bassa risoluzione come quello di Alex80. L’ADC0808 potrebbe anche essere pilotato direttamente dal microprocessore, mettendolo sul bus e gestendo via software l’avvio e la fine di ogni conversione, ma per questo primo prototipo si e scelta una soluzione piu semplice: il segnale di start e collegato direttamente al segnale di fine conversione, in modo che il chip converta in continuo senza bisogno di essere pilotato.
Il clock generato con un TLC555
La tecnica di conversione usata dall’ADC0808 e ad approssimazioni successive (SAR): un registro interno approssima la tensione di ingresso in otto iterazioni, e per farlo ha bisogno di un proprio segnale di clock, indipendente da quello del processore. Il datasheet indica un intervallo tra 10 kHz e 1 MHz, con un valore tipico consigliato attorno ai 640 kHz, mentre gli schemi applicativi di riferimento (compreso quello con collegamento diretto al bus di un microprocessore) usano tipicamente 500 kHz.
Non essendo un requisito di precisione elevata, si sarebbe potuto usare un quarzo, ma la scelta e ricaduta su un TLC555, la versione CMOS del classico timer 555: consuma meno e puo lavorare a frequenze piu alte. Con due resistenze da 470 ohm e un condensatore da 2,2 nF, la rete RC restituisce una frequenza di circa 500 kHz, in linea con i valori usati negli schemi di riferimento del datasheet.
Dal PCB alla saldatura
Il circuito e stato disegnato su Easy e la scheda realizzata nello stesso giro di ordini gia usato per il PCB della VGA e per altri moduli in arrivo sul canale. Il layout lascia un foro centrale pensato per alloggiare il potenziometro incastrato, in modo che resti ben fissato. Un piccolo errore nel posizionamento dei fori di montaggio ha reso necessario piegare leggermente uno dei terminali per farlo combaciare: un dettaglio da correggere nella prossima revisione, insieme allo spostamento della piazzola piu a sinistra.
Il montaggio segue l’ordine consueto: prima le due resistenze da 470 ohm, poi gli zoccoli per i due integrati (ADC0808 e TLC555), entrambi orientati seguendo la tacca di riferimento sul pin 1. Seguono i condensatori: due da 100 nF (104) per il disaccoppiamento, e quello da 2,2 nF dedicato alla rete RC del TLC555. Il potenziometro viene centrato nel foro e i suoi terminali piegati per restare in posizione.
Per il collegamento verso Alex80 si e scelto di non montare un pin header diretto sulla scheda, come si fa di solito per i moduli di ingresso/uscita pensati per il sistema: un paddle deve poter stare in mano, non incollato alla scheda madre. Si e quindi optato per un cavetto volante, saldato direttamente sui pad, che termina in un pin header separato da inserire sulle porte di ingresso di Alex80. I fili sono dieci: otto per il dato digitale (D0-D7), piu alimentazione e massa, con l’ultimo contrassegnato da un termorestringente nero per individuare rapidamente il lato della massa durante l’inserimento. Per comodita di saldatura, il connettore e stato temporaneamente montato su una breadboard, cosi da restare fermo durante il lavoro.
Il progetto fa parte della stessa serie di moduli pensati per Alex80 e in vendita sullo shop di Alexa Academy, ma resta utilizzabile anche come scheda a se stante. Per il collaudo e stato affiancato a un altro modulo della stessa serie, un visualizzatore esadecimale a 8 bit, utile per leggere direttamente il valore restituito dalla conversione mentre si ruota la manopola.
Il collaudo (e un imprevisto nel datasheet)
Prima di dare tensione, i controlli di rito: continuita delle piste di alimentazione, assenza di cortocircuiti tra VCC e massa, verifica della resistenza variabile del potenziometro sul piedino corretto. Poi l’inserimento dei due integrati negli zoccoli, sempre con attenzione alla tacca di riferimento, e il collegamento alla breadboard alimentata a 5 V insieme al display esadecimale.
All’accensione il display si illumina, ma ruotando il potenziometro il valore non cambia. Il problema nasce da un’interpretazione del datasheet che, alla prova dei fatti, si rivela invertita: nello schema le linee di indirizzo del canale sono state messe tutte a zero pensando di selezionare cosi l’ingresso 0, ma nella realta con le linee tutte a zero il chip seleziona l’ingresso 7 (e viceversa, con le linee tutte a VCC, viene selezionato il canale 0). La soluzione rapida, in attesa di correggere lo schema nella prossima revisione del PCB, e collegare insieme gli ingressi 0 e 7: essendo entrambi ingressi, non c’e problema a portarli allo stesso potenziale.
Con questa modifica il display torna a rispondere alla rotazione della manopola, ma emerge un secondo dettaglio: il verso e invertito rispetto a quanto ci si aspetterebbe, con la manopola tutta a sinistra che restituisce il valore massimo (FF) invece del minimo. Non e un problema bloccante, perche si puo compensare via software, e verra comunque corretto nella prossima versione della scheda, quando verranno sistemati insieme il collegamento dei canali e l’orientamento del potenziometro.
Cosa aspettarsi
L’obiettivo di questo episodio era verificare che la conversione funzionasse e restituisse un valore digitale coerente con la posizione della manopola, ed e stato raggiunto, sia pure con una correzione via cablaggio rispetto al progetto originale. Il paddle non e ancora stato collegato ad Alex80: il prossimo passo naturale e usarlo per controllare la racchetta del breakout gia realizzato sul canale, mentre una nuova revisione del PCB sistemera sia l’allineamento dei fori sia l’inversione dei canali dell’ADC0808.
Per vedere lo schema completo su EasyEDA, il montaggio passo passo e il debug in diretta del problema di cablaggio, il video di questa settimana e disponibile sul canale.
