Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Spojení 8bitových demultiplexerů do velkého 64/128 bitového

Ahoj,
potřebuju sestavit z levných IO (třeba 74HCT138) demultiplexer (64-)32-16-8-4-2-1. Jde mi o to, že potřebuju ovládat ohromné množství LEDek (stovky až tisíce) několika vývody z mikročipu. Z praktických důvodů to chci udělat tak, že budu ovládat dvě souřadnice - X a Y a v jeden okamžik bude svítit pouze jedna LEDka (refresh rate bude 60Hz, takže v tom nebude problém). Takto nějak by to mělo vypadat:

A  B  C  D --0|  |2^0-->RA0
E  F  G  H --1|IO|
I  J  K  L --2|  |
M  N  O  P --3|  |2^1-->RA1
|  |  |  |
0__1__2__3
    IO
__________
2^0    2^1
 |      |
RB0     RB1

(omlouvám se za kvalitu nákresu, ale lépe jsem to nedokázal)

Když bude logická jednička na pinech RA0, RA1 a RB1, tak x souřadnice bude 2 a y souřadnice 3, z toho vyplývá, že se rozsvítí LEDka písmeno "O". A abych mohl řídit velké množství LEDek, tak potřebuji zařízení, které by mělo vstup (64-)32-16-8-4-2-1 a na výstupu by bylo 64/128 vývodů do jednotlivých řad/sloupců s LEDkami. Nechci za to platit nehorázné peníze (mělo by to být do 250,-Kč, bižuterii jako odpory, kondenzátory apod. nepočítám, toho mám doma nevyčerpatelné zásoby). Asi bych při tom použil obvody 74HCT138, ale nevím, jak je efektivně propojit. Napadlo mne udělat to tak, že bych použil 8 74HCT138, které by měly 4-2-1 piny společné a devátý, který by "zapínal" právě ten jeden z osmi. Ale pořád to nevyhovuje mému zadání, aby to bylo 32-16-8-4-2-1, protože nechci zbytečně plýtvat procesorovým časem PICu (bude to řízené z počítače přes USB a nechci to dělat moc složitě, vstup bude bitmapa a výstupem do PICu bude pole s X a Y souřadnicemi LEDek, které se rozsvítí). Pakliže by měl někdo nějaký nápad jak ty jednotlivé obvody nějak spojit, aby fungovaly tak jak chci, tak napište. Díky za odpovědi.

loading...
Předmět Autor Datum
Jeejej, to bude MUXů :-) Když se zamyslíš nad tím, co řešíš, tak vlastně adresuješ jednotlivou LED v…
JP 13.12.2010 21:07
JP
Díky, asi to tak udělám. Jinak s routováním problém nebude, udělal jsem si takový malý moduly (3x3cm…
marekdrtic 14.12.2010 05:48
marekdrtic
To invertovani je naopak v poradku. LED nesviti na log 1, protoze to bys mel proud omezenej pull-up…
bahno 14.12.2010 08:52
bahno
Zalezi co chce zobrazovat, pokud "pong" s jednim pohybujicim se bodem, tak v pohode. Pokud chce takt…
JR_Ewing 14.12.2010 09:35
JR_Ewing
Cilem je zobrazit bitmapu, takze problem je jasnej. Mozna by pri znamy refresh rate a pouze dvoubare…
bahno 14.12.2010 12:58
bahno
Chtěl bych si postavit sám (pro Josepha - beru to jako technologickej úkol, jestli to dokážu vyrobit…
marekdrtic 14.12.2010 16:12
marekdrtic
No, troufnu si tvrdit, ze kostka v odkazovanem videu pouziva frekvenci v radu kHz
JR_Ewing 14.12.2010 16:20
JR_Ewing
8*8*8*RGB je 1536 LED. Mechanicky ani financne to ted neresim. Problemu s PWMkou je neskutecne, oko…
bahno 14.12.2010 16:54
bahno
Vidím, že jsem si ukrojil až moc velký sousto. Začnu radši s jednobarevnou kostkou 5x5x5, on to bude…
marekdrtic 14.12.2010 18:25
marekdrtic
Já bych to řešil kaskádním zapojením 4020 a krmením sériovými daty.
Moas 14.12.2010 07:22
Moas
Tiež by som to videl na seriový prenos: " ohromné množství LEDek (stovky až tisíce) ". No neviem pr…
Joseph 14.12.2010 12:31
Joseph
Aha, takže ono nejde o to, rozsvítit jednu LEDku a navíc nám tam nějak přibyl jeden rozměr... ;-) Po…
JP 14.12.2010 23:34
JP
Jé, 4x4x4 není 256, ale 64. Jo, už jsem měl jít dávno spát. No, holt si to přepočítáš. Sorry :-) poslední
JP 14.12.2010 23:36
JP

Jeejej, to bude MUXů :-)
Když se zamyslíš nad tím, co řešíš, tak vlastně adresuješ jednotlivou LED ve 2D poli, tj. pro pole 64x64 se v podstatě jedná o dekodér 1 z 4096. Představ si, jako bys adresoval jednobitovou paměť. Podle toho, že víš, co je HCT138 a programuješ PICy, tak Ti určitě pojem adresní dekodér není cizí.
Jak to udělat prakticky:
Předpokládejme tedy čtvercovou matici 64x64, tj. 6bitů řádek, stejně tak 6bitů sloupec. Řádkový a sloupcový dekodér bude tedy stejný.
Pokud máme postavit z HCT138 dekodér 1 ze 64, složíme těch 64 bitů z osmi HCT138, přičemž každá 138 budí svoji osmici signálů, tj. dekóduje nejnižší 3bity řádkové/sloupcové adresy na jeden z osmi. Ještě jednou pro ujasnění, nejnižší 3 bity adresy jsou rozvedeny PARALELNĚ jako vstupy do všech osmi dekodérů. Máme tedy správně dekódované nižší 3 bity, s tím, že bychom potřebovali vybrat, která osmice má být aktivní, což určují vyšší 3 bity adresy. No, dekódovat 3 na 8 umíme, od toho je tu 138, takže vezmeme JEDNU 138, do ní zavedeme vyšší tři bity adresy a výstupy té "nadřazené" 138 budeme aktivovat vždy právě jednu z těch "podřízených. To uděláme tak, že každá podřízená 138 bude mít G1 a G2A v log. 1 a do jejího vstupu G2B je zaveden jeden z výstupů nadřazené 138. G2A a G2B se dá samozřejmě zaměnit, viz katalogový list.

Nevím, jestli jsem to vysvětlil pochopitelně, za zašmodrchání se omlouvám. Když to nepobereš ani po chvíli usilovného přemýšlení, tak to asi znamená, že jsem někde něco zvoral :-)

Jinak, routování téhle desky Ti nezávidím...;-)

Díky, asi to tak udělám. Jinak s routováním problém nebude, udělal jsem si takový malý moduly (3x3cm :-)), ve kterých je 6-pin na jedné straně (3 bity vstup, ten aktivační pin a napájení) 8-bit výstup na straně druhé, takže to vlastně potom elegantně nadrátuju a bude to jednodušší, než jedna gigantická deska. Ale koukám na datasheet té 74HCT138 a zjistil jsem, že invertuje výstupy a 74HCT137 taky... Takže asi ještě 8x invertor na každý IO.

To invertovani je naopak v poradku. LED nesviti na log 1, protoze to bys mel proud omezenej pull-up rezistorem, ale pripoji se pres odpor na +5V vetev a spina se logickou nulou.

Jinak si myslim ze budes mit problem s jasem - udelej si rozvahu, jak dlouhou jednotliva led sviti a o kolik budes muset zvednout proud aby to fungovalo.

Zalezi co chce zobrazovat, pokud "pong" s jednim pohybujicim se bodem, tak v pohode. Pokud chce taktor rozsvitit vsechny diody na raz, tak to bude mit kapku problem.

PS: Pokud by to chtel mit pekne svitive, tak by mohl kazdou diodu doplnit o klopny obvod, ktery by pri prichodu impulzu hodin vzdycky negoval hodnotu vystupu. Tim by ziskal trvaly svit bodu, ale bylo by nutne to osetrit programove. Tedy ze by program porovnaval rozdil obrazku soucasneho a nasledujiciho a pouze tyto zmeny by nasledne uplatnil. Bylo by nutne take vyresit "reset" displeje, aby program zacinal od "znameho" stavu.

Cilem je zobrazit bitmapu, takze problem je jasnej.
Mozna by pri znamy refresh rate a pouze dvoubarevnym rezimu pripadalo v uvahu kazdou spinat trazistorem, kterej by mel v bazi sikovnej kondik, kterej by ho podrzel v sepnutym stavu do dalsiho refreshe. A nebo zvednout proud LED na 200-500mA, s tim ze to pri tomhle koeficientu plneni prezije. Nicmene vnimani lidskyho oka je tu klicovy a neni to trivialni problem.

Chtěl bych si postavit sám (pro Josepha - beru to jako technologickej úkol, jestli to dokážu vyrobit a chci to taky jako výzdobu audio-koutku) něco takového:
watch
ale v menším formátu (8x8x8 LED a jelikož stojí 1 RGB LEDka 12Kč, zatímco 3x samostatné LED, které mechanicky nějak spojím mě vyjde 2x levněji nebo prakticky zadarmo, když pár lidí poprosím, jestli doma nemají přebytečný LEDky nebo nefunkční zařízení, kde jich je hafo, problém bude prakticky jenom s těma modrýma, ty se sháněj v zařízeních blbě). S tím, že bych tam dal něco, co by LEDku drželo v sepnutém stavu třeba po dobu 1ms problém bude taky, protože pakliže budu chtít někdy v budoucnu přidělat něco jako RGB míchání barev, kde bude třeba třeba PWM obstarávat to, aby se ta LEDka rozsvítila třeba na 1/10 svého svitu, tak bohužel nepochodím. Ideální by byla obnovovací frekvence 120+Hz, aby tam nebylo vidět blikání. Mám otestovaný, že PIC16F887 dovede být stabilní s 48Mhz krystalem, takže 12Mhz efektivní frekvence (1 instrukce = 4 kmity krystalu). Při obnovovací frekvenci 60Hz a 512 LEDkách zbyde čas na jednu LEDku 32 mikrosekund, což skoro 400 instrukcí, takže to by ještě asi nějak šlo. S "přeplňováním" LEDek taky počítám, že tam bude.

8*8*8*RGB je 1536 LED. Mechanicky ani financne to ted neresim.
Problemu s PWMkou je neskutecne, oko a vnimani jasu je +- logaritmicky, citlivost oka pro kazdou barvu je jina, zavislost jasu LED na protekajicim proudu nelinearni. V jednom picu to neupocitas(na hw o tom tehda vysel clanek).
Jak to mas v planu zapojit? Jako 2D matici a prepocitat pseudo2D na 3D? Jinak to znamena tranzistory pro kazdou led tak jako tak.

Vidím, že jsem si ukrojil až moc velký sousto. Začnu radši s jednobarevnou kostkou 5x5x5, on to bude rozdíl řídit čtvrtinu LEDek a k tomu jen jednu barvu. Tyhle jsou levný a pěkný:
-l-53src*g-ges05100022.html červený nebo -l-53sgc-ges05114020.html zelený

Takhle aspoň srazím počet potřebných deMUXů a ušetřím spoustu práce PICu. Teď ještě vyřešit jak provést to "přeplňování", jestli není nějaká schůdnější varianta než tam dávat 125 tranzistorů.

Tiež by som to videl na seriový prenos: " ohromné množství LEDek (stovky až tisíce) ".

No neviem prečo chceš vyvíjať niečo už vyvinuté. Presne týmto spôsobom sa ovládajú display-e . Zožeň si funkčný no mierne vadný u ktorého vieš že elektronika je funkčná ,jeho datasheet a riešiť už len spôsob výmeny transistorov na display-i za tvoje LED. Teda ako rozstrihať, premiestniť a kontaktovať dekodery + doplnené "výkonové" tranzistory s LED-kami v kolektoroch.

Aha, takže ono nejde o to, rozsvítit jednu LEDku a navíc nám tam nějak přibyl jeden rozměr... ;-)
Pokud by se to mělo postavit podle toho, co jsem navrhoval nahoře, tak bys musel krom toho 2D demuxu ještě dát jednobitový řídicí signál (protože celý ten cvokhaus s demuxy tu LED jenom naadresuje, ale neříká, jestli má svítit, nebo ne). Nicméně je to bohapustá teorie, protože fyzika je známá potvora, co se nedá oblbnout. Chci tím říct asi to, že pokud by to byly i třeba jenom 10mA LED a měly by taky trochu svítit (ať nežeru, tak jedné dáme střední proud jenom 5mA), tak při multiplexu 1:4096 vychází 5*4096mA, což je jestli dobře počítám nějakých 20A peak po dobu 1/(60*4096) sekundy ...no, doufám, že nemusím pokračovat ;-). Nic proti Augustu Strindbergovi (někdo to přece udělat musel), ale nemusíme být všichni pionýři slepých uliček.
Takže místo vyfukování tabákového dýmu do umyvadla s vodou bych doporučil v tomto myšlenkovém cvičení pokračovat tak, že (s dovolením se pro jednoduchost omezím na kostičku 4x4x4, i tak to bude totální voser, promine-li mi ctěné publikum tento výraz) nakrmíme férovými daty všechny sloupce najednou a budeme demuxem vybírat jenom jednotlivé řádky. Pro náš rozměr kostičky budem potřeba datový tok 4*4*4=265 bitů krát 60 Hz, což je 15.36kbps. To by se nějakým rozumným PICem snad ukrmit nechalo.
Pak buď muxovat jednotlivé roviny kostičky (všechny připojit na čtyřbitovou muxovanou sběrnu z PICu), nebo zapisovat dva bajty (4x4bity) z PICu, každou čtveřici bitů připojit na jednu rovinu kostičky a muxovat jenom řádky. Včetně napájení se to pořád všechno vejde na řekněme 26pin plochý kabel, to snad je ještě schůdné.
Ve větším rozlišení je to bez pořádného mikrokontroléru s externím paměťovým rozhraním nereálné... Tím pořádným mikrem myslím něco jako běžně dostupné STM32F103VDT6 nebo podobný kalibr. Zkrátka plnokrevné rychlé 32bit mikro s FSMC. Osobně bych ale zůstal u PICu a rozlišení 4x4x4, jako demonstrace, že je to vopruz, to úplně postačí :-).

Zpět do poradny Odpovědět na původní otázku Nahoru

loading...