Eccomi qua con un nuovo progetto, passata l'esperienza con Arduino di inizio anno (questa), mi volevo dedicare a qualcosa di più difficile e per questo più gratificante, ma soprattutto a costo zero! Mi sono messo a frugare nei cassetti dello scaffale dove tengo i vari componenti in cerca di inspirazione, ed ecco uscire fuori una ventina di display 7 segmenti, mi sono detto :"Ci devo fare qualcosa...mmh...pensa...pensa...IDEA!!!". Ecco venire fuori l'idea che oggi vi presento, un display formato da 8 display a 7 segmenti, comandati da un MAX7221 e gestiti da un PIC18f14k50.
Indice |
Il Progetto
Vediamo i due componenti chiave del display che voglio realizzare:
- MAX7221 (datasheet)
Questo integrato è un display driver della Maxim, pensato per pilotare 8 display a 7 segmenti a catodo comune, viene comandato tramite comunicazione SPI monodirezionale (è presente la sola linea dei dati in ingresso) con la quale si settano 16 registri interni da 16bit ciascuno.
Tali registri descrivono il comportamento del driver, i primi otto vanno a settare i dati da visualizzare sui display, i successivi: la luminosità, il numero di cifre effettivamente presenti, la modalità di test, la codifica dei dati, etc. (leggere il datasheet, molto coinciso e spiegato ottimamente). La gestione dei display avviene tramite 16 linee, 8 da collegare a tutti gli anodi degli 8 display, le altre otto a ogni singolo catodo comune dei display. In pratica internamente è presente un clock di 800hz, che aggiorna ogni display 100 volte al secondo, accendendone uno alla volta e settando i pin dei segmenti a seconda della cifra che verrà aggiornata in ogni momento. Per il fenomeno della persistenza dell'immagine sulla retina, vedremo tutte le cifre accese allo stesso tempo, anche se in effetti si accendono solamente una alla volta.
- PIC18F14K50 (datasheet)
La scelta del PIC è ricaduta su questo modello perchè presenta tutte le periferiche di cui ho bisogno (USB e SPI), ha una bassa dimensione (20pin) ed è abbastanza potente. Volendo utilizzare la comunicazione USB abbiamo dei vincoli nella scelta del clock. Non possiamo usare quello interno, troppo poco preciso, dobbiamo usare un quarzo esterno, di un valore tale che moltiplicato per uno dei possibili valori del PLL interno, si possa ottenere i 48Mhz necessari all'USB, per questo ho optato per un quarzo a 12Mhz, che quindi dovrà essere moltiplicato per 4 per ottenere il clock per l'USB.
Schema a Blocchi
Ulteriori Osservazioni
- Sempre per utilizzare l'USB è necessaria una tensione di 3,3V, questa può essere fornita esternamente, oppure abilitare il regolatore interno del PIC, ho optato per questa seconda soluzione, in questo caso sul pin VUSB, dobbiamo inserire un condensatore di capacità tra i 200nF e 470nF, non avendone in casa, ne ho usati 3 da 100nF messi in parallelo.
- Sulla board, oltre a ciò che ho illustrato fin'ora, inserirò due pulsanti, un per il Reset e uno per eventuali funzioni aggiuntive, collegato sul pin RB5 per via dei resistori di PullUp interni al PIC e quindi diminuisco i componenti necessari.
- Saranno presenti anche due led, uno verde per verificare la presenza dell'alimnetazione e uno rosso, collegato al pin RC3, che servirà per eventuali applicazioni future o per notificare visivamente lo stato della comunicazione USB.
- Al MAX7221, servono pochi componenti per funzionare, ha già un regolatore di corrente interno per gestire i display, quindi non sono necessarie resistenze in serie ai vari segmenti, serve solamente una resistenza collegata tra Vcc e il pin ISET, calcolata in modo che la corrente che ci scorre attraverso sia la stessa che vogliamo fornire ai vari segmenti dei display, moltiplicata per 100.
Lo schema elettrico
Per comodità ho diviso lo schema in due parti, una per illustrare il collegamento dei display a 7 segmenti e il MAX7221, un'altro per i collegamenti tra il MAX7221, il PIC e le varie porte.
Le piedinature
Primo Schema
Lo schema di collegamento tra il MAX7221 e i display è molto semplice e ben esplicato nel datasheet. In pratica si collegano in parallelo tutti gli anodi dei display e si collega ai pin chiamati DIGx i catodi comuni della corrispondente cifra. La resistenza da 9,53Kohm è quella consigliata dalla MAXIM, anche se il valore non è tra quelli commerciali. Io ho preferito ridurre i consumi e metterne una da 27Kohm.
Secondo Schema
Da notare che il connettore ICSP per la programmazione e l'USB condividono le linee dati, quindi è necessario tenere connesso uno alla volta l'USB o il programmatore.
Il prototipo
Adesso che c'è uno schema, posso passare alla realizzazione di un prototipo su millefori. Non sono il massimo in termini di ordine nei prototipi, ma ho comunque fatto lo sforzo di esserlo il più possibile. Ecco il risultato finale!
Corpo dell'articolo assente
Alcune Prove
Ecco i video di due prove, la prima è stata la prima prova di comunicazione tra PIC e display driver, la seconda è una prova di comunicazione USB, in pratica leggo il carattere che mi viene mandato dal terminare sul PC e visualizzo il corrispondente valore ASCII.
Le prossime puntate
Ho scritto una libreria per gestire il MAX7221 con MPLAB e C18, quindi una prossima puntata sarà dedicata a quella, un'altra la dedicherò alla parte di comunicazione USB tra PC e il progetto, come ultima puntata illustrerò il protocollo che ho creato per comunicare tra PC e il display e il programma per utilizzarlo. Nel mezzo ci sono le vacanze, quindi il tutto avrà una cadenza più lunga rispetto al primo progetto che ho pubblicato. Sperando che l'articolo vi sia piaciuto, non posso che dirvi arrivederci al prossimo passo del progetto!!!
Indice Puntate
Display 7 segmenti USB [1] - Progetto, Schema e Primo Prototipo