Sommario:

Come pilotare molti LED da pochi pin del microcontrollore: 6 passaggi (con immagini)
Come pilotare molti LED da pochi pin del microcontrollore: 6 passaggi (con immagini)

Video: Come pilotare molti LED da pochi pin del microcontrollore: 6 passaggi (con immagini)

Video: Come pilotare molti LED da pochi pin del microcontrollore: 6 passaggi (con immagini)
Video: Programmare Arduino, Spiegato Facile per Tutti 2024, Luglio
Anonim
Come pilotare molti LED da pochi pin del microcontrollore
Come pilotare molti LED da pochi pin del microcontrollore

Usando il fatto che molti pin del microcontrollore hanno tre stati (+V, GND o "alta impedenza", puoi pilotare N*(N-1) LED dai pin N. Quindi il piccolo microcontrollore a 8 pin come un PIC12Fxxx o un ATtiny11 può pilotare 20 LED sui cinque pin di uscita disponibili e hanno ancora un pin rimasto per qualche tipo di input. Vedi anche

Passaggio 1: 20 LED su 5 pin

20 LED su 5 pin
20 LED su 5 pin

L'attuale raccolto di microcontrollori a basso numero di pin (6 pin a 20 pin su

l'intero pacchetto) hanno un prezzo interessante e "carino", ma sorge la domanda su come utilizzare al meglio quei pin per applicazioni comuni come il pilotaggio dei LED. Un approccio a connessione diretta per pilotare i LED consuma un pin per ciascun LED. Uno schema di multiplexing tradizionale in cui le file di anodi LED sono pilotate da un set di N pin e il catodo comune di ogni riga è pilotato da un altro set di M pin riesce ad accendere i LED N*M con i pin N+M. Tuttavia, su un processore con solo 5 o meno uscite (come nel caso della maggior parte dei microcontrollori a 8 pin), questo ti dà a malapena più uscite rispetto all'azionamento diretto.

Passaggio 2: Charlieplexing

Charlieplexing
Charlieplexing

Supponendo che i pin di uscita siano effettivamente abilitati a tre stati (attivo alto, attivo basso e alta impedenza (ingresso)), è anche possibile condividere i driver di riga e colonna e controllare N*(N-1) LED con solo N pin. Un pin è collegato ai catodi comuni di una fila di LED e guidato in basso, e gli N-1 pin rimanenti sono collegati agli anodi e guidati in alto per illuminare quella colonna, o lasciati come input per lasciare il LED spento. Maxim chiama questa tecnica "Charlieplexing", e la descrive in (1); Microchip lo menziona anche nel loro documento (2) (e implementato anche sulla scheda PICKit 1.) (1) "Charlieplexing - Multiplexing del display a LED con numero di pin ridotto" https://www.maxim-ic.com/appnotes. cfm/appnote_number/1880(2) "Tips 'n Tricks Microcontrollori FLASH PIC a 8 pin"https://ww1.microchip.com/downloads/en/DeviceDoc/40040b.pdf(3) Charlieplexing LEDs- The theory An Instructable by rgbphil

Passaggio 3: metterlo al lavoro

Metterlo al lavoro
Metterlo al lavoro
Metterlo al lavoro
Metterlo al lavoro

Questo pilota 20 LED da un ATtiny11. Una versione precedente di questa scheda era

effettivamente costruito e appare come foto della pagina principale. Temo che l'immagine dello schema sia piuttosto disperata; hai bisogno che Eagle ti dica quali segnali sono collegati dove.

Passaggio 4: più piccolo e più versatile…

Più piccolo e più versatile…
Più piccolo e più versatile…

Poiché la maggior parte della scheda è occupata dall'array LED, possiamo fare spazio

per un chip Attiny OPPURE per un chip PIC12F con microchip. Riduci i LED a 3 mm e vai su una scheda a doppia faccia, e otteniamo qualcosa di 27x44 mm Ahimè, questa scheda non è stata ancora testata…

Passaggio 5: Itty Bitty

Itty Bitty
Itty Bitty

Microchip ha ovviamente i suoi chip PIC10F a 6 pin, in grado di pilotare un

solo 6 LED dai 3 pin di uscita. Questo è di circa 16 mm di diametro. Passare a 603 LED ti consente di rimpicciolire un po', ma non sono sicuro di quale sia il punto.

Passaggio 6: software

Il software diventa un po' disordinato per motivi di server:

1) per i PCB mostrati, i LED sono disposti in modo conveniente per il layout del PCB, piuttosto che nell'ordine di bit "corretto". IMO, questo è il modo di fare le cose, ma significa che Riga 1 non significa necessariamente bit 1, o coluimn 3 non significa bit 3. Ciò richiede un livello di mappatura tra il solito indirizzamento riga/colonna e il bit che devono essere impostati. 2) Poiché vengono utilizzati gli stessi bit per anodi e catodi, la connessione comune (riga) per alcuni bit può trovarsi nel mezzo dei bit pilotati (colonna). Ciò significa che devi spostare i bit di colonna a seconda che siano prima o dopo il bit di riga per quel set di colonne. 3) Devi derivare le parole di output sia per l'ioport che per il registro di direzione della porta. Il codice ASM allegato per ATtiny11 è una "prova di concetto". È imbarazzante non ottimizzato e poco commentato, ma è tutto ciò che ho scritto finora.

Consigliato: