Visualizzazione post con etichetta scratch s2aio. Mostra tutti i post
Visualizzazione post con etichetta scratch s2aio. Mostra tutti i post

lunedì 31 ottobre 2016

Modulo Digital Tube - Display 7 Segmenti

In qusto post spiego come programmare il modulo Digital Tube Display Module TM1637 con Arduino e Scratch







Questo modulo e' composto da 4 display a 7 segmenti pilotati dal driver TM1637 (qui il datasheet) monato sul retro del modulo



Il chip TM1637 ha anche la capacita' di leggere gli scan code di un tastierino 4x4, ma non viene trattato in questo post.

Piedinatura

Il modulo ha 4 piedini

    • VCC: piedino di alimentazione +5V
    • GND: piedino di massa
    • CLK: piedino di clock
    • DIO: piedino di scambio dati seriali tra Arduino ed il TM1637

Come si vede tolti i due piedinio di alimentazione, il modulo si programma con un semplice protocollo seriali a due fili (CLK e DIO).


Programmazione

Qui una breve descrizione (volutamente non completa) sul come programare il modulo. Tutti i dettagli sono contenuti nel datasheet

Leggendo il datasheet (chiunque vuole smanettare con Arduino e i vari componenti elettronici deve imparare a leggere un datasheet :) ) si capisce che il modulo puo' essere programmato con due modalita' differenti di indirizzamento (autoincrementale, fissa)  (in questo post ne usiamo solo quella fissa).




Questa figura ci spiega come programmare il display. Piu' precisamente bisogna inviare al modulo 3 comandi ed il dato da visualizzare sul display a 7 segmenti. I tre comandi sono definiti come:

  • Data command settings: comando di impostazioni
  • Address command settings: comnado di impostazione indirizzo
  • Display and control command settings: comando di impostazioni display


Nel datasheet e' definito il formato di ogni singolo comando (ometto ulteriori dettagli dato il target di questo post)

In conclusione per far visualizzare una cifra sul display bisogna inviare questi comandi (valore esadecimale del byte di comando):

  • 0x40: write data to display:  diciamo al modulo che vogliamo scrivere una cifra su un  display a 7 segmenti
  • 0xC0: indirizzo (0 - 3 siccome ci sono 4 display) del display che vogliamo usare 
  • 0x88: impostazione della luminosita'


Circuito

Vediamo ora come collegare il modulo Digital Tube ad Arduino





  • piedino VCC: va collegato al piedino 5V di Arduino
  • piedino GND: va collegato al piedino GND di Arduino
  • piedino CLK: va collegato al pin 7 di Arduino
  • piedino DIO: va collegato al pin 6 di Arduino

I piedini CLK e DIO possono essere collegati a qualsiasi pin digitale di Arduino, ma questo post usa il 6 ed il 7.






Codice Scratch

Ok ora che abbiamo capito come programmare e collegare il modulo digital tube ad Arduino vediamo il codice Scratch di prova




Il codice implementa il protocollo seriale descritto nel datasheet. 

Il blocco creaFont  e' usato per definire una tabella di mapping tra i valori numerici da 0 - 9 ed il relativo valore numerico da passare al modulo.

In altre parole i 7 segmenti sono pilotati dal vaore di un bit all'interno di un byte. Quindi andando a mettere a 0 o a 1 specifici bit si dice al modulo di accendere o spegnere il display.
In questo modo si possono far visualizzare al display le 10 cifre ed anche altri caratteri



I segmenti dal A a G, sono rappresentati in questo modo in uun byte (A = LSB)

0gfedcba

Quindi per esempio la cifra 1 si visualizza accendendo il segment b ed il segmento c e spegnendo tutti gli altri segmenti.

Quindi scrivendo in binario otteniamo 00000110 che  in deciamale e' 6.

I blocchi sequenzaStart e sequenzaStop sono usati per impostare particolari sequenze di valori sui piedini CLK e DIO in modo da rispettare ed implementare il protocollo descritto.

Il blocco scriviByte accetta un valore in ingresso ed ha il compito di inviare il byte passato in ingresso (bit per bit) al modulo

Il blocco displayCifra accetta due valore in ingresso:
  • l'indirizzo [0-3] del display da usare (cifra)
  • il valore numerico [0-9] da visualizzare (valore)




Infine nel blocco principale (main) impostiam i valori dei 3 comandi necessari per progammare il modulo.
Dopo creaiamo la tabella dei font ed impostiamo la luminosita' (da 0 - a 7).
Assegniamo i pin di CLK e DIO ai pin di Arduino (6 e 7) e li impostiamo come Output.

A questo punto possiamo chiamare il blocco displayCifra per far apparire sul display selezionato la cifra voluta

Buon divertimento e sperimentate a visualizzare altri caratteri.






domenica 23 ottobre 2016

Modulo Matrice 64 Led con MAX7219 - Programmazione

In questi due post Modulo Matrice 64 Led con MAX7219 - Assemblaggio  e precedenti Modulo Matrice 64 Led con MAX7219 - Test iniziale abbiamo saldato ed assemblato il modulo matrice 8x8 led con MAX7219 e lo abbiamo testato con un programma in Scratch.





In questo post vediamo come programmarlo per visualizzare una figura sulla matrice.

Codice Scratch



Il codice Scratchper programmare la matrice led si basa sul codice utilizzato per testare la matrice spiegato nel post precedente.

Vengono aggiunti alcuni blocchi utili.

Conversone da Esadecimale a Decimale



Questo blocco accetta in input un valore esadecimale (in base 16) e lo converte in decimale (base 10)


Invesrione di un byte


Questo blocco dato un valore in byte ne calcola il valore decimale invertendo a specchio tutti i suoi bit.

Per esempio se il valore in input e' 123 il risultato fornito dal blocco sara' 222.

Se scriviamo i numeri in binario risulta tutto piu' chiaro

123 -> 01111011
222 -> 11011110

Come vedete se invertitr i bit del numero 123 si ottiene il numero 222.

I due blocchi introdotti sopra sono utili per programmare la matrice con una figura arbitraria.

Accensione di una linea della matrice



Questo blocco sfrutta il blocco scriviComando per accendere i led di una specifica riga (riga) della matrice in base al valore (data) fornito


Editor per Matrice a Led

Su Internet e' disponibile un editor web per la matrice 8x8 usata in questo post.




Questo ottimo sito permette di disegnare il bitmap 8x8 che si vuole visualizzare sulla matrice.
La cosa piu' bella e' che fornisce moltissime immagini (font, numeri ed iconi) gia' disegnate, quindi ideale per una prova veloce.

Una volta terminato di editare il bitmap della matrice, il sito visualizza una porzione di codice C che rappresenta il bitmap stesso.

Inoltre rappresenta tutto il bitmap con un singolo numero a 64 bit rappresentato in formato esadecimale.

Per esempio il bitmap in figura e' rappresentato con questo codice: 10387cfe7c381000

Il nostro codice Scratch usa questo codice esadecinmale per visualizzare il bitmap sulla matrice andando a programmare l'accensione o lo spegnimento di ogni singolo led della matrice.

Programma Principale



L'unico input da fornire e' il codice prese dal sito Editor per Matrice (10387cfe7c381000) ed assegnarlo alla variabile matrice, come si vede nel secondo blocco in figura.

Dopo di cio', allo stesso modo del programma di test, si inizializzano i GPIO e si inizializza la matrice.

Ora il modo in cui il bitmap e' rappresentato nel codice esadecimale non e' direttamente utilizzabile dal mio programma, ma deve prima essere manipolato.

In dettaglio in un ciclo che viene ripetuto 8 volte si leggono due cifre alla volta (8x2) del codice esadecimale e si convertono in decimale.

Il valore nibble1+nibble2 e' il valore decimale di due cifre esadecimali del codice complessivo.

Questo valore viene passato al blocco invertiByte che come visto prima ne inverte i bit a specchio.

A questo punto il valore ottenuto e' quello corretto per essere programmato e visualizzato dalla matrice. Cio' avviene andando a scrivere tale valore all'indirizzo della riga tramite il blocco accendiRiga.

Al termine del ciclo tutte le 8 righe della matrice sono programmate e il bitmap rappresentato dal codice esadecimale a 64 bit e' visualizzato sulla matrice


Nota

Ho notato che la programmazione del modulo e' abbastanza lenta e richiede circa 22 secondi.
Questo non e' dovuto ad un malfunzionamento di Arduino o del modulo, ma ad una caratteristica del software Firmata che gira su Arduino.

Ma dopotutto questo post serve per imparare. Se poi si vuole usare il modulo in modo piu' serio realizaando delle animazioni si usa il codice Arduino e non Scratch, ma questo viene trattato in decide di post su Internet.

Buon divertimento e buona sperimentazione.





venerdì 30 settembre 2016

Arduino s2aio & Scratch - Progetto #1: Blink

Blink


Blink e’ la prima e la piu’ semplice applicazione per Arduino che possiamo programmare con Scratch
Nel mondo del software Blink e’ meglio conosciuto come Hello World !
Blink fa accendere e spegnere ogni secondo il led presente sulla scheda Arduino
Blink serve a verificare che l’ambiente Scratch e Arduino siano correttamente funzionanti






Circuito Finale

Questo e' l'aspetto che avra' il circuito finale. In questo caso non ci sono cablaggi.


IMG_0037.JPG



Circuito Finale in funzionamento

Questo e' il funzionamento del circuito finale in azione.



output_0p3AWP.gif



Bill of Material

Qui la lista dei componenti e del materiale di cui hai bisogno per realizzare il progetto.



Circuito Breadboard

Realizza il tuo progetto seguendo i cablaggi sulla breadboard e Arduino come raffigurato qui sotto.
In questo caso non ci sono cablaggi.



blink_bb.png


Codice Scratch

Implementa esattamente questo codice nell'ambiente Scratch per far funzionare il tuo progetto.





Complimenti


Complimenti se vedi il led sulla scheda Arduino lampeggiare ogni secondo significa che hai crerato il tuo primo programma per Arduino e tutto funzionabene !!!