Sommario:

Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento: 5 passaggi
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento: 5 passaggi

Video: Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento: 5 passaggi

Video: Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento: 5 passaggi
Video: Matrice di led con Arduino e la funzione map 2024, Novembre
Anonim
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento
Utilizzo di un LED a matrice di punti con un Arduino e un registro a scorrimento

Il LED a matrice di punti Siemens DLO7135 è un fantastico pezzo di optoelettronica. È classificato come display intelligente a matrice di punti 5x7 (r) con memoria/decodificatore/driver. Insieme a quella memoria, ha un display ASCII da 96 caratteri con caratteri maiuscoli e minuscoli, un generatore di caratteri e un multiplexer integrati, quattro livelli di intensità della luce e funziona tutto a 5V., e a $ 16 al pop, dovrebbe sicuramente. Mentre trascorrevo mezza giornata nel mio negozio di elettronica locale preferito, ho trovato un cestino pieno di questi per $ 1,50 al pezzo. Ho lasciato il negozio con diversi. Questa istruzione ti mostrerà come collegarti a questi LED a matrice di punti e visualizzare i caratteri utilizzando un Arduino basato su AVR. Se hai letto una delle mie guide precedenti, potresti avere l'idea che sono spesso a favore della soluzione più parsimoniosa, e non ti sbaglieresti, anche se di tanto in tanto non raggiungo l'obiettivo. Pertanto, farò anche un altro passo in questa istruzione e ti mostrerò come ridurre il numero di porte I/O necessarie per pilotare questi grandi LED a matrice di punti.

Passaggio 1: prendi la merce…

Prendi la merce…
Prendi la merce…

Per questo breve progetto, avrai bisogno di:

  • un microcontrollore basato su AVR come un Arduino o qualcosa di simile. Queste istruzioni potrebbero probabilmente essere adattate al tuo MCU preferito.
  • un LED a matrice di punti DLO7135 o altro della stessa famiglia
  • un registro a scorrimento a 8 bit come 74LS164, 74C299 o 74HC594
  • una breadboard
  • filo di collegamento, tronchesi, ecc.

Non è necessario un saldatore, anche se ne uso uno in seguito; puoi cavartela senza.

Passaggio 2: collegarsi direttamente al display a LED

Connetti direttamente al display a LED
Connetti direttamente al display a LED
Collegati direttamente al display a LED
Collegati direttamente al display a LED
Collegati direttamente al display a LED
Collegati direttamente al display a LED

Disponi il tuo piccolo elenco di parti e prendi il LED. Posizionalo sulla breadboard un po 'centrato, a cavallo della scanalatura della linea mediana. La prima parte del collegamento avviene tutta sul lato sinistro del LED. Il pin n. 1 si trova in alto a sinistra come indicato dal triangolo/freccia. Ho messo le funzioni dei pin su un'immagine come riferimento mentre leggi o colleghi il tuo LED.

Il lato sinistro

Positivo e Negativo Partendo in alto a sinistra, collegare Vcc a 5V. Forse è una buona idea non alimentare la tua scheda fino a quando non avrai completato l'intero lato sinistro; il LED può essere luminoso se stai cercando di vedere piccoli fori per infilare i fili. Collega il GND in basso a sinistra a terra. Lamp Test, Chip Enable e Write Il 2° e il 3° dall'alto a sinistra sono Lamp Test e Chip Enable. Queste sono entrambe logiche negative, il che significa che sono abilitate quando si trovano su uno 0 logico anziché su 1. La mia immagine qui sotto dovrebbe avere delle barre sopra di esse, ma non l'ho annotato per nessuna di esse. Il pin LT quando abilitato illumina ogni punto nella matrice di punti a 1/7 di luminosità. È più un test dei pixel, ma la cosa interessante del pin LT è che non sovrascrive alcun carattere presente in memoria, quindi se ne hai diversi messi insieme (hanno una distanza di visualizzazione di 20 piedi), stroboscopico LT può farlo sembrare un cursore. Per assicurarti che sia disabilitato, collegalo a 5V. Anche i pin CE e WR sono a logica negativa e devono essere abilitati per poter scrivere su questo dispositivo intelligente. Potresti microgestire questi pin con porte I/O di riserva sul tuo microcontrollore, ma qui non ci preoccuperemo. Basta collegarli a terra per mantenerli abilitati. Livelli di luminosità Ci sono quattro livelli di luminosità programmabili sulla famiglia di LED DLO:

  • Vuoto
  • 1/7 Luminosità
  • 1/2 luminosità
  • Luminosità completa

BL1 HIGH e BL0 LOW sono 1/2 luminosità. Entrambi HIGH è la massima luminosità. Impostalo come preferisci. Di nuovo, se hai porte I/O libere ed è abbastanza importante per te, questo può anche essere controllato dal tuo Arduino. Questo avvolge il lato sinistro. Se accendi la tua scheda dovresti vedere il LED accendersi. Se sei curioso, gioca con i controlli della luminosità e il test della lampada per familiarizzare con esso.

Il lato corretto

Il lato destro è costituito interamente da porte dati. L'angolo in basso a destra, pin 8 o D0 per la precisione, rappresenta il bit meno significativo nel carattere a 7 bit. Il pin 14 o D6 in alto a destra rappresenta il bit più significativo. Ciò ti consente di sapere in quale ordine mescolare i bit durante la scrittura sul LED. Quando hai collegato le porte di input dei dati, trova sette porte I/O digitali vuote sul tuo Arduino o AVR e collegale. Probabilmente vorrai ricordare quale porta di uscita dati sul tuo AVR va a quale porta di ingresso dati sul LED. Ora sei pronto per inserire alcuni dati su quel LED intelligente. Stai già tremando di eccitazione? So di esserlo…

Passaggio 3: specificare un carattere da visualizzare

Specificare un carattere da visualizzare
Specificare un carattere da visualizzare

Il set di caratteri che viene utilizzato su questo LED CMOS è il tuo ASCII run-of-the-mill che inizia a 0x20 (decimale 32; uno spazio) e termina a 0x7F (decimale 127; un'eliminazione, sebbene rappresentato sul LED come grafico del cursore). Quindi, avere il display a LED un carattere non comporta altro che spingere un 1 o 0 logico sui pin di uscita dei dati, di solito seguito da un impulso WR, ma lo sto rinunciando per questo esercizio. Quindi, hai scritto o ricordati quali pin vanno a quali porte, giusto? Ho scelto PD[2..7] e PB0 (pin digitali da 2 a 8 in linguaggio Arduino). Normalmente non suggerisco di usare PD[0..1] perché lo dedico alla mia comunicazione seriale su una scatola FreeBSD e Arduino et al. mappare quei pin al loro canale di comunicazione USB FTDI e, sebbene "loro" DICONO che i pin 0 e 1 funzioneranno se non si inizializza la comunicazione seriale, non sono mai stato in grado di utilizzare quei pin come normali I/O digitali. In effetti, ho passato due giorni a cercare di eseguire il debug di un problema quando ho provato a utilizzare PD0 e PD1 e ho scoperto che erano sempre ALTI. *alza le spalle* Probabilmente sarebbe bene avere una sorta di input esterno, come forse una tastiera, una rotella o un interruttore a rotella, o forse anche un input da un terminale (il mio ArduinoTerm non è ancora pronto per la prima serata…). La scelta è tua. Per ora, illustrerò solo come ottenere il codice per ottenere il carattere desiderato sul LED. C'è un file zip per il download che include il codice sorgente e Makefile e c'è anche un breve filmato che mostra il LED che stampa il suo set di caratteri. Ci scusiamo per la pessima qualità del video. Il codice sotto stampa la stringa "Benvenuto nel mio Instructable!" quindi scorre l'intero set di caratteri supportato dal LED.

DDRD = 0xFF; // OutputDDRB = (1<<DDB0); char msg = "Benvenuto nel mio Instructable!";uint8_t i;for (;;){ for(i=0;i<27; i++) { Print2LED(msg); _delay_ms(150); } for(i=0x20; i<0x80; i++) { Stampa2LED(i); _delay_ms(150); } Stampa2LED(&apos*&apos);}L'output della porta è gestito dalla funzione Print2Led()

voidPrint2LED(uint8_t i){ PORTD = (i << 2); se (i & 0b010000000) PORTAB = (1<

Il codice e il Makefile sono inclusi in un file zip qui sotto.

Passaggio 4: conservare le porte I/O con un registro a scorrimento

Conserva le porte I/O con un registro a scorrimento
Conserva le porte I/O con un registro a scorrimento
Conserva le porte I/O con un registro a scorrimento
Conserva le porte I/O con un registro a scorrimento
Conserva le porte I/O con un registro a scorrimento
Conserva le porte I/O con un registro a scorrimento

Quindi ora il nostro microcontrollore può inviare dati al LED a matrice di punti ma utilizza otto porte I/O. Ciò esclude l'utilizzo di un ATtiny in un pacchetto DIP a 8 pin e anche con un Arduino più recente dotato di un ATmega328p ci sono molte porte I/O per un LED. Tuttavia, possiamo aggirare questo problema utilizzando un IC chiamato registro a scorrimento. Un momento per "cambiare" marcia… Un registro del cambio si può capire meglio pensando alle due parole che ne costituiscono il nome: "shift" e "register". Il word shift si riferisce a come i dati si muovono attraverso il registro. Qui (come nel nostro Arduino e nei microcontrollori, in generale) un registro è una posizione che contiene dati. Lo fa implementando una catena lineare di circuiti logici digitali chiamati "infradito" che ha due stati stabili che possono essere rappresentati da un 1 o da uno 0. Quindi, mettendo insieme otto infradito si ha un dispositivo in grado di contenere e che rappresenta un byte a 8 bit. Proprio come esistono diversi tipi di flip flop e diverse variazioni su un tema di registri a scorrimento (pensa a contatori su/giù e contatori Johnson), ci sono anche diversi tipi di registri a scorrimento basati su come i dati è agganciato al registro e come tali dati vengono emessi. Sulla base di ciò, considerare i seguenti tipi di registri a scorrimento:

  • Ingresso seriale / Uscita parallela (SIPO)
  • Ingresso seriale / Uscita seriale (SISO)
  • Ingresso parallelo/uscita seriale (PISO)
  • Ingresso parallelo / Uscita parallela (PIPO)

Due di nota sono SIPO e PISO. I registri SIPO prendono i dati in modo seriale, cioè un bit dopo l'altro, spostando il bit di ingresso precedente sul flip flop successivo e inviando i dati su tutti gli ingressi contemporaneamente. Questo rende un bel convertitore da seriale a parallelo. I registri a scorrimento PISO, al contrario, hanno ingressi paralleli, quindi tutti i bit vengono immessi contemporaneamente, ma vengono emessi uno alla volta. E hai indovinato, questo è un bel convertitore da parallelo a seriale. Il registro a scorrimento che vogliamo utilizzare per ridurre il numero di pin I/O ci consentirebbe di prendere quegli 8 pin IO che abbiamo usato in precedenza e ridurli a uno, o forse solo a un paio, considerando che potrebbe essere necessario controllare come inseriamo i bit. Pertanto, il registro a scorrimento che utilizzeremo è un Serial In / Parallel Out. Collegare il registro a scorrimento tra il LED e Arduino L'utilizzo di un registro a scorrimento è facile. La parte più difficile è semplicemente visualizzare i pin di uscita dei dati e come le cifre binarie finiranno nell'IC e come alla fine appariranno sul LED. Prenditi un momento per pianificarlo. 1. Collegare 5V al pin 14 (in alto a destra) e portare il pin 7 (in basso a sinistra) a terra.2. Il registro a scorrimento ha due ingressi seriali ma ne useremo solo uno, quindi collega il pin due a 5V3. Non useremo il pin chiaro (usato per azzerare tutte le uscite), quindi lascialo fluttuare o attaccalo a 5V4. Collegare una porta IO digitale per pin uno dei registri a scorrimento. Questo è il pin di ingresso seriale.5. Collegare una porta IO digitale al pin 8 (in basso a destra). Questo è il pin dell'orologio.6. Collega le tue linee dati da Q0 a Q6. Usiamo solo 7 bit perché il set di caratteri ASCII usa solo sette bit. Ho usato PD2 per l'output dei miei dati seriali e PD3 per il segnale di clock. Per i pin dei dati, ho collegato Q0 a D6 sul LED e continuando in questo modo (Q1 a D5, Q2 a D4, ecc.). Dato che stiamo inviando dati in modo seriale, dovremo esaminare la rappresentazione binaria di ogni carattere che vogliamo inviare, guardando gli 1 e gli 0 e emettendo ogni bit sulla linea seriale. Ho incluso una seconda versione del sorgente dotmatrixled.c insieme a un Makefile di seguito. Cicla attraverso il set di caratteri e visualizza tutti i caratteri pari (se è strano pensare che una lettera possa essere pari o dispari, pensa alla rappresentazione binaria per un momento). Prova a capire come farlo scorrere attraverso la visualizzazione di tutti i caratteri strani. Puoi sperimentare ulteriormente le connessioni tra il registro a scorrimento, il LED a matrice di punti e il tuo Arduino. Ci sono diverse funzioni di controllo tra il LED e il registro che possono permetterti di mettere a punto il tuo controllo su quando i dati vengono visualizzati. Quindi… siamo passati dal dover usare otto porte I/O a usarne solo due!

Passaggio 5: riepilogo

Riepilogo
Riepilogo
Riepilogo
Riepilogo

In questo tutorial, ho presentato il LED a matrice di punti DLO7135 e come farlo funzionare. Ho inoltre discusso su come ridurre il numero di porte I/O richieste da otto a solo due utilizzando un registro a scorrimento. Il LED a matrice di punti DLO7135 può essere messo insieme per creare tendoni molto accattivanti e interessanti. Spero che ti sia divertito a leggere questo istruibile! Se ci sono miglioramenti che pensi che potrei fare o suggerimenti che vorresti dare su questo o uno qualsiasi dei miei 'ibles, sono felice di sentirli! Felice AVR'ing!

Consigliato: