domenica 23 ottobre 2016

Modulo Matrice 64 Led con MAX7219 - Test iniziale

Nel mio posto precedente [Modulo Matrice 64 lLd con MAX7219 - Assemblaggio] ho fatto vedere come assemblare il modulo Matrice 8x8 Led.

In questo post vediamo come programmare tale modulo con Arduino e Scratch




Piedinatura Modulo Matrice 8x8 Led

Il modulo Matrice 8x8 Led con MAX7219 ha due connettori da 5 peidini disposte ai due lati del PCB.
Entrambi i connettori hanno la stessa funzionalita'.




I piedini partendo dall'alto verso il basso sono contrassegnati come:
  • VCC:  piedino di alimentazione +5V
  • GND:  piedino di massa
  • DIN:   Data Input Seriale. Serve per caricare la parola da 16 bit all'interno dello shift register del MAX7219
  • CS: Chipe Select. Serve per indicare al MAX7219 quando caricare un bit presente sul pin DIN nello shift register. Questo avviene quando CS e' basso (LOW)
  • CLK:Clock utilizzato per le operazioni di caricamento della parola da 16 bit. Quando il clock va alto (HIGH) i bit in ingresso sono trasferiti nello shift register interno

Connessione del modulo Matrice 8x8 Led con Arduino

Come si puo' vedere nelle due figure ho collegato il piedino VCC e GND del modulo rispettivamente ai piedini +5V e a GND di Arduino.
Il pin DIN del modulo l'ho collegato al GPIO 4 di Arduino
Il pin CS dell modulo l'ho collegato al GPIO 3 di Arduino
Il pin CLK del modulo l'ho collegato al GPIO 2 di Arduino



Test base del modulo

Ora che ho assemblato il modulo e l'ho collegato ad Arduino non mi resta che testarlo.

Inizio creando un primo programma Scratch che utilizzo per verificare se il modulo funziona correttamente.


Codice Scratch 


Il cuore del codice si trova in due blocchi utili per scrivere la parola di programmazione a 16 bit nel MAX7219

Scrivi Byte


Questo blocco viene chiamato passandogli un valore numerico tra 0 e 255 (byte)
Il blocco si occupa di scrivere questo byte, un bit alla volta, nel MAX7219. Come si puo' vedere prima di scrivere il bit sul piedino DIN (pinData) si imposta il CLK a 0 (LOW) e poi dopo la scrittura si impostal il CLK a 1 (HIGH).
In questo modo il bit sul piedino DIN vienetrasferito nello shift register del MAX7219

In particolare questo blocco puo' essere utile a chi inizia per capire come si fa uno shift a sinistra di un byte.
E' un implementazione rozza (Scrtach e' alquanto limitato) dell'operatore di shift << (bitwise left) del lingiuaggio C.

Scrivi Comando


Questo blocco riceve in ingresso un indirizzo ed un comando su 8 bit (byte).
Il blocco si occupa di scrivere il comando fornito (byte) all'indirizzo fornito (indirizzo)


Come detto prima si trasferiscono i 16 bit di parola (8 di indirizzo e 8 di comando) con il pin CS (pinCS) a o (LOW). Solo alla fine il CS va' portato alto (HIGH) effettivamente trasfererendo i 16 bit nello shift register del MAX7219.
Solo a questo punto il MAX7219 esegue il comando fornito


Altri Blocchi

Gli altri blocchi sono di supporto per avere un main piu' pulito.
In particolare i blocchi hanno questa funzionalita':
  • setupGPIO: imposta i GPIO di Arduino per poter comunicare con il modulo Led in modo corretto e secondo le connessioni elettriche
  • setDecodeMode: imposta la modalita' di decodifica del MAX7219
  • setLuminosita[valore]: imposta la luminosita' della matrice (0-15)
  • setScanLimit: imposta lo scanlimit del modulo
  • accendiMatrice[valore]: accende o spegne la matrice (0-1)
  • testMatrice[valore]: imposta la modalita' di test (0-1)

Blocco Main



Il blocco main e' piuttosto semplice in quanto e' una serie di chiamate aglia ltri blocchi definiti

Inizia impostando i GPIO in modo corretto, poi imposta i parametri principali per il modulo MAX7219, in particolare la luminosita'.

Dopo di cio' spegne la matrice ed esce dalla modalita' di test, per resettare ogni stato precedente.
Poi attende 2 secondi e poi infine imposta la modalita' di test ed accende la matrice.

Se tutto funziona correttamente dovreste vedere tutti i led della matrice accendersi insieme

Bene a questo punto siete sicuri che il vostro che avete assemblato e completamente funzionante.