Sommario:

Matrice display LED 5x4 utilizzando un timbro di base 2 (bs2) e Charlieplexing: 7 passaggi
Matrice display LED 5x4 utilizzando un timbro di base 2 (bs2) e Charlieplexing: 7 passaggi

Video: Matrice display LED 5x4 utilizzando un timbro di base 2 (bs2) e Charlieplexing: 7 passaggi

Video: Matrice display LED 5x4 utilizzando un timbro di base 2 (bs2) e Charlieplexing: 7 passaggi
Video: How to make a LED digital counter using 7- Segment Display 2024, Novembre
Anonim
Matrice display LED 5x4 che utilizza un timbro base 2 (bs2) e Charlieplexing
Matrice display LED 5x4 che utilizza un timbro base 2 (bs2) e Charlieplexing

Hai un Basic Stamp 2 e alcuni LED extra in giro? Perché non giocare con il concetto di charlieplexing e creare un output utilizzando solo 5 pin.

Per questo istruibile userò il BS2e ma qualsiasi membro della famiglia BS2 dovrebbe funzionare.

Passaggio 1: Charlieplexing: cosa, perché e come

Per prima cosa chiariamo il motivo. Perché usare charlieplexing con un Basic Stamp 2? ---Prova del concetto: scopri come funziona charlieplexing e impara qualcosa sul BS2. Questo potrebbe essermi utile in seguito utilizzando chip a 8 pin più veloci (solo 5 di essi saranno i/o).---Utile motivo: Fondamentalmente non ce n'è nessuno. Il BS2 è troppo lento per essere visualizzato senza uno sfarfallio evidente. Che cos'è il charlieplexing? --- Il Charlieplexing è un metodo per pilotare un gran numero di LED con un numero ridotto di pin i/o del microprocessore. Ho imparato a conoscere charlieplexing da www.instructables.com e puoi farlo anche tu:Charlieplexing LEDs- La teoriaCome pilotare molti LED da alcuni pin del microcontrollore. Anche su wikipedia: CharlieplexingCome posso pilotare 20 led con 5 pin i/o?---Si prega di leggere i tre collegamenti sotto "Cos'è charlieplexing?". Questo lo spiega meglio di quanto io abbia mai potuto. Charlieplexing è diverso dal multiplexing tradizionale che richiede un pin i/o per ogni riga e ogni colonna (che sarebbe un totale di 9 pin i/o per un display 5/4).

Passaggio 2: hardware e schema

Hardware e schemi
Hardware e schemi

Elenco dei materiali: 1x - Basic Stamp 220x - diodi emettitori di luce (LED) dello stesso tipo (colore e caduta di tensione) 5x - resistori (vedi sotto per quanto riguarda il valore del resistore) Ausiliario/Opzionale: Metodo di programmazione del tuo BS2 Pulsante momentaneo come interruttore di ripristino6v -9vAlimentazione a seconda della versione del BS2 (leggere il manuale) Lo schema: questo schema è stato realizzato tenendo presente il layout meccanico. Vedrai la griglia di LED impostata sulla sinistra, questo è l'orientamento per il quale è stato scritto il codice BS2. Notare che ogni coppia di LED ha l'anodo collegato al catodo dell'altro. Vengono quindi collegati a uno dei cinque pin i/o. Valori dei resistori: è necessario calcolare i propri valori dei resistori. Controlla la scheda tecnica per i tuoi LED o usa l'impostazione LED sul tuo multimetro digitale per trovare la caduta di tensione dei tuoi LED. Facciamo alcuni calcoli: Tensione di alimentazione - Caduta di tensione / Corrente desiderata = Valore resistore Il BS2 fornisce una potenza regolata di 5 V e può fornire 20 mA di corrente. I miei LED hanno una caduta di 1.6v e funzionano a 20ma.5v - 1.6v /.02amps = 155ohms Per proteggere il tuo BS2 dovresti usare il valore del resistore immediatamente superiore a quello che ottieni con il calcolo, in questo caso credo che sarebbe 180 ohm. Ho usato 220 ohm perché la mia scheda di sviluppo ha quel valore di resistore integrato per ogni pin i/o. NOTA: credo che poiché c'è un resistore su ciascun pin, questo raddoppi effettivamente la resistenza su ciascun led poiché un pin è V + e l'altro è Gnd. In tal caso, ridurre della metà i valori dei resistori. L'effetto negativo di un valore di resistenza troppo alto è un LED dimmer. Qualcuno può verificarlo e lasciarmi un PM o un commento in modo da poter aggiornare queste informazioni? Programmazione: ho utilizzato una scheda di sviluppo con un connettore DB9 per programmare il chip direttamente sulla scheda. Uso anche questo chip sulla mia breadboard senza saldatura e ho incluso un'intestazione In Circuit Serial Programming (ICSP). L'intestazione è a 5 pin, i pin da 2 a 5 si collegano ai pin 2-5 su un cavo seriale DB9 (il pin 1 non è utilizzato). Si noti che per utilizzare questa intestazione ICSP i pin 6 e 7 sul cavo DB9 devono essere collegati tra loro. Ripristino: un pulsante di ripristino momentaneo è opzionale. Questo tira semplicemente il pin 22 a terra quando viene premuto.

Passaggio 3: breadboard

breadboard
breadboard
breadboard
breadboard

Ora è il momento di costruire la matrice su una breadboard. Ho usato una morsettiera per collegare insieme una gamba di ciascuna coppia di led e un piccolo ponticello per collegare le altre gambe. Questo è dettagliato nella foto in primo piano ed è spiegato in modo approfondito qui:1. Orienta la breadboard in modo che corrisponda all'immagine più grande2. Posiziona il LED 1 con l'Anodo (+) verso di te e il Catodo (-) lontano da te.3. Posizionare il LED 2 con lo stesso orientamento dell'Anodo (+) nella morsettiera di collegamento del catodo del LED 1.4. Utilizzare un piccolo ponticello per collegare l'Anodo del LED 1 con il Catodo del LED 2.5. Ripeti fino a quando ogni coppia di LED è stata aggiunta alla scheda. Uso quelle che normalmente sarebbero le strisce del bus di alimentazione della breadboard come strisce del bus per i pin I/O BS2. Poiché ci sono solo 4 strisce bus, uso una morsettiera per P4 (la quinta connessione I/O). Questo può essere visto nell'immagine più grande qui sotto.6. Collegare la morsettiera per il catodo del LED 1 alla striscia bus P0. Ripetere per ogni LED dispari sostituendo la corretta P* per ogni coppia (vedi schema).7. Collegare la morsettiera per il catodo del LED 2 alla striscia bus P1. Ripetere per ogni LED dispari sostituendo la corretta P* per ogni coppia (vedi schema).8. Collegare ciascuna striscia bus al pin I/O appropriato su BS2 (P0-P4).9. Controllare tutte le connessioni per assicurarsi che corrispondano allo schema.10. Celebrate. NOTA: Nel primo piano vedrete che non sembra che io abbia seguito il passaggio 7 in quanto la connessione al secondo pin I/O è sull'anodo dei LED dispari. Ricordare che il Catodo dei LED pari è collegato all'Anodo dei LED dispari quindi il collegamento è lo stesso in entrambi i casi. Se questa nota ti confonde, ignorala.

Fase 4: Nozioni di base sulla programmazione

Affinché charlieplexing funzioni, accendi un solo led alla volta. Perché questo funzioni con la nostra BS2 abbiamo bisogno di due passaggi fondamentali: 1. Impostare le modalità di uscita per i pin utilizzando il comando OUTS.2. Dite alla BS2 quali pin usare come uscite usando il comando DIRS Questo funziona perché alla BS2 può essere detto quali pin guidare in alto e in basso e aspetterà di farlo finché non specifichi quali pin sono le uscite. Vediamo se le cose sono collegate correttamente da provando solo a far lampeggiare il LED 1. Se guardi lo schema puoi vedere che P0 è collegato al Catodo (-) del LED 1 e P1 è collegato all'Anodo dello stesso LED. Ciò significa che vogliamo guidare P0 basso e P1 alto. Questo può essere fatto in questo modo: "OUTS = %11110" che guida P4-P1 alto e P0 basso. (% indica che un numero binario deve seguire. La cifra binaria più bassa è sempre a destra. 0 = BASSO, 1 = ALTO) Il BS2 memorizza tali informazioni ma non agirà su di esse fino a quando non dichiareremo quali pin sono output. Questo passaggio è fondamentale poiché devono essere emessi solo due pin contemporaneamente. Il resto dovrebbe essere ingressi, che imposta quei pin in modalità ad alta impedenza in modo che non assorbiranno alcuna corrente. Dobbiamo pilotare P0 e P1, quindi imposteremo quelli sulle uscite e il resto sugli ingressi in questo modo: "DIRS = %00011". (% indica che deve seguire un numero binario. La cifra binaria più bassa è sempre a destra. 0 =INPUT, 1=OUTPUT) Mettiamolo insieme in un codice utile:' {$STAMP BS2e}' {$PBASIC 2.5}DO OUTS = %11110 'Drive P0 basso e P1-P4 alto DIRS = %00011 'Imposta P0- P1 come Uscite e P2-P4 come Ingressi PAUSE 250 'Pausa affinché il LED rimanga acceso DIRS = 0 'Imposta tutti i pin su Input. Questo spegnerà il LED PAUSE 250 'Pausa per LED spentoLOOP

Passaggio 5: il ciclo di sviluppo

Ora che abbiamo visto un pin lavorare per assicurarci che funzionino tutti.20led_Zig-Zag.bseQuesto codice allegato dovrebbe illuminare ciascuno dei 20 LED in uno schema a zig-zag. Noterai che dopo che ogni pin è stato acceso, uso "DIRS = 0" per trasformare tutti i pin in input. Se si modificano gli OUTS senza disattivare i pin di uscita, è possibile che si verifichi un "ghosting" in cui un led che non dovrebbe essere acceso potrebbe lampeggiare tra i cicli. Se si modifica la variabile W1 all'inizio di questo codice in "W1 = 1" lì sarà solo una pausa di 1 millisecondo tra ogni lampeggio del LED. Ciò causerà un effetto di persistenza della visione (POV) che fa sembrare che tutti i LED siano accesi. Questo ha l'effetto di attenuare i LED, ma è l'essenza di come visualizzeremo i caratteri su questa matrice. LED in un modello utilizzabile. Questo file è il mio primo tentativo. Vedrai che in fondo al file i caratteri sono memorizzati in quattro righe di binario a 5 cifre. Ogni riga viene letta, analizzata e viene chiamata una subroutine ogni volta che un led deve essere acceso. Questo codice funziona, scorrendo i numeri 1-0. Se provi a eseguirlo, nota che è afflitto da una frequenza di aggiornamento molto lenta che fa lampeggiare i caratteri quasi troppo lentamente per essere riconosciuti. Questo codice è dannoso per molte ragioni. Innanzitutto, cinque cifre binarie occupano tanto spazio nella EEPROM quanto 8 cifre binarie poiché tutte le informazioni sono memorizzate in gruppi di quattro bit. In secondo luogo, il SELECT CASE utilizzato per decidere quale pin deve essere acceso richiede 20 casi. La BS2 è limitata a 16 casi per operazione SELECT. Ciò significa che ho dovuto aggirare questa limitazione con un'istruzione IF-THEN-ELSE. Deve esserci un modo migliore. Dopo alcune ore di grattacapi l'ho scoperto.

Passaggio 6: un interprete migliore

Ogni riga della nostra matrice è composta da 4 LED, ognuno può essere acceso o spento. La BS2 memorizza le informazioni nella sua EEPROM in gruppi di quattro bit. Questa correlazione dovrebbe renderci le cose molto più facili. Oltre a questo fatto, quattro bit corrispondono ai numeri decimali 0-15 per un totale di 16 possibilità. Questo rende o SELECT CASE molto più semplice. Ecco il numero 7 memorizzato nella EEPROM:'7 %1111, %1001, %0010, %0100, %0100, ogni riga ha un equivalente decimale a 0-15 quindi leggiamo un fila dalla memoria e invialo direttamente alla funzione SELECT CASE. Ciò significa che la matrice binaria leggibile dall'uomo utilizzata per creare ciascun carattere (1=led acceso, 0=led spento) è la chiave per l'interprete. Per utilizzare lo stesso SELECT CASE per ciascuna delle 5 righe ho usato un altro caso di selezione per impostare DIRS e OUTS come variabili. Per prima cosa ho letto in ciascuna delle cinque righe del carattere le variabili ROW1-ROW5. Il programma principale chiama quindi la subroutine per visualizzare il carattere. Questa subroutine prende la prima riga e assegna le quattro possibili combinazioni OUTS alla variabile outp1-outp4 e le due possibili combinazioni DIRS a direc1 & direc2. I LED lampeggiano, il contatore di righe viene incrementato e lo stesso processo viene eseguito per ciascuna delle altre quattro righe. Questo è molto più veloce del primo programma interprete. Detto questo, c'è ancora uno sfarfallio evidente. Dai un'occhiata al video, la fotocamera fa sembrare lo sfarfallio molto peggio ma rende l'idea. Portare questo concetto su un chip molto più veloce, come un picMicro o un chip AVR, consentirebbe la visualizzazione di questi caratteri senza uno sfarfallio evidente.

Passaggio 7: dove andare da qui?

Non ho un mulino a controllo numerico o forniture di incisione per realizzare circuiti stampati, quindi non collegherò questo progetto. Se hai un mulino e sei interessato a collaborare per andare avanti da qui, mandami un messaggio. Sarei felice di pagare i materiali e la spedizione ancora più felice di mostrare qualcosa di un prodotto finito per questo progetto.

Altre possibilità: 1. Porta questo su un altro chip. Questo design a matrice può essere utilizzato con qualsiasi chip che disponga di 5 pin i/o disponibili con capacità tri-state (pin che possono essere alti, bassi o di ingresso (alta impedenza)). 2. Usando un chip più veloce (magari AVR o picMicro) puoi aumentare la scala. Con un chip a 20 pin puoi usare 14 pin per charlieplex un display 8x22 e utilizzare i pin rimanenti per ricevere comandi seriali da un computer o da un altro controller. Usa altri tre chip da 20 pin e puoi avere un display a scorrimento di 8x88 per un totale di 11 caratteri contemporaneamente (a seconda della larghezza di ciascun carattere ovviamente). Buona fortuna buon divertimento!

Consigliato: