Ho un microcontrollore con un pin digitale disponibile.
Come posso controllare 25 LED?
Ho un microcontrollore con un pin digitale disponibile.
Come posso controllare 25 LED?
Risposte:
I2C IO Expander : - Alcuni overhead di protocollo, ma dovrebbe essere espandibile a un numero molto grande (migliaia) di LED.
Registro a scorrimento semplice - Dead Interfaccia semplice, i LED possono sfarfallare durante l'aggiornamento se l'orologio del registro a scorrimento non è abbastanza veloce. L'uso di un registro a scorrimento a doppio buffer risolverà questo problema.
Shift Register e I2C sono buoni, ma solo se ci sono almeno 2 pin liberi. Suggerisco di estendere la porta a 1 filo DS2408 di Dallas sarà una soluzione ottimale. Il codice per l'accesso al dispositivo a 1 filo di Dallas non è così complicato e ci sono molti esami sul web.
È possibile utilizzare diversi DS2408 collegati a un pin o implementare più logica dopo il singolo DS2408 a seconda delle esigenze.
Con solo 1 pin IO, è possibile utilizzare un registro expander / shift a 1 filo o aggiungere un altro dispositivo al bus I2C, come già indicato. L'unica cosa che non è stata ancora menzionata è la possibilità di aggiungere un altro slave alla porta SPI.
SPI è chiamato protocollo a 4 fili - Hai due linee dati, una linea di clock e una linea selezionata (oltre a una terra comune, ma di solito non conta). Tuttavia, i primi tre sono condivisi tra tutti i dispositivi sul bus, quindi ogni dispositivo dopo il primo prende solo un'altra traccia / filo. SPI aumenta anche il bus in full duplex, ma questo non ha importanza per questa applicazione.
Se hai davvero solo 1 pin disponibile, il bus a 1 filo di Dallas sembra la cosa più ovvia. Tuttavia, poiché questo è solo output, ci sono soluzioni più economiche. Un bus PWM seriale che trasporta sia dati che clock è facile da configurare; vedi ad esempio la pagina di Roman Black come menzionato anche da David. Hai solo bisogno di registri a scorrimento in parallelo in uscita come il 74VHC164 , che puoi collegare in cascata per tutte le uscite che vuoi (un '164 ha 8 uscite).
In questa soluzione i LED sono guidati staticamente.
Se hai altri I / O che puoi condividere, come SPI di I2C, puoi scegliere soluzioni più lussuose, come MAX6950 di Maxim . Il MAX6950 ha il controllo lampeggiante e della luminosità e la limitazione della velocità di risposta, per citarne alcune caratteristiche. I LED sono multiplexati, il che significa che è necessario solo un driver a 16 pin.
La risposta è probabilmente "una serie di registri a scorrimento", ma puoi essere più specifico nella tua domanda? Quale microcontrollore? Cosa intendi con "porta digitale"? Un singolo pin?
25 LED a seconda delle dimensioni possono assorbire molta energia per un singolo pin IO digitale su un microcontrollore. Invece di guidarli direttamente, dovresti probabilmente usare un semplice interruttore FET (quindi l'IO è legato al gate) per controllare l'alimentazione della catena LED.
A seconda dell'applicazione, ci sono altri modi più efficaci per farlo. Ma lanciare un feto ti farà probabilmente lavorare più velocemente.
Ad esempio, se si desidera trasmettere un segnale variabile, esistono dispositivi più complicati, a volte chiamati relè digitali, che offrono un modo per commutare digitalmente.
Per quanto riguarda il controllo individuale di 25 LED con una singola porta IO. Come altri hanno suggerito, è possibile utilizzare alcuni registri a scorrimento. Esistono soluzioni più complicate che coinvolgono la comunicazione con un altro IC utilizzando un protocollo seriale (ad esempio I2C).
Roman Black descrive il sistema shift1 che consente di controllare indipendentemente un numero qualsiasi di LED da un singolo pin del microcontrollore.
@Fake Name, @Tim, @pingswept suggeriscono tutti di concatenare insieme alcuni registri di spostamento, il pin di output dei dati DO su uno che alimenta il pin di input dei dati DI sul successivo. Il 74HC595 funzionerebbe bene. (Forse qualche altro chip funzionerebbe leggermente meglio ).
(@reemrevnivek, con questo tipo di SPI concatenato, ogni dispositivo dopo il primo non richiede più pin sul microcontrollore, contrariamente a quanto sostengono molte persone: perché li ascolti? :-).
Normalmente ciò richiede 4 pin sul microcontrollore: MISO, MOSI, SCLK e chiavistello. Dato che stai facendo solo output, non hai bisogno di un pin di input MISO.
Roman Black ha capito che con un tempismo molto attento su una singola uscita del microcontrollore e con un'attenta modifica di un circuito analogico, un singolo pin del microcontrollore può pilotare un circuito analogico dall'aspetto semplice che separa il comune SCLK, il DI pin del primo chip nella catena (MOSI) e il segnale di blocco comune.
Quindi quel microcontrollore può controllare 25 LED da un singolo pin.