Projekt do MMIA: RGB LED Cube 5x5x5

Autoři: Martin Stejskal, Dominik Schmidt
Garant předmětu: Zbyněk Fedra UREL, FEEC, VUT Brno fedraz@feec.vutbr.cz

Obsah

  • Úvod
  • Realizace HW
  • Realizace SW pro AVR
  • Pomocný SW pro generování animací
  • Závěr
  • Ke stažení
  • Literatura
  • Úvod

    Led cube je v podstatě skutečný 3D display. Jeho rozlišení je dáno počtem LED. Větší rozlišení nabídne věrnější efekty, ale náročnost na počet LED a řízení stoupá s třetí mocninou. Takže je vhodné zvolit správný kompromis, mezi náročností a rozlišením. Zde je rozměr krychle 5, ale LED jsou RGB, což umožní udělat efekty zajímavější.

    Realizace HW

    Jako řídící MCU byla vybrána ATmega64 a to především kvůli její velikosti flash paměti (64kB). Dále disponuje velkým počtem pinů, hardwarovou PWM, UART, SPI a I2C rozhraním. Protože jsou použity RGB LED, dostáváme 3 barevné kanály. PWM je použita pro řízení svitu jednotlivých kanálů: R, G a B. Pokud budou všechny kanály na LED "aktivní", lze pomocí PWM nastavit prakticky libovolnou barvu. Omezení je zde převážně z hlediska softwaru a to že pro jeden celý 3D obrázek lze nastavit vždy jednu kombinaci PWM.
    Protože celé zařízení bylo konstruováno tak, aby jej bylo možné napájet přímo z USB bez potřeby externího zdroje, byl do návrhu přidán i DC/DC měnič. To přináší hned několik výhod:
  • Menší spotřeba
  • Větší bezpečnost
  • Možnost externího napájení
  • Díky tomu, že napájecí napětí pro AVR a LED je nižší, tak je možné použít i menší sériové odpory pro LED. Tím pádem budou menší ztráty na těchto odporech a zmenší se i ztrátový výkon. Napětí DC/DC měniče bylo voleno na 3.9V. Toto napětí je dostatečně velké na to, aby už rozsvítilo modrou LED a zároveň zde bude dostatečná rezerva pro úbytky na tranzistorech a vodičích. Díky nižšímu napětí navíc nebude hrozit poškození LED při přepólování (například zkrat). Další výhoda spočívá v tom, že díky DC/DC měniči dodávaný proud do LED může být větší než proud odebíraný na vstupu celého zařízení. To je výhodné hlavně pro napájení z USB. Díky ochranným diodám je možné napájet LED cube i z externího zdroje. A to v rozmezí +5V~36V DC.
    Při návrhu se myslelo i na možnost připojení externí maticové klávesnice, I2C, nebo SPI zařízení.
    Zařízení obsahuje převodník USB na UART. To umožňuje propojit zařízení s počítačem a přehrávat animace například přímo z počítače, kde není takové omezené množství paměti.
    Reprogramování je možné standardním 10. pinovým ISP konektorem pro AVR jak 5V, tak i 3.3V logikou (díky ochranným odporům).
    Protože obvládat každou LED přímo MCU by nebylo prakticky možné (bylo by zapotřebí 375 pinů), je řízení uskutečněno multiplexováním. Schéma projekce a popisek je na následujících obrázcích.
    Schéma projekce - schematicky Schéma projekce  - detail
    Nejprve se "aktivuje" zeď - WALL0 (sepne T2). Pak se vybere sloupec COLUMN0 (T18). Tranzistory T3~T17 pak sepnou katody jednotlivých LED. Proces nějakou dobu čeká (v tuto dobu je vhodné provést data processing). Pak se "deaktivuje" COLUMN0 a "aktivuje" se COLUMN1, atd. atd. Schéma zapojení je níže.
    Schéma zapojení

    Realizace SW

    Hlavní program je prostý: inicializuje se MCU a pak se v nekonečné smyčce volá funkce, která vykresluje 3D obraz.
    Vývojový diagram - hlavní program
    Největší problém je řešení zpracování dat. Vzhledem k tomu, že se celý 3D obraz musí neustále obnovovat, nelze zpracovávat data libovolnou dobu. Problém se zpracováním dat je rozdělen do dvou "vláken". První se stará o to, aby se do framebufferu nahrávaly nové 3D obrazy.
    Vývojový diagram - zpracování dat pro animaci
    Vývojový diagram - zpracovávání jednotlivých slov
    Druhé vlákno obsahuje několik dalších podprogramů, které jsou ale volány podle "pořadníku". Je to proto, že zpracování dat by nemělo trvat víc, jak několik stovek mikrosekund. Proto je tato výpočetní zátěž rozložena v čase. Tato část ještě není hotová a může se měnit. Zatím jde o návrh.
    Vývojový diagram - zpracování ostatních dat

    Pomocný SW pro generování animací

    Protože vytvoření animace je časově velice náročné a navíc i pro člověka špatně představitelné, byla pro tento účel napsaná konzolová aplikace. Na následujícím obrázku je ukázka progrmu.
    Ukázka Anime makeru
    Program zobrazuje pořadí aktuálního obrazu (Frame), "zďi" (Wall), sloupci (Column) a vypočtený čas (Time). Níže je zobrazený 2D obraz na dané "zďi". Jednotlivé barevné složky jsou značeny písmeny "R", "G" a "B". Při zadání příkazu "exit" se vygeneruje animace a uloží se do souborů .c a .h, které uživatel přidá do projektu pro AVR a ukáže pointerem na animaci. Ve funkci main stačí změnit pointer. Viz následující příklad:
    /* Nastaví pointer na animaci ve flash paměti. Je to v podstatě pointer na
     * pole, kde jsou uložená binární data
     */
    p_anime = pole_s_binarnimy_daty;
    Anime maker sám detekuje, pokud se některé obrazy opakují, jsou prázdné, nebo jsou všechny LED zaplé. V takových případech se namísto dat zapíše jeden příkaz, který MCU vyhodnotí stejným způsobem. Dochází tak k velké úspoře dat. Samozřejmě, že záleží na obsahu, ale pro animaci "hada" se velikost animace zmenšila na přibližně 1/2. Samotný proces lze samozřejmě rozšířit, takže lze dosáhnout i vyšší komprese.

    Závěr

    Přestože animace lze přehrát, program ještě není úplňe dokončen. Chybí podpora pořadníku pro animace, maticové klávesnice a dalších periferií (UART, I2C...). Na druhou stranu je již napsaný kód připravený na tyto úpravy. Na videu níže můžete vidět "kostku v akci".

    Ke stažení

    HW - soubory pro Eagle 5
    SW pro AVR + Anime Maker
    Dokumentace generovaná doxygenem
    Binární soubor pro Anime Maker je zkompilován pro Linux 64bit a procesor Core2Duo. Na "nižších" procesorech nemusí být program spustitelný! Případně si Anime maker přeložte.

    Literatura

    [1] Ukázkový projekt do MMIA: LED CUBE 8x8x8[online]. 2009 [cit.2013-06-06]. Dostupný z WWW:
         <http://www.urel.feec.vutbr.cz/MIA/2009/lecian/index.html>
    [2] Instructables.com - Led Cube 8x8x8[online]. 2010 [cit.2013-06-06]. Dostupný z WWW:
         <www.techprojectmasters.com/wp-content/uploads/2011/04/Led-Cube-8x8x8.pdf>
    [3] ATmega64 datasheet - Atmel[online]. 2013 [cit.2013-06-06]. Dostupný z WWW:
         <http://www.atmel.com/Images/Atmel-8160-8-bit-AVR-Microcontroller-ATmega64A-datasheet.pdf>





    6.6.2013