Pripojeni vetsiho mnozstvi LEDek k MCU

Ahoj zajimalo jestli stim mate nekdo zkusenosti s pripojenim spousty ledek k mcu.Ja pouzivam ATmega16 kterej ma 4x8bitvy I/O porty.Potreboval bych k nemu pripojit aspon 64 RGB diod (64x3).A samozrejme vsech 3x64 diod chci ovladat PWM modulaci.Zapojeni do matice+tranzistory tady nestaci.Je lepsi sahnout po obvodu s vice I/O porty nebo se da pouzit nejaky budic,radic,expander,ci co … Nebo uplne neco jineho??Dekuji za reakce.

Jedno řešení by mě napadlo, ale je to docela na hraně.
192 diod -> 24 8bit SIPO posuvných registrů s výstupním bufferem.

Refresh 30Hz, 8bit PWM -> přepis všech registrů 30256=7680x za vteřinu. Taktovačka registrů 7680192=1.5MHz. To by synchro usart mohl zvládnout :smiley:

No Frekvenci toho PWM bych daval asi radsi 60Hz.Zhruba tak 50-70Hz uz lidsky oko prestava stihat,ne?Max frekvence pro USART by mela byt polovina frekvence hodin,ja muzu nastavit 8Mhz,takze USART 4mhz by to jeste asi stihal.Horsi by bylo kdybych chtel pridat diody…
Dejme tomu ze mam hlavni smycku ve ktery mi nejaky algoritmus mneni hodnoty PWM registru,v preruseni od Softwaroveho PWM pak podle tech hodnot nastavuju jednotlivy bity v poli o 192 prvcich.To pole musim ale neustale dokola odvysilavat tim padem se bude stavat ze budu zapisovat do pole kdyz se bude zrovna odvysilavat… nebo to poradne nechapu…

Naštěstí avr není vícejádrový :smiley: takže se ti nestane, že budeš zároveň zapisovat a vysílat. Buď jedno nebo druhé. Pokud přijde přerušení pro naplnění usartu, dáš tam aktuální hodnotu. Když to pole o 0.5us později změníš, holt se to projeví až při dalším refreši.
Kdybys chtěl přidat diody, tak zvedneš mcu na 16MHz :wink:
A kdyby ti ani to nestačilo, vem procesor se 2 usartama. No a pak xmegy jich mají třeba 8 :smiley:.

Jinde mi radi : "vice malejch procesoru treba AT89LP4052…jednocyklove procesory na 20 MHz…superrychle !!! maji je v sosu…a budes je ridit treba tou atmegou pres RxTx "
Nebo taky expanderem to resit.

Na expandéry budeš potřebovat mnohem víc pinů procesoru.
Další procesory - to lze samozřejmě taky, jen to bude o dost dražší.

Jeden port klidne obetuju abych uadresoval 256 diod.Zbyde mi este volnej USART kerej muzu vyuzit,a stacila by mi ATmega16.Popremyslim este…

Neviem ako by sa dal pouzit synchro USART, ale viem urcite ako by sa dalo pouzit SPI rozhranie spolu s 74HC595 (MOSI, CLK, SET - tri vodice procesora pre vsetkych 64x3 = 192 LED, viac pinov procesora nie je potrebnych).

Ak bude SPI taktovane na 1MHz (lahko je stanovit si ciele 4-8-16MHz, ale budes mat nadizajnovany hw aby tu frekvenciu aj preniesol?)

64x3 = 192, 256/8=24. Skratka treba odvysielat 24B

Pri 1MHz SPI ich napriklad do 74HC595 odvysielas 5208x za sekundu.

Po odvysielani bajtu pod prerusenim presunies do SPI registra dalsi bajt a prerusenie ukoncis. nemusis sa tak bat nejakej nekonzistencie udajov. A v tomto pripade je to obzvlast jedno. dokonca tak, ze to pri spravnom naprogamovani oko ani nezbada :slight_smile:

Ak si povies, ze Ti staci cca 50 urovni svietivosti, si schopny vsetkych 64 RGB LED individualne pre kazdu farbu nastavovat PWM 100x za sekundu s krokom 1/52. To je myslim si celkom slusna rychlost. Pricom samotne SPI je schone frcat frekvenciou Xtal/2 co pri 16MHz je 8MHz, takze tych urovni jasu mozes mat az 400 pri 100Hz periode PWM.

Pri 1MHz SPI ma samotny procesor (16MHz) medzi jednotlivymi preruseniami cas na realizaciu do 128 instrukcii (vratane prerusenia) pre vypocet jasu dalsich 8 LED.

Synchro usart jsem používal ještě na C2051, tam spi k dispozici nebylo :slight_smile:
Nicméně synchro usart = spi bez miso a ss.

Tady je primo Driver pro LED.No nic jinyho nez 16bit posuvnej register to neni:)
datasheetcatalog.org/datashe … 149_DS.pdf
Co to je za cisla?

Tohle poradne nechapu ale to musi jit i u USARTU,ne?

Poradne tomu nerozumim,ale myslis zhruba to samy co Piityy…

tohle mi jasny je,proc by to SPI melo zvladnout s mensim kmitoctem uz mi jasny neni…

Nezvládne. Martim psal, že při taktovačce 1MHz to odešle jen 5208x. Když to přepočítáš na 1.5MHz, vyjde ti to samý :wink:

Leda ze by mel USART stop a start bit,to by ho oproti SPI spomalovalo.Ted si ale nejsem vubec jistej kdo to ma kdo ne.
Nebude ten procesor vytyzenej kdyz budu sw pocitat 7-8bit PWM pro 192 diod.A jeste tim ladovat USART.Zbyde pak neco pro hlavni vypocty?Kdybych mel jak si rikal vice usartu (treba 4) mohl bych si pekne R G B rozdelit na tri casti,a ctvrtej usart pouzit pro napojeni PC,a mohl bych pripojit vic diod,a pro hlavni kod by zbylo vic casu…

192x0,020mA=3,84A tj taky slusny :smiley:

Refresh 80Hz, 7bit PWM -> přepis všech registrů 80*128=10240x za vteřinu.
No a to je jednou za 97us. Během té doby musim u těch 192 PWM zjistit, jestli posílat 0 nebo 1, poskládat to do bytů a poslat ven. Při 8MHz na to tedy mam pouhých 781 taktů procesoru, tj. 4 takty na jednu PWM.

Kdyby to nestíhalo, můžeš 1mcu použít na výpočty a komunikaci s pc, druhý pak jen na diody. Na maximální frekvenci by to snad mohl stíhat.
Ono když nestihneš spočítat všechny, tak se taky nic nestane. Prostě se aktualizujou až při dalším refreši. Bude to stejný jako když ti grafika při hře spočítá jen 40fps a na monitoru máš 75Hz.
SPI dáš na registry, usart na komunikaci a je to. Kdyžtak se dělají i 20MHz verze.

ATMEGA162-16PU.Tohle ma 2xUSART a je to na 16Mhz.Je to drazi o 40kc.
Komunikaci s PC bych ozelel a pekne to rozdelil na dva USARTY.To by slo.

Budu muset si to nadizajnovat na tak velky frekvence.zatim ale netusim jak.Linkovy kabel bude muset bejt nejak stineny?Pri takovych f se projevuje uz indukcnost kabelu?Ale to uz je mimo rozsah tohodle tematu…

Jak bude procesor od registrů daleko? Bych to spíš viděl na společnou desku.
Každopádně když to bude daleko, osvědčená cesta je 485.

Melo by to bejt na jedny desce vedle sebe.Nebo bych dal na pin diodu a udelal bych to opticky :smiley:

Když to bude na 1 desce, tak to vůbec neřeš. Nějakej 1-2MHz není nic. Kdyby to mělo minimální šířku pásma přes GHz (nikoli frekvenci, ta by byla menší), tak bys musel řešit přizpůsobený vedení, ale tady to rozhodně není ten případ :wink:

nevim co myslis tim pasmem.Ale je mi jasny ze to resit nemusim…