Introduction: Come Costruire Un Led Cube 8x8x8 (Italian Version)

Probabilmente siete capitati in questa pagina perche' avete visto uno dei tanti video sui led cube che circolano per la rete ed avete deciso di costruirne uno tutto vostro..
Bene, sono felice di informarvi che siete arrivati nel posto giusto: qui troverete i miei appunti, le immagini per la costruzione, il codice sorgente del programma sviluppato da me per controllare il cubo ed anche diversi video dimostrativi.
Prima di mettervi all'opera leggete tutto, e' meglio avere una visione globale del progetto prima di cominciare.
Prima di passare alla pratica, come ogni cosa e' necessaria una breve lezioncina teorica tanto per capire di cosa stiamo parlando.

Come e' fatto:
La misura del cubo che ho costruito e di cui vi forniro' le istruzioni sara' 8x8x8: 8 led di larghezza, 8 led di altezza, 8 led di profondita': totale 512 led utilizzati. La struttura poggera' su di un piano di legno.

Il concetto di persistenza di visione:
Con questo progetto utilizzeremo il concetto di persistenza di visione:
La persistenza della visione ci illude che un film non sia composto da fotogrammi: tutte la animazioni sono basate su questa disfunzione fisiologica del nostro apparato visivo. Se riusciamo a far accendere 2 led in alternanza molto velocemente (nell'ordine di pochi ms) i led appariranno all'occhio umano come accesi contemporaneamente.
Utilizziamo la persistenza di visione perche' non e' possibile accendere tutti i led del cubo contemporaneamente, la corrente (misurata in ampere) utilizzata sarebbe troppo alta. Se infatti consideriamo che i led ad alta luminosita' utilizzati in questo progetto consumano intorno ai 20mA l'uno possiamo dire che 512 led consumano 20mA x 512 led = 10,24 A. Decisamente troppa corrente da gestire. Quindi cosa facciamo? Accendiamo un piano del cubo alla volta! In questo modo la corrente utilizzata in ogni singolo momento non superera' mai gli 1,28 A (20mA x 64 led), gestibilissimi da un buon alimentatore. Supponiamo di voler accendere tutti i led del cubo contemporaneamente: basta accendere i piani (composti da 64 led), 1 per volta, ad una velocita' elevata: il cubo risultera' all'occhio umano completamente acceso.

Come comandare ogni singolo led:
Per poter comandare indipendentemente ogni singolo led dividiamo il cubo in livelli (per orizzontale) e in colonne (verticale).
Ogni led posto sullo stesso livello del cubo avra' il catodo (-) in comune con gli altri led del livello. Ogni led posto sulla stessa colonna avra' l'anodo (+) in comune con gli altri led della colonna.
In tutto ci saranno da comandare 8 catodi per selezionare i singoli livelli e 64 anodi per selezionare le singole colonne. L'incrocio livello-colonna indichera' il led acceso.

Gli shift register a 8 bit:
Gli shift register sono dei componenti costituiti da celle di memoria ad un bit collegate tra loro, ad ogni impulso di clock consentono lo scorrimento dei bit da una cella a quella immediatamente successiva. I registri che utilizziamo in questo progetto sono del tipo SIPO (serial input-parallel output): i dati vengono caricati uno alla volta tramite il bit di input e sono prelevati contemporaneamente sulle 8 uscite.

L'alimentazione:
Per alimentare il cubo e il circuito di comando e' necessario un alimentatore con le seguenti caratteristiche:
- Tensione di uscita: 5 Volts stabilizzate
- Corrente di uscita: 2 Ampere (meglio 4 Ampere)

IMMAGINI:
- cubo finito e funzionante

Step 1: Costruiamo Il Cubo Vero E Proprio (prima Parte)

Strumenti necessari:
- Saldatore
- Stagno
- Pistola per colla a caldo
- Seghetto alternativo

Materiali necessari:
- 512 led del vostro colore preferito
- 1 cavo flat da 40 pin (usato per il collegamento degli hard disk IDE al pc)
- 1 cavo flat da 34 pin (usato per il collegamento dei floppy disk al pc)
- 1 basetta millefori
- 1 tavoletta di legno compensato 20x20 cm da 8 mm di spessore
- Filo elettrico adatto alle saldature (fine e malleabile ma allo stesso tempo resistente)

Costruzione:
Prendiamo la tavoletta di compensato e disegnamo una griglia 7x7 quadretti con 2,5 cm di lato. In corrispondenza degli incroci delle linee facciamo 64 fori con una punta di diametro pari a quello dei led, generalmente 0,5 cm. Questa sara' la base su cui andremo a saldare tutti i led insieme, in questo modo i ledi saranno distanziati con precisione l'uno da l'altro cosi', quando andremo ad unire insieme i vari piani, essi saranno perfettamente allineati.
Come detto in precedenza i catodi di ogni singolo livello devono essere uniti tra di loro:
Inseriamo 64 led nei fori appena fatti e pieghiamo i terminali dei catodi (-) in modo da formare una griglia comunicante.

VEDI FIG. 02.1 e 02.2

Fate uscire dalla tavoletta di legno solo 1 filo di collegamento, servira' per comandare il livello.
Mi raccomando: ogni volta che avrete terminato di saldare un livello testate tutti i led uno per uno, meglio accorgersi subito se qualche led e' bruciato oppure saldato male.

VEDI FIG. 03.1 e 03.2 e 03.3

Dovete fare 8 griglie di led uguali, con l'accortezza di far uscire dalla tavoletta il connettore del catodo in posti differenti dai livelli saldati in precedenza.

VEDI FIG. 04

Step 2: Costruiamo Il Cubo Vero E Proprio (seconda Parte)

Una volta costruiti tutti gli 8 livelli possiamo passare ad unirli insieme.
Ponete nuovamente uno per volta le griglie di led sulla tavoletta. Piegate gli anodi (+) come si vede nell'immagine. Questo serve per saldare tutti gli anodi della stessa colonna con un filo dritto, senza dover fare pieghe per evitare i led.

VEDI FIG. 05.1, 05.2 e 05.3

Una volta che tutti i led sono pronti prendete il filo e tagliatelo in 64 pezzetti da 20 cm circa. Spelate tutti i fili togliendo la copertura in plastica e cercate di renderli il piu' dritti possibile (non vogliamo mica costruire il cubo di Pisa!). Piu' i fili saranno dritti piu' il cubo verra' bene.
Ogni led dovra' essere distante 1,5 cm da quello sopra e cosi' via.

VEDI FIG. 06

Poggiate il primo livello del cubo (quello che dovra' stare in alto) sulla tavoletta in corrispondenza dei fori. Saldate tutti e 64 i fili preparati in precedenza agli altrettanti anodi (+) dei led che avete posto sulla tavoletta. Una volta finito inserite dall'alto la griglia successiva e continuate a saldare.

Seguite alcune accortezze:
Per distanziare correttamente un livello dall'altro preparate 4 pezzetti di legno. Li inserirete tra un livello e l'altro e sara' anche utile anche per sostenere il livello durante la saldatura dei fili delle colonne!

Ogni volta che finite di saldare un livello testate sempre il funzionamento di ogni singolo led. Se, una volta finito, per qualche sfortunato motivo un led all'interno del cubo non dovesse funzionare sarebbe difficilissimo sostituirlo. Meglio spendere del tempo a verificare il funzionamento di ogni led che dover fare a pezzi il cubo dopo averlo gia' montato.

Non sara' una cosa facile, armatevi di molta pazienza& posso solo dirvi che via via che inserirete le griglie sara' sempre piu' facile perche' i fili delle colonne saranno sempre piu' stabili.

VEDI FIG. 07.1 e 07.2

VEDI FIG. 08

VEDI FIG. 09

Una volta finito di unire tutti i livelli dovete portare tutti i catodi (-) di ogni singolo livello alla base del cubo (che ricordiamo in questo momento si trova in alto in quanto il cubo e' capovolto). Quindi pieghiamo i terminali uscenti da ogni livello a 90 gradi e saldiamo ai loro capi dei filetti come quelli utilizzati per le colonne.

A questo punto possiamo togliere la tavoletta di legno per portarla in cima al cubo, dove sbucano i filetti di ferro delle colonne e dei vari livelli. Prima pero' pratichiamo altri 8 piccoli fori sulla tavoletta per far passare i fili dei catodi. Poniamo la tavoletta in cima al cubo stando attenti a far corrispondere ogni foro della tavoletta con il filo di ogni colonna del cubo e con i vari filetti dei livelli. Utilizziamo i 4 pezzetti di legno di prima per distanziare la tavoletta di legno dall'ultimo livello dei led.
Tagliamo una basetta millefiori facendo 64 quadretti di 3x3 fori. Serviranno per fissare i terminali delle colonne e dei livelli alla tavoletta.

VEDI FIG. 10

Una volta preparati tutti i quadretti riempite con la colla a caldo un foro della tavoletta per volta inserendo subito dopo ogni quadretto al proprio posto: dovete far passare il filo della colonna interessata all'interno del foro centrale del quadretto. Quando la colla sara' fredda il filo non si muovera' piu'.
NB: 8 di questi quadretti dovranno ospitare sia un catodo di un livello, sia un anodo di una colonna.
Una volta che avete fissato tutti i 64 quadretti saldate tutti i fili alla basetta millefiori e tagliate con la tronchesina il filo in eccesso. In questo modo sara' molto facile saldare i vari fili di collegamento ad ogni anodo e catodo.

VEDI FIG. 11.1, 11.2 e 11.3

A questo punto abbiamo quasi terminato la costruzione del nostro cubo, manca solo da saldare i vari fili di collegamento ad ogni terminale del cubo, ma rimandiamo questa operazione a dopo in quanto dobbiamo prima definire la posizione dei vari pin sul circuito di comando.

Step 3: Costruiamo Il Circuito Di Comando (prima Parte)

Cenni teorici:
Il circuito di comando fondamentalmente e' composto da:
- 8 shift register da 8 bit (tot. 64 bit) che attivano/disattivano ogni singola colonna del cubo
- 1 shift register collegato a 8 transistor NPN per attivare/disattivare ogni singolo livello.
- 2 connettori da 40 e 34 pin per il collegamento con il cubo
- 1 connettore da 12 pin per il collegamento con la porta parallela

Perche' colleghiamo gli 8 transistor NPN allo shift register dei livelli? Come sappiamo i led di ogni livello hanno il catodo (-) in comune quindi per abilitarli dobbiamo collegarvi il segnale di massa. Il problema e' che lo shift register dei livelli ha come output un segnale a livello alto (livello logico 1, equivale a Vcc) in ogni pin attivato. C'e' bisogno di un componente che, dato un segnale a livello logico 1, abiliti il passaggio della corrente di massa. Questo componente e' il transistor. Esso si comporta come un interruttore: se il piedino della base viene posto a livello logico 1 i piedini del collettore e dell'emettitore vengono collegati insieme.

Strumenti necessari:
- Saldatore
- Stagno
- Tronchesine

Materiali necessari:
- 9 shift register da 8 bit (i miei sono i 74HC164B)
- 9 zoccoletti per gli shift register
- 8 transistor NPN (i miei sono i 2N3904)
- 70 resistenze da 100 ohm
- 8 resistenze da 1500 ohm
- 1 basetta millefori
- 2 connettori da 40 e 34 pin per il collegamento con il cubo
- 1 connettore da 12 pin per il collegamento con la porta parallela
- 3 connettori da 2 pin per il collegamento dell'interruttore di accensione, del led di accensione e del cavo di alimentazione
- 1 led rosso/verde (led di accensione)
- 1 interruttore (interruttore di accensione)
- 1 connettore maschio per alimentatori
- 3 cavetti a 2 poli con connettore alla fine (come quelli usati nei pc per collegare i led sul pannello frontale alla mother board)
- Filo elettrico adatto alle saldature (fine e malleabile ma allo stesso tempo resistente)

Una volta che siete riusciti a procurarvi tutti i componenti sopra elencati potete cominciare con la costruzione del circuito di controllo. Usate lo schema che trovate tra le immagini.

VEDI IMG DA 20.00 a 20.14

Innanzi tutto cominciate a posizionare i componenti a vostro piacimento sopra la basetta (oppure utilizzate la stessa disposizione che ho scelto io), tanto per rendervi conto del loro ingombro effettivo. Una volta che avrete trovato la posizione finale di ogni singolo componente vi consiglio di disegnarvi attorno dei rettangoli con una matita per delinearne l'ingombro effettivo: cosi', anche quando andrete a riposizionarli via via che saldate, saprete con certezza dove deve stare. Infatti non potete tenere i componenti sulla basetta mentre saldate perche' dovrete capovolgerla per effettuare le saldature.

Vi consiglio di saldare i componenti in questa successione:
1. Zoccoletti per gli shift register
2. Resistenze da 100 ohm e 1,5 Kohm
3. Transistor
4. Connettori

A questo punto armatevi di mooooooolta pazienza ed effettuate i collegamenti tra i vari componenti principali. In un secondo tempo collegate ogni resistenza/transistor ai connettori per il collegamento al cubo. Segnate su di un foglio tutte le corrispondenze USCITE SHIFT REGISTER-->PIN CONNETTORI, saranno indispensabili quando andremo a saldare i vari fili di collegamento ad ogni terminale del cubo.

Ci sono varie accortezze che potete seguire:
- Lungo 3/4 del perimetro della basetta fate una pista continua a cui collegherete il segnale di massa: fa sempre comodo avere una massa a portata di mano.
- Per i collegamenti tra 2 o piu' punti adiacenti non utilizzate il cavo, unite direttamente con lo stagno i punti in questione
- Non insistete troppo con il saldatore sopra un singolo foro della basetta, la piazzola in rame potrebbe staccarsi

Step 4: Costruiamo Il Circuito Di Comando (seconda Parte)

Connessione dei fili al cubo:
mettiamo per ora da parte il circuito di controllo e torniamo al cubo. Prendete i cavi flat da 40 e 34 pin e tagliateli togliendo il connettore da una lato.
Separiamo per circa 10 cm i fili dalla parte dove abbiamo tagliato il connettore e speliamo ogni singolo filo. Quest'ultimi andranno collegati ai vari connettori dei catodi e anodi del cubo secondo lo schema che abbiamo segnato durante la costruzione del circuito di controllo. Ogni pin di uscita di uno shift register dovra' essere collegato ad un intera fila di connettori seguendo l'ordine dei piedini (quindi NON a caso). In questo modo il primo shift register controllera' la prima fila, il secondo controllera' la seconda e cosi' via.
NB: dei 74 pin disponibili (40 + 34) a noi ne servono solo 72 (64 per le colonne, 8 per i livelli), 2 resteranno non collegati.

VEDI IMG DA 25.01 A 25.04

Costruzione del cavo di collegamento con la porta parallela:
Nel mio caso sono riuscito a trovare un cavo di una vecchia mother board di un 486. Le mother board molto datate non hanno mai la porta parallela integrata, essa e' collegata tramite un cavo flat a dei pin della mother board.
Se non avete modo di recuperare un cavo e volete costruirvelo da solo questo e' lo schema dei pin della porta parallela:

VEDI IMG DA 30.01 A 30.03

Dovrete utilizzare i pin da D0 a D5 collegandoli in questo modo:
D0 --> input shift register colonne
D1 --> clear shift register colonne
D2 --> clock shift register colonne
D3 --> input shift register livelli
D4 --> clear shift register livelli
D5 --> clock shift register livelli

ATTENZIONE: se i pin non verranno collegati come descritto qui sopra il software di controllo non funzionera'.

Costruzione dei cavi per l'interruttore di accensione, led di accensione e cavo di alimentazione:
Per tutti e 3 i cavetti dovete semplicemente saldare i vari componenti ai fili.

Step 5: Costruiamo La Base Del Cubo

La base e' necessaria per nascondere e proteggere il circuito di controllo e per posizionare in modo stabile tutti i cavi di collegamento con il pc e con il cubo.

Strumenti necessari:
- Cacciaviti (o martello)
- Colla Vinavil
- Mini dremel
- Bomboletta spray di colore nero
- Spatola per stucco
- Stucco per legno
- Carta vetrata fine

Materiali necessari:
- 1 tavoletta di legno compensato 20x20 cm da 8 mm di spessore
- 2 tavoletta di legno compensato 20x6,8 cm da 8 mm di spessore (per i lati della base)
- 2 tavoletta di legno compensato 21,6x7,6 cm da 8 mm di spessore (per gli altri due lati della base)
- circa 25 viti da legno (o dei chiodini)

Avviciniamo tutte le tavolette come per formare una scatola (vedi foto) e prepariamoci ad unirle. Prima di inserire le viti applichiamo della colla vinavil tra un pezzo e l'altro, in questo modo, una volta seccata la colla potremo rimuovere le viti senza che la scatola si smonti. Il coperchio di questa scatola sara' il cubo che abbiamo costruito all'inizio. Al posto delle viti potete utilizzare dei piccoli chiodini, ma ricordatevi che dovrete levarli in seguito utilizzando una piccola tenaglia o delle pinzette.

Appena la colla e' asciutta leviamo tutte le viti (o i chiodini) e riempiamo i fori con dello stucco per legno, aiutandoci con la spatola per farlo penetrare bene.

Facciamo 4 aperture sul retro della base:
- 1 per la porta parallela
- 1 per il led di accensione
- 1 per il tasto di accensione
- 1 per l'alimentazione

Una volta modellati i fori passiamo della carta vetrata lungo tutte le parti esterne della base. In particolare insistiamo un po' di piu' sugli angoli, smussandoli. Non appena tutta la superficie esterna sara' liscia possiamo passare alla colorazione: con la bomboletta spray fate dei passaggi senza stare troppo vicini alla superficie da colorare. I passaggi devono essere rapidi e fluidi, altrimenti si formeranno delle gocce di vernice che comprometteranno la qualita' del vostro lavoro. In alternativa potete utilizzare anche della vernice da dare con il pennello, forse sara' piu' facile.
Quando la scatola sara' terminata potete fissare i vari cavi di collegamento e appoggiare il circuito di comando sul fondo della scatola, avendo l'accortezza di porvi sotto un materiale morbido come la gommapiuma o del pluriball, tanto per prevenire eventuali danneggiamenti. Collegate i cavi agli appositi connettori sul circuito di comando e ponete il cubo di led sopra la scatola, utilizzandolo come fosse un coperchio. Collegate i cavi provenienti dal cubo al circuito di comando.

Adesso potete collegare il vostro cubo all'alimentatore e al pc. Usate il programma di controllo per creare le vostre animazioni. Buon divertimento!

Step 6: Il Software

Il software di controllo e' scritto in linguaggio Visual Basic. Il codice e' da inserire in un modulo nel vostro progetto visual basic. E' inoltre necessario inserire anche la libreria inpout32.dll (potete reperirla cercando il nome del file su google oppure scaricando il file PROGRAMMI.ZIP allegato qui sotto) nella cartella c:\windows\system32 del vostro pc.
Potete trovare qualche spiegazione (in inglese) sul funzionamento della porta parallela qui: http://logix4u.net/Legacy_Ports/Parallel_Port.html

In ogni momento lo stato del cubo e' memorizzato nella matrice StatoCubo, tramite un timer si genera un evento ogni pochi ms che si preoccupa di accendere ogni led secondo lo stato memorizzato nella matrice.
NOTA BENE: questo modulo si occupa di visualizzare sul cubo il contenuto della matrice StatoCubo. DOVETE GESTIRE DA SOLI I VARI CAMBIAMENTI DEI VALORI DELLA MATRICE!!!

Se volete qualcosa gia' pronto nel file PROGRAMMI.ZIP allegato qua sotto trovate i programmi che praticamente fanno tuttto:'
Gestione led cube 0.5.3 --> gestione manuale e tramite timeline del cubo
level meter con monoton --> riproduttore MP3 freeware con controllo led cube (equalizzazione del segnale)
inpout32.dll --> libreria per la gestione della porta parallela (necessaria per il funzionamento dei programmi)

La matrice StatoCubo:
La matrice StatoCubo e' composta da 8 vettori ognuno di 64 elementi. Ogni vettore rappresenta lo stato di un intero livello, ogni elemento del vettore rappresenta lo stato di 1 singolo led: 1 = acceso, 0 = spento.

La funzione ScriviCubo:
Questa funzione viene richiamata ciclicamente tramite un timer e si occupa di trasmettere il contenuto della matrice StatoCubo al cubo vero e proprio.

La funzione ClokkaLed:
Questa funzione viene richiamata dalla funzione ScriviCubo e si occupa di dare un colpo di clock agli shift register delle colonne modificando SOLAMENTE il bit del clock. In questo modo il bit posto all'ingresso del primo shift register delle colonne viene acquisito.

La funzione ClokkaLivello:
Questa funzione viene richiamata dalla funzione ScriviCubo e si occupa di dare un colpo di clock allo shift register dei livelli modificando SOLAMENTE il bit del clock. Se il livello da attivare e' il primo, viene posto un 1 all'ingresso dello shift register. Per i successivi livelli il bit in ingresso sara' 0, verra' solamente dato un colpo di clock per far scorrere il bit del primo livello in avanti. Cosi' i livelli si accenderanno in sequenza, uno alla volta.

La funzione ClearAll:
Utilizzando questa funzione viene attivato il piedino clear su entrambi gli shift register. Tutti i bit contenuti negli shift register saranno posti a 0, di conseguenza il cubo risultera' totalmente spento.

La funzione Aspetta:
Questa e' la funzione utilizzata per ritardare il ciclo di aggiornamento dei vari livelli. Senza questa i led dei vari livelli si accenderebbero e si spegnerebbero troppo velocemente non riuscendo ad illuminarsi correttamente.

Passiamo al codice vero e proprio, in grassetto i commenti:

'------------------RICHIAMO ALLA LIBRERIA PER LA GESTIONE DELLA PORTA LPT-------------------
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

'--------------------------COSTANTI PER GLI INDIRIZZI DELLA PORTA LPT1--------------------------------
Public Const IndirizzoData As String = "&H378" 'REGISTRO DATA: 8 bit

'-------------------------------------------------------VARIABILI GLOBALI----------------------------------------------------
Public StatoCubo(1 To 8, 1 To 64) As Integer 'variabile che contiene lo stato attuale di TUTTO il cubo

'-------------------------------------------------------------FUNZIONI--------------------------------------------------------
Public Function ScriviCubo(NumeroCicli As Integer) 'funzione per scrivere sul cubo lo stato memorizzato nella matrice StatoCubo
Dim ByteLpt As Byte
Dim ContaLivelli As Integer
Dim ContaLed As Integer
Dim ContaCicli As Integer

For ContaCicli = 1 To NumeroCicli 'ciclo per mantenere inalterato lo stato da rappresentare per X cicli

For ContaLivelli = 1 To 8 'scorro tutti i livelli impostandoli completamente uno alla volta

'imposto tutti i bit dello shift reg. delle colonne senza clokkare sullo shift reg. dei livelli e disattivando SEMPRE entrambi i clear (xx 01x _1_)
For ContaLed = 64 To 1 Step -1 'For ContaLed = 1 To 64
'SHIFT REG. LIVELLI:
'MSB (D5) = 0 --> clock disattivato
'CENTRALE (D4) = 1 (valore=16)--> clear disattivato
'LSB (D3) = indifferente

'SHIFT REG. LED:
'MSB (D2) = 0 --> clock disattivato
'CENTRALE (D1) = 1 (valore=2)--> clear disattivato
'LSB (D0) = StatoCubo(ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo(ContaLivelli, ContaLed))
Call ClokkaLed(ByteLpt) 'passo il valore alla funzione che da' un colpo di clock allo shift reg. delle colonne
Next ContaLed

'SHIFT REG. LIVELLI:
'MSB (D5) = 0 --> clock disattivato
'CENTRALE (D4) = 1 (valore=16)--> clear disattivato
'LSB (D3) = (se livello = 1--> 1(valore=8); se livello <> 1--> 0) --> metto 1 solo la prima volta

'SHIFT REG. LED:
'MSB (D2) = 0 --> clock disattivato
'CENTRALE (D1) = 1 (valore=2)--> clear disattivato
'LSB (D0) = indifferente

If ContaLivelli = 1 Then 'se sto' impostando il primo livello invio un 1 all'interno dello shift reg. dei livelli, in seguito inviero' soltanto il segnale di clock cosi' l'1 scorrera' fino in fondo attivando un livello alla volta
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Else
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Call ClokkaLivello(ByteLpt) 'passo il valore alla funzione che da' un colpo di clock allo shift reg. dei livelli

Call Aspetta(60000) 'richiamo la funzione per generare un ritardo (il cubo smette di lampeggiare dai 60000 ai 70000 cicli)

Next ContaLivelli 'ricomincio il ciclo andando ad impostare il livello successivo

Call ClearAll 'richiamo la funzione per attivare il clear su entrambi gli shift register (spengo tutti i led del cubo)

Next ContaCicli

End Function

Public Function ClokkaLed(Valore As Byte) 'da' un colpo di clock agli shift reg. delle colonne (modifica SOLAMENTE il bit del clock)
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 4 perche' devo mettere ad 1 il bit del clock degli shift reg. delle colonne x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 4) 'clock ATTIVATO
End Function

Public Function ClokkaLivello(Valore As Byte) 'da' un colpo di clock allo shift reg. dei livelli (modifica SOLAMENTE il bit del clock)
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 32 perche' devo mettere ad 1 il bit del clock dello shift reg. dei livelli x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 32) 'clock ATTIVATO
End Function

Public Function ClearAll() 'funzione per attivare il clear su entrambi gli shift register (spengo tutti i led del cubo)
Dim ByteLpt As Byte
'attivo il clear su entrambi gli shift register (valore=0) cosi' li azzero (xx x0x x0x)
ByteLpt = 0 '00 000 000
Out Val(IndirizzoData), Val(ByteLpt)
End Function

Public Function Aspetta(Ncicli As Long) 'funzione per ritardare il ciclo di aggiornamento dei livelli
Dim Contatore As Long
Dim Contato As Long

For Contatore = 0 To Ncicli
Contato = Contatore 'operazione di assegnamento ad una variabile (cosi' la CPU fa un operazione)
Next Contatore
End Function

Step 7: Il Risultato Finale

Ecco i video fatti durante le numerose prove di test: