hjälp: Datorkontrollerat ljus
hjälp: Datorkontrollerat ljus
Hej.
Jag vill bygga en matris med lampor eller LEDs som jag kan koppla till någon port på datorn (usb eller typ skrivarporten).
Lamporna måste gå att kontrollera individuellt, de kan alltså inte vara seriekopplade.
Sen ska det ju gärna vara en del lampor också, typ 5x10 eller så.
Tanken är att jag sedan ska skriva ett program i C, eller C++ som sedan kontrollerar matrisen. Programmeringen har jag inga problem med då jag är ganska skicklig programmerare, det är byggandet av matrisen som är problemet.
Någon som kan hjälpa mig med detta?
Jag vill bygga en matris med lampor eller LEDs som jag kan koppla till någon port på datorn (usb eller typ skrivarporten).
Lamporna måste gå att kontrollera individuellt, de kan alltså inte vara seriekopplade.
Sen ska det ju gärna vara en del lampor också, typ 5x10 eller så.
Tanken är att jag sedan ska skriva ett program i C, eller C++ som sedan kontrollerar matrisen. Programmeringen har jag inga problem med då jag är ganska skicklig programmerare, det är byggandet av matrisen som är problemet.
Någon som kan hjälpa mig med detta?
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Jag gjorde just det här schemat till en liknande grejj:

Det fungerar fint även för lampor.
Vill man tända LED18 så kopplar man in spänning på COL_3 och kopplar RAD_4 till GND.
edit:
Tyvärr finns det inte så många utgångar som behövs på parallellporten (som har flest utgångar), men det finns andra sätt att lösa det. En variant är att koppla en A/D-omvandlare till serie-porten och koppla någon form av drivning (t.ex en transistor) mellan matris-kopplingen och A/D-omvandlaren.
edit 2: Råkade byta plats på RAD_4 och COL_3 i texten ovan.

Det fungerar fint även för lampor.
Vill man tända LED18 så kopplar man in spänning på COL_3 och kopplar RAD_4 till GND.
edit:
Tyvärr finns det inte så många utgångar som behövs på parallellporten (som har flest utgångar), men det finns andra sätt att lösa det. En variant är att koppla en A/D-omvandlare till serie-porten och koppla någon form av drivning (t.ex en transistor) mellan matris-kopplingen och A/D-omvandlaren.
edit 2: Råkade byta plats på RAD_4 och COL_3 i texten ovan.
Senast redigerad av JimmyAndersson 2 december 2007, 21:29:31, redigerad totalt 1 gång.
- MadModder
- Co Admin
- Inlägg: 31559
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Vill man verkligen styra varje lampa individuellt utan att scanna genom en matris, fixar man det enkelt med lite latchar.
Först de 8 bitarna i parallellporten, och så har man 4 styrsignaler utöver det. 3 av dessa 4 bitar till en 3-till-8-linje demultiplexer, och den fjärde som klocka. Så har jag till ett styrkort i en 486:a, och jag får då 64 individuella bitar.
finns i det här schemat. De intressanta delarna är U2, U3 och U4. De utgör själva styrningen. U2 och U3 är bara buffrar för att avlasta parallellporten. Sen på varje "kanal" måste man ha U1 i det här schemat. Blir ganska många kretsar...
Funkar som så att först sätter man de 8 databitarna, sen väljer man kanal med de 3 styrbitarna, och sen klockar man ut detta med den fjärde biten. Sen är de bitarna så tills nästa gång man väljer att ändra.
Först de 8 bitarna i parallellporten, och så har man 4 styrsignaler utöver det. 3 av dessa 4 bitar till en 3-till-8-linje demultiplexer, och den fjärde som klocka. Så har jag till ett styrkort i en 486:a, och jag får då 64 individuella bitar.

finns i det här schemat. De intressanta delarna är U2, U3 och U4. De utgör själva styrningen. U2 och U3 är bara buffrar för att avlasta parallellporten. Sen på varje "kanal" måste man ha U1 i det här schemat. Blir ganska många kretsar...
Funkar som så att först sätter man de 8 databitarna, sen väljer man kanal med de 3 styrbitarna, och sen klockar man ut detta med den fjärde biten. Sen är de bitarna så tills nästa gång man väljer att ändra.

- MadModder
- Co Admin
- Inlägg: 31559
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Så blir det när man inte ska ha nån PIC eller så inblandad. Då blir det många IC-krestar. Riktiga män gör det med logik... 
Alltså, de 8 databitarna (pin 2-9) är parallellkopplade till alla åtta 74374.
Tre bitar styr en 74238. De 8 utbitarna från den går till varsin 74374. Man kan då med tre bitar styra vilken 74374 man vill ändra bitarna på.
Den sista biten från porten är kopplad till aktiveringsingången på 74238.
När man ställt databitarna och valt krets, klockar man sista biten, och en klockpuls styrs ut till rätt krets, som då latchar in databitarna på sina utgångar och låser dem där. Tadaa! Ett 64bits minne...

Alltså, de 8 databitarna (pin 2-9) är parallellkopplade till alla åtta 74374.
Tre bitar styr en 74238. De 8 utbitarna från den går till varsin 74374. Man kan då med tre bitar styra vilken 74374 man vill ändra bitarna på.
Den sista biten från porten är kopplad till aktiveringsingången på 74238.
När man ställt databitarna och valt krets, klockar man sista biten, och en klockpuls styrs ut till rätt krets, som då latchar in databitarna på sina utgångar och låser dem där. Tadaa! Ett 64bits minne...
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Borde jag inte kunna programmera någon krets som kör ett test, och sen skickar ström på något sätt som tänder rätt lampa?
Tänkte att man kör med binärkod för att styra lamporna då.
har jag 8 portar (skrivarkabel) jag kan skicka ström från på datorn så kan jag ha en otrolig massa lampor.
00000001 = 1, lampa nr1
00000011 = 3, lampa nr3
10000001 = 65, lampa nr65
11111111 = 64+32+16+8+4+2+1 = 127, lampa nr127
1=ström på
0=ström av
if(port1 == true)
{
//tänd lampa 1
}
if(port1 == true && port2 == true)
{
//tänd lampa 3
}
if(port1 == true && port2 == true && port3 == true /.../ && port8 == true)
{
//tänd lampa 127
}
Tänkte att man kör med binärkod för att styra lamporna då.
har jag 8 portar (skrivarkabel) jag kan skicka ström från på datorn så kan jag ha en otrolig massa lampor.
00000001 = 1, lampa nr1
00000011 = 3, lampa nr3
10000001 = 65, lampa nr65
11111111 = 64+32+16+8+4+2+1 = 127, lampa nr127
1=ström på
0=ström av
if(port1 == true)
{
//tänd lampa 1
}
if(port1 == true && port2 == true)
{
//tänd lampa 3
}
if(port1 == true && port2 == true && port3 == true /.../ && port8 == true)
{
//tänd lampa 127
}
- MadModder
- Co Admin
- Inlägg: 31559
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Då kan du bara ha en enda lampa åt gången tänd. Du måste ha någon krets som håller kvar biten också, och du måste ha en klocksignal som talar om NÄR det är dags att ändra. Och förresten blir det 255 med 8 ettor. 
Vet ingen krets som har så många utgångar. Du måste använda latchar som minneskretsar om du ska ha så många lampor. Om du inte ska scanna genom en matris då.
Du har 12 bitar att tillgå som utgångar i parallellporten...

Vet ingen krets som har så många utgångar. Du måste använda latchar som minneskretsar om du ska ha så många lampor. Om du inte ska scanna genom en matris då.
Du har 12 bitar att tillgå som utgångar i parallellporten...
Det finns något liknande som använder ett plugin till winamp...
http://discolitez.com/
Titta under hardware -> deluxe för schema
http://discolitez.com/
Titta under hardware -> deluxe för schema
- MadModder
- Co Admin
- Inlägg: 31559
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Ja, discolitez. funkar ungefär så som jag förklarade med latchar.
http://discolitez.com/pmwiki/pmwiki.php ... e.Deluxe32
http://discolitez.com/pmwiki/pmwiki.php ... e.Deluxe32
ja, så sant så.. glömde den första ettan på 128.MadModder skrev:Och förresten blir det 255 med 8 ettor.![]()
Men, då kan jag göra som JimmyAndersson skrev, jag kan ha 12 kolumer bara jag har jordat alla raderna, eller hur?MadModder skrev:Du har 12 bitar att tillgå som utgångar i parallellporten...
edit: det går ju inte kom jag på, eftersom jag då skulle tända en hel rad då jag inte kan styra 12 jordningar på parallellporten.
men, 7*7 borde fungera.
edit2:
eller 12*7
-
- Inlägg: 8461
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Använd en MAX7221, då får du tre pinnar mot PC´n och möjlighet till 64 lysdioder. Ytterligare 64 lysdioder kräver bara ytterligare en pinne mot PC´n osv. så på bara de 8 databitarna på en parallellport får man 384 lysdioder maximalt.
EDIT: Använd en MAX7219 och kaskadkoppla alla kretsarna (DOUT till DIN på nästa SCLK och LOAD till alla). Och med en kollektiv LOAD-signal så klara du dig på 3 pinnar mot PC´n och har inga begränsningar i antalet lysdioder.
EDIT: Använd en MAX7219 och kaskadkoppla alla kretsarna (DOUT till DIN på nästa SCLK och LOAD till alla). Och med en kollektiv LOAD-signal så klara du dig på 3 pinnar mot PC´n och har inga begränsningar i antalet lysdioder.