Fórum témák

» Több friss téma
Cikkek » 10x10x10 LED-kocka építése
10x10x10 LED-kocka építése
Szerző: libesz, idő: Júl 17, 2011, Olvasva: 46536, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   5 / 7

Szerencsére az ENC28J60 elég népszerű alkatrész, sokan építkeznek belőle. A feladata az, hogy az ethernet forgalmat teljes egészében leredukálja SPI kommunikációra, rengeteg nyűgtől megszabadítva ezzel a fejlesztőt, ami az ethernet alacsony szintű kezelésével járna. Az IC-nek mindössze egy MAC address-re és egy fix IP címre van szüksége ahhoz, hogy az érkező csomagokat kitolja SPI -ra. Találtam AVR-hez DHCP implementációt is, de nekem pont jó a fix IP.

Sok IP stack van a neten hozzá, én a már említett tuxgraphics-féle megoldást választottam, mert nagyon egyszerű használni és még mindig fejlesztik, köszönet érte. A következő kérdés az volt, hogy TCP vagy UDP alapon menjen a kommunikáció. A stack mindkettőt tartalmazza, a TCP általában viszont macerásabb, pláne ha nem PC-n hanem AVR-en kell lekezelni. Ahol az időzítés fontosabb, mint az, hogy az összes csomag tutira oda érjen, ott UDP-t szokás használni (például FPS játékokban). Mivel nekem egyetlen egyféle információt kell eljuttatnom a kockához (a megjelenítendő képet), ráadásul az üzenet mindig azonos hosszúságú, az UDP mellett döntöttem.

Protokol

Az árnyalatok száma minden LED esetében 4 lett, amit kb 0, 33, 66 és 100% -os fényerőre akartam belőni. Ebből következik, hogy egy LED fényerejének átküldéséhez 2 bit szükséges, az bájtonként 4 LED, vagyis az 1 000-hez 250 bájt kell. Ekkora méretű csomag kell ahhoz, hogy egy frame -et egyben átküldjünk. Ezt megfejeltem még az elején egy plusz bájttal, ami parancsként szolgál a kockának. Amikor ez az első bájt 1, akkor adatot küldünk, amikor ez a bájt 0, akkor a kocka visszaküld egy választ a verziójával. Ez jól jöhet, amikor valamit fejlesztek és nem vagyok benne biztos, hogy a csomagjaim célba érnek, UDP-n ugyanis helyből nem derül ki, ha a címzett nem kapja meg a csomagot. Ha egy 50 frame/sec -es animációval számolunk, akkor a szükséges sávszélesség 12,5 kB/sec lesz, ezzel bőven meg kell birkóznia az AVR-nek, nem kell semmiféle tömörítéssel vagy spórolással próbálkozni. Addig jelenít meg tehát a kocka egy bizonyos frame -et, amíg újat nem kap a hálózatról. Ez elég nagy rugalmasságot biztosít.

A kocka a bekapcsolás utáni (megfelelő portra érkezett) első UDP csomagból tudja, hogy honnan kapja majd az adatokat, ezt az IP-t elmenti és innentől kezdve csak ugyanonnan hajtható meg. Ez elegendő kell legyen az ellen, hogy mindenféle kóbor UDP csomagokban érkező adatot kirajzoljon .

A program az AVR-ben meglehetősen egyszerű, szerencsére az UDP-s  mintaprogramot nagyon könnyen át tudtam alakítani. Mivel az ethernet miatt megszakítást nem használ, egyszerűen a főciklusban kérdezgeti az ENC28J60 -at, hogy jött-e csomag, így egy időzítő segítségével folyamatosan tudjuk frissíteni a kockán látható képet.

A TLC5947 -ek 12 bites felbontásban tudják a LED-ek fényerejét szabályozni, ez 4096 különböző árnyalatot jelent, ami több mint elég. Az AVR LED-enként 0-3 -ig fogadja az árnyalatokat, ahol a három felel meg a 100% -os fényerőnek, ezt a négy értéket kell tehát átalakítani a 0-4095 tartományba mielőtt kiküldi.

A TLC-k vezérlését nem részletezném, az adatlapon elég részletes ábrák vannak róla, a forráskódból pedig látszik a gyakorlati megvalósítás.

Az egyszerű kommunikáció miatt a PC oldalon bármilyen nyelven írhatunk hozzá meghajtást, semmilyen extra függvénykönyvtár nem kell hozzá, csak kiküldjük a csomagokat és kész.

Kellett viszont valami felület arra az esetre, ha nem akarunk neki állni programot írni minden egyes animációhoz. Épp ideje volt kicsit felszínre hozni az amúgy felületes C# tudásomat. Szerintem egész trendi lett


Ennek a programnak az ismertetése szerintem túl távol áll a hobbielektronika témától, ezért nem részletezném, az összes többi anyaggal együtt letölthető... Rengeteg dolgot lehetne még bele fejleszteni, de az alapvető funkciókat tudja: tetszőleges sík mentén rajzolhatunk egy tetszőleges rétegben, meghatározhatjuk millisec pontosan hogy egy kép meddig legyen látható, kimenthetjük az animációt XML-be, stb. A legfontosabb viszont hogy kattintgatás közben a kockán is látható folyamatosan az eredmény, ami nagyban felgyorsítja a rajzolást.


A cikk még nem ért véget, lapozz!
Következő: »»   5 / 7
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem