Lo schema della matrice:
L’ho riprodotto con KiCad utilizzando questo script python per generare la matrice, ma poi son dovuto andare a colpi di perl
1 per nascondere varie etichette e valori inutili.
A parte questo inutile dettaglio di elaborazione, si può vedere come tutte e 40 le “posizioni” della matrice siano occupate una volta che si aggiungono i tre tasti di controllo.
Le etichette sui fili (pd0, pd1, … e pc0, pc1, …) dovrebbero riferirsi alle porte D e C (rispettivamente) dell’ATmega 328P. Questo µC ha 23 programmable I/O lines.
La porta C
is a 7-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). […] As inputs, Port C pins that are externally pulled low will source current if the pull-up resistors are activated. […]
If the RSTDISBL fuse is programmed, PC6 is used as an input pin. If the RSTDISBL fuse is unprogrammed, PC6 is used as a reset input.
Mentre la porta D
is an 8-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). […] As inputs, port D pins that are externally pulled low will source current if the pull-up resistors are activated. […]
Queste citazioni vengono dal datasheet.2
Quindi la porta D è completamente usata per la lettura delle 8 righe, mentre della porta C sono usati “solo” 5 pin per la lettura delle colonne.
I pin delle due porte C e D possono avere anche delle funzioni alternative: vari Pin Change Interrupt, analog comparator, ADC input channel, …
A proposito di KiCad e di tool vari
Mio padre aveva KiCad installato3, insieme ad altri tool opensource, ma in realtà gli schemi più recenti sono tutti su un software proprietario (piratato4; ho visto il costo annuo della licenza, e chiaramente non è un investimento fattibile per progetti amatoriali).
Credo che ad averlo attirato verso quel software professionale fosse stata la possibilità di simulare il progetto in modo semplice e immediato, oltre che accurato. Non credo che esista un equivalente pratico nel mondo opensource: GPL EDA mostra delle possibilità ma, a parte gli eventuali limiti, ho visto che non sono molto pratici — o almeno bisogna lavorare di più per sistemare un opportuno workflow…
Post scriptum
Come detto altrove per ogni tasto ci sono due “sensori” (interruttori) per sentirne l’inizio e la fine della pressione, utili se si è interessati alla velocità. Mio padre alla fine non l’aveva presa in considerazione. Se l’avesse fatto, avremmo avuto in pratica una matrice 8×10 (con 37×2 posizioni occupate dai tasti delle note, e in teoria 6 posizioni usabili per altrettanti controlli).
Immagino che ci sarebbe stata una complicazione del circuito, oltre che del codice, per poterle gestire, in maniera simile a quello che era stato pensato per poter leggere tutti i potenziometri e anche accendere dei LED.
Di solito uso
perl -i.bk -pe ...
invece dised
. Prima di capire cosa sostituire con cosa, ho dovuto rendere non visibile un elemento in eeschema e poi farediff
per capire come cambiare la visibilità dell’elemento.↩︎Microchip ha acquistato l’Atmel.↩︎
Papà riusciva a mantenere vivo e funzionante un computer con Microsoft Windows XP. Detestava la Microsoft, e ancora di più i suoi sistemi “moderni”. Probabilmente Windows XP era l’ultimo Windows che riteneva un minimo decente, almeno in paragone a ciò che arrivò dopo!↩︎
Piratato ma doveva essere una versione funzionante su Windows XP…↩︎
Nessun commento:
Posta un commento
Commenta solo per dare un contributo utile, una critica costruttiva o fare un'osservazione acuta. Non commentare solo per dire che esisti anche tu o che ti piace o dispiace quello che hai letto e visto su questo blog.