I problemi che controllano un Rainbowduino
Domanda
Ho appena comprato un Rainbowduino per controllare un carico di singoli LED (non una matrice RGB). Tutta la documentazione finora è rivolto verso il controllo array RGB che è non quello che sto cercando.
Se si ha familiarità con l'Rainbowduino si tratta di un Arduino clone con 24 canali a corrente costante di 120 mA, 8 eccellente fonte canale pilota di 500 mA ciascuno e un'ampia adattamento tensione di uscita da 5 V - 12 V CC. Perfetto per il pilotaggio di LED. La pagina web del prodotto è qui: http://www.seeedstudio.com/blog/?page_id= 187
Ho collegato a 16 LED e voglio essere in grado di trasformare ognuno e disattivare individualmente con digitalWrite()
. Ho caricato un codice demo alla scheda che non è davvero lavorando. Ho lavorato che gli 8 canali sorgente conducente sono facilmente controllabili con digitalWrite()
sui pin 3-11. Tuttavia controllare gli altri 24 canali del dissipatore è più difficile. Apparentemente sono controllati da 3 registri a scorrimento (uno ciascuno) che posso accedere solo con SHIFTOUT. Non ho idea di come funziona. Qualcuno può aiutarmi a punto nella giusta direzione?
La metà dei LED sono cablati in Blu 1-8 e l'altra metà sono cablati in Verde 1-8. Le gambe positivi sono cablati in VCC1-2 che sono stati impostati su HIGH. Sono sicuro che il circuito è collegato correttamente, è la programmazione che sto avendo problemi con.
Ho guardato il codice di esempio che viene fornito con il Rainbowduino, ma non riesco a dare un senso di esso. Come posso risolvere questo problema?
Soluzione
L'uso di un registro a scorrimento per multiplare (o de-multiplex, a seconda dei punti di vista) ingressi / uscite è molto comune nel campo dell'elettronica digitale.
In sostanza, è il commercio risparmiando pin sul controller per dover includere un altro chip (il registro a scorrimento) nel progetto.
In questo caso, il registro funziona come un convertitore seriale-parallelo; ha una linea di ingresso seriale, che è alimentato con punte di CPU. Inoltre ha 8 uscite parallele, collegate ad una memoria a 8 bit che viene caricato serialmente dalla CPU. Usando questo, si può "spostare" su 8 bit di dati su un singolo perno (più uno spinotto per clock, tipicamente), che vengono poi memorizzati nel registro a scorrimento e può guidare 8 LED in parallelo.
In questo caso particolare, è necessario capire che AVR portuali perni i registri a scorrimento (driver sink corrente costante MBI5168 contengono i registri a scorrimento, qui) sono collegate a. Dovrebbero essere incatenato ad una coppia di uscite, una per i dati e uno per l'orologio. Una volta che sai quei pin, si dovrebbe essere in grado di guidare da soli utilizzando il SHIFTOUT comando .
Scavando un po 'oltre, questo campione "sketch" contiene le seguenti definizioni, nel file denominato "Rainbow.h":
//MBI5168
#define SH_DIR_OE DDRC
#define SH_DIR_SDI DDRC
#define SH_DIR_CLK DDRC
#define SH_DIR_LE DDRC
#define SH_BIT_OE 0x08
#define SH_BIT_SDI 0x01
#define SH_BIT_CLK 0x02
#define SH_BIT_LE 0x04
#define SH_PORT_OE PORTC
#define SH_PORT_SDI PORTC
#define SH_PORT_CLK PORTC
#define SH_PORT_LE PORTC
Questo è naturalmente totale "per sentito dire" digitale (non ho proprio il dispositivo, non ho mai programmato su qualsiasi tipo di Duino *), ma direi che questo è il sistema di consegna della pallottola di particelle sputa te' re cercando.
Interpreto questo modo:
- PORTC è quello collegato ai registri a scorrimento, tutti i perni di comando sono in PORTC.
- Quattro perni sono dedicati (piuttosto che il ottimistica due che ho citato sopra).
- L'orologio è pin PORTC: 2 ed i dati sono PORTC:. 1
Altri suggerimenti
Il controllo di ogni singolo LED è tempo piuttosto costoso, è meglio pensare in file, mentre ogni colore del LED è presentato come il bit, quindi è 8 bit x 3 colori (rosso, verde, blu). Ho scritto una piccola biblioteca Rainbowduino, che permette di impostare ogni riga o frame facilmente: