Pokud nemáš nějaký pádný důvod k řízení jasu každé LEDky zvlášť, pak bych se do toho nepouštěl. Datově to problém není - 120 LEDek je 15 bytů (= 15x 74595 v řetězu), což při rychlosti, kterou můžeš data do 74595-ek posílat není problém. Znamená to ale v každém tiku cítače (ne cyklu, ale tiku = při každé změně hodnoty) porovnávat 120 hodnot a na základě toho zapínat/vypínat příslušný bit v posílaných datech. V tomhle případě by pro Tebe bylo ideální řídit jas kompletu pomocí G pinu 74595-ek. Data pošleš jednou a pomocí HW generátoru PWM řídíš jas celého displeje, nebo co to stavíš.
Tady nějak nerozumím těm 30,6kHz…
255 úrovní jasu je zbytečné, ale pokud to nebudeš přepínat ručně, tak to nevadí. Pokud nebudeš LEDky multiplexovat, tak nemusíš mít ani moc vysoký kmitočet. Když vezmu v úvahu, že Timer při Fmcu=8MHz a prescaleru čítače 64 přeteče 488x za sekundu, máš “zobrazovací kmitočet” 488 Hz. Pokud použiješ HW PWM na G, pak jas měníš zápisem jedné hodnoty do registru (OCRxy). Pokud použiješ prescaler jenom 8, pak dostáváš “zobrazovací kmitočet” 3906 Hz. A procesor se drbe za ušima, protože na PWMko programově nemusí sahnout …
Pokud bys řídil každou LEDku zvlášť, je třeba se poněkud přizpůsobit :
Dejme tomu, že “zobrazovací kmitočet” displeje dáme 200Hz, 100 úrovní jasu (PWM 200Hz, 100 stupňů) => 200x100=20 000 Hz => 20 kHz 8MHz/20kHz=>8000kHz/20kHz=400 => máš 400 jednotaktových (!!!) instrukcí na to, abys přepočítal 120 LEDek, odeslal je na SPI a udělal ještě to ostatní, co potřebuješ udělat. Tohle si myslím, že je nereálné i pro assembler. Se “zobrazovacím kmitočtem” (PWM) 100Hz už to bude asi šlo zvládnout, ale máš 800 instrukcí k dispozici. Řešení by bylo použít krystal a nataktovat mcu na 16 MHz.
Samozřejmě záleží na Tobě, pro jaké řešení se rozhodneš.
Zamyslil bych se spíš na jinou věcí. A to je odběr toho celého. Pokud nemáš nějaký důvod, aby svítily všechny LEDky najednou (třeba, že budou sloužit jako osvětlení), pak bych se zamyslel spíš nad tím, rozdělit je do skupin (třeba 4x30 LED) a multiplexovat je. Tím se dostaneš na maximální proud 0,6A. To sice taky není úplně málo, ale je to lepší, než 120 LEDek najednou. Při 20mA/LEDku je to totiž 2,4A. To už je celkem slušnej proud. Řídit jas každé LEDky také lze - i když interně se 120-ti porovnáním nevyhneš. Má to samozřejmě i nevýhodu v tom, že když použiješ multiplex 1:4, tak snížíš maximální jas každé LEDky.
Pokud nebudeš LEDky napájet z 12V (což bych nedoporučoval - protopíš zbytečně moc výkonu na omezovacích odporech). Napájel bych to celé buď 5V nebo 3,6V. Ale ne 7805-kou (při 12V napájení protopíš 7/12 výkonu na stabilizátoru) - použij nějaký pulzní stabilizátor. Například pro 3A stabilizaci z 12V na 5V nebudeš potřebovat ani chladič, což by se 7805-kou nebylo možné, protože by na ní bylo 3x7=21W …
Třeba tenhle umí výstupní napětí 0,8-24V, 3A :
tme.eu/cz/details/a8498sljt/ … rosystems/
Při použití muiltiplexu by Ti stačil i tenhle (1,5A) :
tme.eu/cz/details/mc34063adr … conductor/
Můžeš to pak napájet prakticky čím chceš (do max. vstupního napětí stabilizátorů, což je 40V pro MC34063 a 50V pro Allegro) a nemusíš se bát, že se Ti stabilizátor upeče.