SENDBITS
Lo sketch completo è disponibile nel repository GitHub.
La comunicazione con il display viene realizzata con la funzione ht1632c_send_bits():
#define DISPLAY_CS 3 #define DISPLAY_WR 4 #define DISPLAY_DATA 5 |
Per capirne il funzionamento, è necessario conoscere un po’ di operazioni binarie: alla funzione viene passato il byte da inviare (bits) e una maschera (firstbit) che viene utilizzata per estrarre dal byte il singolo bit da inviare.
Vediamo un esempio: dobbiamo inviare (in modalità MSB) 1011. bits sarà quindi 00001011 e impostiamo firstbit a 00001000. Alla prima iterazione del ciclo while avrò quindi:
L’ultima istruzione del ciclo sposta (shift) a destra firstbit di un bit; alla successiva iterazione avrò:
E continuando…
SKETCH
Questo primo esempio accende a rotazione tutti i led del display, partendo dal primo (indirizzo di memoria 0) all’ultimo.
All’interno del loop vi è un ciclo for che invia tutti 0 tranne per una posizione:
for(int i = 0; i < 256; i++) { digitalWrite(DISPLAY_WR, LOW); if(i == j) digitalWrite(DISPLAY_DATA, HIGH); else digitalWrite(DISPLAY_DATA, LOW); digitalWrite(DISPLAY_WR, HIGH); } |
Ecco lo sketch in esecuzione:
How fast can the LEDs be updated? I’d like to write to the matrix so that everything is lit, then send a new image 100 – 300 milliseconds later and repeat this at least 10 times over 3 seconds.
thanks,
Mike
Hi Mike,
referring to the datasheet (http://www.holtek.com/pdf/consumer/ht1632cv120.pdf) you can send data to the Holtek controller up to 1MHz
bye
Hello Luca
Is There any chance to translate your code for other
LED-display from Sure electronics.
I have this LED-Display
http://www.sureelectronics.net/goods.php?id=1136
I try to understand how the HT1632C works but I dont get it 🙁
Hi Ahmet,
unfortunately this is the only display by Sure that I own so I can’t modify/test the code on different models…
Hello
Luca thank you its no problem, i got it
thank you very much! 😀
CIao Luca,
anzitutto complimenti, poi…..
non riesco a capire il codice arduino per accendere un led alla volta. In particolare quando entra nel loop, dove viene incrementato l’indirizzo di memoria dell’ HT1632 ? Io noto che anche ad ogni incremento di j l’indirizzo è sempre lo stesso. Come mai?
Ti ringrazio anticipatamente.
Ciao Giuseppe,
ad ogni “refresh” devi inviare lo stato (ON/OFF) di tutti i led… questo refresh viene gestito dal ciclo sulla variabile i. La variabile j che indica la posizione del led acceso viene invece incrementata nel loop() principale e – se è arrivata a 255, viene riportata a 0. Quindi il loop principale “cicla” la posizione del led acceso, mentre il loop interno invia al display – per ogni ciclo principale – lo stato di tutti i led.
bye
It’s really usefull.Great!Many thanks!
How fast can the LEDs be updated? I’d like to write to the matrix so that everything is lit, then send a new image 100 – 300 milliseconds later and repeat this at least 10 times over 3 seconds.
thanks,
John
Hi John, the controller’s datasheet reports a clock of 256Khz and a frame length of 8*328 ticks… so if your microcontroller is fast enough, you should be able to update the matrix display at the rate you need.