Riprendiamo oggi il nostro display a matrice di led con un primo esempio di utilizzo con Arduino…
COLLEGAMENTI
Come detto, per pilotare il display sono sufficienti 3 pin. Possiamo utilizzare qualsiasi pin digitale di Arduino: per comodità nello sketch sono definiti degli alias:
#define DISPLAY_CS 3 #define DISPLAY_WR 4 #define DISPLAY_DATA 5 |
Il display viene alimentato a 5V, possiamo prelevare alimentazione e massa sempre da Arduino:
COMUNICAZIONE
Per comunicare con il display, il codice Arduino dovrà per prima cosa mettere a livello logico 0 il pin CS.
Quindi, per ogni bit,
[checklist]
- mettere a livello logico basso il pin RW
- inviare il bit sul pin DATA
- mettere a livello logico alto il pin RW
[/checklist]
infatti il valore presente sul pin DATA viene letto sul fronte di salita del pin RW.
Leggendo il datasheet del chip HT1632C, si nota come comandi e indirizzi vadano inviati dal bit più significativo (MSB), mentre i dati da quello meno significativo (LSB):
COMANDI
L’integrato HC1632C definisce 3 comandi, identificati dai primi 3 bit inviati:
- READ, 110
- WRITE, 101
- COMMAND, 100
I primi due comandi sono seguiti dall’indirizzo di memoria e dai dati; il terzo invece è seguito da un codice comando che specifica il particolare comando da eseguire.
INIZIALIZZAZIONE
All’accensione, il display è disabilitato:
Per poterlo utilizzare, dovremo inviare i comandi di SYS EN e LED On (come vedremo questi due comandi saranno inviati all’interno del metodo setup() del nostro sketch).
Nella prossima pagina vedremo un primo sketch di esempio…
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.