[HOWTO] LED kubus 5*5*5 met 74HC595



Hoe werkt de kubus?
Alle 125 leds staan in een matrix. Dat wil zeggen dat in mijn geval 5 leds allemaal een min delen. In deze afbeelding is het nog wat duidelijker te zien:

Om een ledje aan te krijgen moet je dus een negatieve spanning op de verticale pin zetten. En een positieve spanning op de verdieping waar het ledje zich bevindt.
Hoe maak je een ledkubus?

Eerst hang je 5 leds aan elkaar met de min. Dit wordt een verticale rij. Zoals je ziet heb ik de plus pootjes van elke led in een hoek van 90 graden gebogen. Dit doe je 5 keer zodat je 5 rijen hebt. Van die 5 rijen hang je alle plus pinnen aan elkaar. Niet allemaal aan elkaar natuurlijk maar per 5. Dan heb je dit:
Om nu bijvoorbeeld het middelste ledje aan te zetten moet ik dus plus 2,1 volt op de middelste van de 5 min pinnen. En op de middelste van de 5 plus pinnen. Nu heb ik een verticaal vlak af. Als je 5 van deze vlakken hebt dan verbind je weer alle plus pinnen van dezelfde hoogte met mekaar. Je hebt dan een mooie kubus:
Zoals je ziet is die van mij een beetje scheef maar dit is ook maar een tijdelijk plankje waar hij op staat. Nu de aansturing helemaal af is ga ik straks een behuizing maken van plexiglas. Wat je nu bereikt hebt is dat je dus 25 min pinnen hebt(de verticale) en 5 positieve pinnen(de horizontale). Nu kan je werkelijk elk ledje aansturen maakt niet uit welke.
Hoe stuur je de kubus aan?
Om de kubus aan te sturen heb ik gekozen voor een pic. En de wel de 16F628a. Dit is een veelgebruikte pic en daardoor staan er mooi veel voorbeelden van op internet.
Nu het probleem een pic heeft maar 16 uitgangen. En ik heb 30 uitgangen(25+5) die ik aan wil sturen. Daarvoor heb ik een schuifregister gebruikt. En dan wel de 74HC595. Deze is erg makkelijk aan te sturen als je door hebt hoe het eenmaal werkt. Hier heb ik gelukkig wat hulp bij gehad van forumleden van CO.
De 74HC595 stuur je als volgt aan:
Eerst zet je een bitje(0 of 1) klaar op de DATA-pin (14)
Dit bitje klok je in door de CLOCK-pin hoog te maken.
Nu is de eerste bit ingeklokt. Dit verhaaltje doen we 8 keer. De 74HC595 is namelijk een 8 bits schuifregister. Vergeet niet de CLOCK-pin weer laag te maken na elk bitje wat je ingeklokt hebt. In ASM ziet dit er als volgt uit:
Dit kan je dan netjes in een subroutine zetten en zie ziet er dan zo uit:
Omdat ik 4 schuifregisters aan wil sturen. Heb ik dus voor elk schuifregister een subroutine gemaakt. Drie schuifregisters voor de 24 “min-pinnen” en één schuifregister voor de 5 verdiepingen. De latch van de eerste drie schuifregisters zitten dan ook op dezelfde pin van de pic(zie schema). De latch van het laatste schuifregister zit op een andere pin dit omdat je dan makkelijker meer effecten in de pic kan programmeren. Iedereen die zich nu afvraagt waarom ik maar 24 min pinnen aanstuur heeft gelijk dat het erg onhandig is. Dat is namelijk een denk foutje van mij. Elk schuifregister heeft maar 8 uitgangen. Ik gebruik er 3 voor de min pinnen dus heb ik 24 “min-pinnen” die ik aan kan sturen. De 25ste heb ik direct op de pic aangesloten als “ledx”. Deze verticale rij moet ik elke keer dus opnieuw aan/uit zetten. Misschien niet erg handig maar dat is een idee voor de volgende versie
Wie overigens het hele programma wil hebben en neit alleen de subroutine mag mij mailen. Mailadres staat in profiel
Dan volgt hier het schema:

grotere versie: http://i4.photobucket.com/albums/y149/skimmerbas/schema.jpg
let op in dit schema staat het (nog) niet maar ik gebruik een kristal van 20mhz in plaats van de interne 4mhz
Zoals je ziet niet erg ingewikkeld. Nadeel is wel dat je 25 transistoren en dus ook 25 basisweerstanden en dan 25 weerstanden voor de leds moet solderen. Erg veel werk dus. Voor de volgende keer gebruik ik daar misschien een ic voor waar al 8 transistoren inzitten. Dit bespaard erg veel soldeerwerk. En zo ziet het er dan uit op gaatjesprint:

Links zie je de 25 draden die naar de onderkant van de ledkubus lopen. Bovenaan zie je de 5 draden die naar de “verdiepingen” van de led kubus lopen. Even voor de lol ook een fototje van de onderkant:

grotere versie: http://i4.photobucket.com...9/skimmerbas/100_1773.jpg
Zoals je ziet erg veel soldeerwerk. Daarom ook een tip: Gebruik voor ieder schuifregister een andere kleur draad! Dit maakt fouten zoeken later een stuk makkelijker
Gebruikte materialen
Pic 16F628a €1,75
4 keer de 74HC595 €1,-
25 stuks BC547C(npn) €1,-
61 weerstanden €2,-
5 stuks BC327(pnp) €0,50
Een ontstoorcondensator van 100n voor de pic €0,05
125 leds €2,50
kristal €0,50
condensator 22pf 2 keer €0,10
verzendkosten webshops totaal €4,-
in totaal heeft het mij dus ongeveer 13 euro gekost. Houd er rekening mee dat ik gewone 3mm groene(diffuse) leds heb gebruikt. Als je blauwe leds wil gaan gebruiken wordt het natuurlijk duurder. Verder komt de pic vanuit China. De meesten kennen die SK acties wel.
http://www.samenkopen.net/action_products/187349
IC’s en transistoren komen bij dickbest vandaan
www.dickbest.nl
Hij is erg goedkoop behalve op weerstanden. Maar die had ik toch nog liggen.
ledkeuze
Bij deze ledkubus heb ik gekozen voor standaard 3mm groene leds. Nadeel van deze leds is dat ze bij 5ma al branden. En dit is een groot nadeel. Als je leds hebt die op dat punt kritischer zijn kan je het effect veel mooier krijgen. Stel voor je wil in een verticaal vlak de leds om en om aanzetten. Dan komt het er zo uit te zien:

Dit is een beetje overdreven maar is simpel te voorkomen door andere leds te nemen.dit is alweer achterhaald door een kristal van 20mhz te nemen in plaats van de interne 4mhz te gebruiken is dit effect grotendeels verholpen
Foto’s




Dit zijn nog maar wat simpele effecten maar in princiepe is elk denkbaar effect mogelijk.
Links
Datasheet van de pic:
http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf
Datasheet 74hc595
http://www.alldatasheet.c...5644/PHILIPS/74HC595.html
Voor en Nadelen van deze schakeling
Zoals ik eerder al zei het is irritant dat je niet alle leds met de 3 schuifregisters aan kan sturen. En die 25 transistoren hadden ook vervangen kunnen worden door bepaalde IC’s. Verder heb ik 3mm leds gebruikt. Op zich geen probleem maar ik heb nu wel een erg kleine kubus. Daarom bouw ik misschien ooit nog wel een keer een grotere. Als je een grotere wil bouwen dan kan je het best een oneven aantal nemen. Denk aan 7*7*7 of 9*9*9. Zodat je bijvoorbeeld ook een mooi rondje kan maken of een effect vanuit het midden kan laten beginnen.
einde
Zo dat was een heel erg lang verhaal. En tevens mijn eerste post op Tweakers.net(klees al wel een hele tijd mee) Als er behoefte aan is schrijf ik mischien ook nog wel een keertje een How to voor een propellorklok
Wat vinden jullie van deze How to? Te uitgebreid of is dat juist goed? En hoe krijg ik mijn "koppen" groter? Kom maar op met de reacties



Hoe werkt de kubus?
Alle 125 leds staan in een matrix. Dat wil zeggen dat in mijn geval 5 leds allemaal een min delen. In deze afbeelding is het nog wat duidelijker te zien:

Om een ledje aan te krijgen moet je dus een negatieve spanning op de verticale pin zetten. En een positieve spanning op de verdieping waar het ledje zich bevindt.
Hoe maak je een ledkubus?

Eerst hang je 5 leds aan elkaar met de min. Dit wordt een verticale rij. Zoals je ziet heb ik de plus pootjes van elke led in een hoek van 90 graden gebogen. Dit doe je 5 keer zodat je 5 rijen hebt. Van die 5 rijen hang je alle plus pinnen aan elkaar. Niet allemaal aan elkaar natuurlijk maar per 5. Dan heb je dit:

Om nu bijvoorbeeld het middelste ledje aan te zetten moet ik dus plus 2,1 volt op de middelste van de 5 min pinnen. En op de middelste van de 5 plus pinnen. Nu heb ik een verticaal vlak af. Als je 5 van deze vlakken hebt dan verbind je weer alle plus pinnen van dezelfde hoogte met mekaar. Je hebt dan een mooie kubus:

Zoals je ziet is die van mij een beetje scheef maar dit is ook maar een tijdelijk plankje waar hij op staat. Nu de aansturing helemaal af is ga ik straks een behuizing maken van plexiglas. Wat je nu bereikt hebt is dat je dus 25 min pinnen hebt(de verticale) en 5 positieve pinnen(de horizontale). Nu kan je werkelijk elk ledje aansturen maakt niet uit welke.
Hoe stuur je de kubus aan?
Om de kubus aan te sturen heb ik gekozen voor een pic. En de wel de 16F628a. Dit is een veelgebruikte pic en daardoor staan er mooi veel voorbeelden van op internet.
Nu het probleem een pic heeft maar 16 uitgangen. En ik heb 30 uitgangen(25+5) die ik aan wil sturen. Daarvoor heb ik een schuifregister gebruikt. En dan wel de 74HC595. Deze is erg makkelijk aan te sturen als je door hebt hoe het eenmaal werkt. Hier heb ik gelukkig wat hulp bij gehad van forumleden van CO.
De 74HC595 stuur je als volgt aan:
Eerst zet je een bitje(0 of 1) klaar op de DATA-pin (14)
Dit bitje klok je in door de CLOCK-pin hoog te maken.
Nu is de eerste bit ingeklokt. Dit verhaaltje doen we 8 keer. De 74HC595 is namelijk een 8 bits schuifregister. Vergeet niet de CLOCK-pin weer laag te maken na elk bitje wat je ingeklokt hebt. In ASM ziet dit er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| ;schuifregister1 vullen bcf data1 call klok1 bsf data1 call klok1 bcf data1 call klok1 bsf data1 call klok1 bcf data1 call klok1 bsf data1 call klok1 bcf data1 call klok1 bsf data1 call klok1 call latch klok1 bsf klokingang1 ;CLOCK pin hoog nop bcf klokingang1 return latch bsf latch1 ;latch is hoog dus resultaat zou te zien moeten zijn call delay_300ms ; hier heb ik een vertraging gebruikt maar een nop bcf latch1 ;werkt ook goed return |
Dit kan je dan netjes in een subroutine zetten en zie ziet er dan zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| main movlw b'00001000' call schuifregister1 ;------------------------------------------------------------- schuifregister1 movwf Var1 ; zet de waarde vanuit w in Var1. dit is het getal wat geklokt moet worden movlw D'8' ;zet de waarde 8 in het werkregister movwf bits1 ;sla de waarde 8 uit w op in bits1 dis is het aantal bits wat ingeklokt moet worden loop1 rlf Var1,1 ;rotate left trough carry en sla het resultaat op in Var1. Eerste bit zit nu in de carry btfss STATUS, C ; lees de carry uit. Is carry= 1? bcf data1 ;zo nee, zet de datalijn naar 0 btfsc STATUS, C ; is carry 0? bsf data1 ;zo nee data is 1 bsf klok1 nop bcf klok1 ;bitje is nu ingeklokt decfsz bits1,f ;verlaag bits1 met één totdat die nul is goto loop1 ; is bits1 0? dan "return" zo nee ga naar loop1 return |
Omdat ik 4 schuifregisters aan wil sturen. Heb ik dus voor elk schuifregister een subroutine gemaakt. Drie schuifregisters voor de 24 “min-pinnen” en één schuifregister voor de 5 verdiepingen. De latch van de eerste drie schuifregisters zitten dan ook op dezelfde pin van de pic(zie schema). De latch van het laatste schuifregister zit op een andere pin dit omdat je dan makkelijker meer effecten in de pic kan programmeren. Iedereen die zich nu afvraagt waarom ik maar 24 min pinnen aanstuur heeft gelijk dat het erg onhandig is. Dat is namelijk een denk foutje van mij. Elk schuifregister heeft maar 8 uitgangen. Ik gebruik er 3 voor de min pinnen dus heb ik 24 “min-pinnen” die ik aan kan sturen. De 25ste heb ik direct op de pic aangesloten als “ledx”. Deze verticale rij moet ik elke keer dus opnieuw aan/uit zetten. Misschien niet erg handig maar dat is een idee voor de volgende versie
Wie overigens het hele programma wil hebben en neit alleen de subroutine mag mij mailen. Mailadres staat in profiel
Dan volgt hier het schema:

grotere versie: http://i4.photobucket.com/albums/y149/skimmerbas/schema.jpg
let op in dit schema staat het (nog) niet maar ik gebruik een kristal van 20mhz in plaats van de interne 4mhz
Zoals je ziet niet erg ingewikkeld. Nadeel is wel dat je 25 transistoren en dus ook 25 basisweerstanden en dan 25 weerstanden voor de leds moet solderen. Erg veel werk dus. Voor de volgende keer gebruik ik daar misschien een ic voor waar al 8 transistoren inzitten. Dit bespaard erg veel soldeerwerk. En zo ziet het er dan uit op gaatjesprint:

Links zie je de 25 draden die naar de onderkant van de ledkubus lopen. Bovenaan zie je de 5 draden die naar de “verdiepingen” van de led kubus lopen. Even voor de lol ook een fototje van de onderkant:

grotere versie: http://i4.photobucket.com...9/skimmerbas/100_1773.jpg
Zoals je ziet erg veel soldeerwerk. Daarom ook een tip: Gebruik voor ieder schuifregister een andere kleur draad! Dit maakt fouten zoeken later een stuk makkelijker
Gebruikte materialen
Pic 16F628a €1,75
4 keer de 74HC595 €1,-
25 stuks BC547C(npn) €1,-
61 weerstanden €2,-
5 stuks BC327(pnp) €0,50
Een ontstoorcondensator van 100n voor de pic €0,05
125 leds €2,50
kristal €0,50
condensator 22pf 2 keer €0,10
verzendkosten webshops totaal €4,-
in totaal heeft het mij dus ongeveer 13 euro gekost. Houd er rekening mee dat ik gewone 3mm groene(diffuse) leds heb gebruikt. Als je blauwe leds wil gaan gebruiken wordt het natuurlijk duurder. Verder komt de pic vanuit China. De meesten kennen die SK acties wel.
http://www.samenkopen.net/action_products/187349
IC’s en transistoren komen bij dickbest vandaan
www.dickbest.nl
Hij is erg goedkoop behalve op weerstanden. Maar die had ik toch nog liggen.
ledkeuze
Bij deze ledkubus heb ik gekozen voor standaard 3mm groene leds. Nadeel van deze leds is dat ze bij 5ma al branden. En dit is een groot nadeel. Als je leds hebt die op dat punt kritischer zijn kan je het effect veel mooier krijgen. Stel voor je wil in een verticaal vlak de leds om en om aanzetten. Dan komt het er zo uit te zien:

Dit is een beetje overdreven maar is simpel te voorkomen door andere leds te nemen.dit is alweer achterhaald door een kristal van 20mhz te nemen in plaats van de interne 4mhz te gebruiken is dit effect grotendeels verholpen
Foto’s




Dit zijn nog maar wat simpele effecten maar in princiepe is elk denkbaar effect mogelijk.
Links
Datasheet van de pic:
http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf
Datasheet 74hc595
http://www.alldatasheet.c...5644/PHILIPS/74HC595.html
Voor en Nadelen van deze schakeling
Zoals ik eerder al zei het is irritant dat je niet alle leds met de 3 schuifregisters aan kan sturen. En die 25 transistoren hadden ook vervangen kunnen worden door bepaalde IC’s. Verder heb ik 3mm leds gebruikt. Op zich geen probleem maar ik heb nu wel een erg kleine kubus. Daarom bouw ik misschien ooit nog wel een keer een grotere. Als je een grotere wil bouwen dan kan je het best een oneven aantal nemen. Denk aan 7*7*7 of 9*9*9. Zodat je bijvoorbeeld ook een mooi rondje kan maken of een effect vanuit het midden kan laten beginnen.
einde
Zo dat was een heel erg lang verhaal. En tevens mijn eerste post op Tweakers.net(klees al wel een hele tijd mee) Als er behoefte aan is schrijf ik mischien ook nog wel een keertje een How to voor een propellorklok
[ Voor 3% gewijzigd door bazzzzzz op 04-04-2007 15:36 ]