Tartalomjegyzék:

64 Pixel RGB LED kijelző - Egy másik Arduino klón: 12 lépés (képekkel)
64 Pixel RGB LED kijelző - Egy másik Arduino klón: 12 lépés (képekkel)
Anonim
64 Pixel RGB LED kijelző - Egy másik Arduino klón
64 Pixel RGB LED kijelző - Egy másik Arduino klón
64 Pixel RGB LED kijelző - Egy másik Arduino klón
64 Pixel RGB LED kijelző - Egy másik Arduino klón
64 Pixel RGB LED kijelző - Egy másik Arduino klón
64 Pixel RGB LED kijelző - Egy másik Arduino klón

Ez a kijelző egy 8x8 RGB LED mátrixon alapul. Tesztelés céljából 4 műszakregiszter segítségével egy szabványos Arduino kártyához (Diecimila) csatlakoztatták. Miután működésbe hoztam, foltos NYÁK -on permetizáltam. A váltóregiszterek 8 bitesek, és könnyen illeszthetők az SPI protokollhoz. Az impulzusszélesség -modulációt a színek keverésére használják, erről később. Az MCU RAM egy részét keretbufferként használják a kép tárolására. A video RAM -ot egy megszakítási rutin elemzi a háttérben, így a felhasználó egyéb hasznos dolgokat is elvégezhet, például beszélhet a számítógéppel, olvashat gombokat és potenciométereket. További információ az "Arduino" -ról: www.arduino.cc

1. lépés: Impulzusszélesség -moduláció színek keveréséhez

Impulzusszélesség -moduláció színek keveréséhez
Impulzusszélesség -moduláció színek keveréséhez

Impulzusszélesség -modul - MI? Az impulzusszélesség -moduláció lényegében elég gyorsan be- és kikapcsolja az elektromos készülékre táplált áramot. A hasznos teljesítmény a négyzethullám függvény matematikai átlagából származik, amelyet egy periódus alatt vettünk át. Minél tovább marad a funkció BE helyzetben, annál több energiát kap. A PWM ugyanolyan hatással van a LED -ek fényerejére, mint a váltakozó áramú fények fényereje. Az előttünk álló feladat 64 RGB LED (= 192 egyedi LED!) Fényerejének egyéni szabályozása olcsón és egyszerűen, így az egész színek spektruma. Lehetőleg ne legyen villódzás vagy egyéb zavaró hatás. Az emberi szem által mutatott fényerő nemlineáris érzékelését itt nem vesszük figyelembe (pl. A 10% és 20% közötti fényerő közötti különbség "nagyobbnak tűnik", mint 90% és 100% között). A kép (1) illusztrálja a a PWM algoritmus. Tegyük fel, hogy a kód 7 -es értéket kap a LED fényerejéhez (0, 0). Ezenkívül tudja, hogy a fényerő maximum N lépés. A kód N ciklusokat futtat a fényerő minden lehetséges szintjén, és minden szükséges hurkot a LED -ek kiszolgálásához minden sorban. Ha a fényerő -hurok x hurok számlálója kisebb, mint 7, a LED bekapcsol. Ha 7 -nél nagyobb, a LED kialszik. Ha ezt nagyon gyorsan elvégzi minden LED, fényerő és alapszín (RGB) esetén, minden LED egyedileg beállítható a kívánt szín megjelenítéséhez. Az oszcilloszkóppal végzett mérések azt mutatják, hogy a kijelző frissítési kódja körülbelül 50% CPU -időt vesz igénybe. A többi felhasználható soros kommunikációra PC -vel, gombok olvasására, RFID olvasóval való beszélgetésre, I küldésre2C adatok más modulokhoz …

2. lépés: Beszélgetés a váltóregisztrátorokkal és a LED -ekkel

Beszélgetés a váltóregisztrátorokkal és a LED -ekkel
Beszélgetés a váltóregisztrátorokkal és a LED -ekkel
Beszélgetés a váltóregisztrátorokkal és a LED -ekkel
Beszélgetés a váltóregisztrátorokkal és a LED -ekkel

A shift regiszter olyan eszköz, amely lehetővé teszi az adatok soros betöltését és párhuzamos kimenetet. Az ellenkező művelet is lehetséges a megfelelő chip használatával. Az arduino webhelyen jó oktatóanyag található a műszakregiszterekről. A LED-eket a 74HC595 típusú 8 bites váltóregiszterek vezérlik. Mindegyik port körülbelül 25 mA áramot képes előállítani vagy elnyelni. Az elsüllyesztett vagy beszerzett chipre jutó teljes áram nem haladhatja meg a 70 mA -t. Ezek a chipek rendkívül olcsók, ezért ne fizessen többet körülbelül 40 centenként darabonként. Mivel a LED -ek exponenciális áram / feszültség karakterisztikával rendelkeznek, áramkorlátozó ellenállásokra van szükség. Az Ohm törvénye alapján: R = (V - Vf) / IR = korlátozó ellenállás, V = 5 V, Vf = LED előremenő feszültsége, I = kívánt áram Piros LED -ek előremenő feszültsége körülbelül 1,8 V, a kék és a zöld tartomány 2,5 V és 3,5 V között van. Ennek megállapításához használjon egyszerű multimétert. A megfelelő színvisszaadás érdekében néhány dolgot figyelembe kell venni: az emberi szem spektrális érzékenységét (piros/kék: rossz, zöld: jó), a LED hatékonyságát bizonyos hullámhosszon és áramerősségnél. A gyakorlatban az ember egyszerűen vesz 3 potenciométert, és addig állítja őket, amíg a LED megfelelő fehér fényt nem mutat. Természetesen a maximális LED áramot nem szabad túllépni. Az is fontos itt, hogy a sorokat vezérlő váltóregiszternek 3x8 LED -et kell árammal ellátnia, ezért jobb, ha nem nyomja túl nagyra az áramot. Sikeresen korlátoztam a 270 ohmos ellenállásokat az összes LED esetében, de ez természetesen a LED mátrix gyártmányától függ. A váltóregiszterek SPI soros interfésszel vannak összekapcsolva. SPI = Soros perifériás interfész (Kép (1)). A PC -k soros portjaival szemben (aszinkron, nincs órajel) az SPI -nek órajelre (SRCLK) van szüksége. Ezután jelzővonal jelzi az eszköznek, hogy az adatok érvényesek -e (chipválasztó / retesz / RCLK). Végül két adatvonal van, az egyik a MOSI (master out slave in), a másik a MISO (master in slave out). Az SPI -t az integrált áramkörök illesztésére használják, akárcsak én2C. A projekthez MOSI, SRCLK és RCLK szükséges. Ezenkívül az engedélyezési sort (G) is használják. Az SPI ciklus az RCLK vonal LOW állásba húzásával indul (Kép (2)). Az MCU az adatokat a MOSI vonalon küldi el. Ennek logikai állapotát az SRCLK vonal emelkedő szélén lévő eltolásregiszter mintázza. A ciklust úgy fejezzük be, hogy az RCLK vonalat visszahúzzuk HIGH -ra. Most az adatok elérhetők a kimeneteken.

3. lépés: Vázlatos

Vázlatos
Vázlatos
Vázlatos
Vázlatos

Az (1) képen látható, hogyan vannak bekötve a műszakregiszterek. Százszorszép láncúak, így az adatok áthelyezhetők ebbe a láncba és azon keresztül is. Ezért további műszakregiszterek hozzáadása egyszerű.

A (2) képen a vázlat többi része látható az MCU -val, csatlakozókkal, kvarccal… A mellékelt PDF -fájl tartalmazza a nyomtatáshoz legjobban elkészített összes művet.

4. lépés: C ++ forráskód

C ++ forráskód
C ++ forráskód
C ++ forráskód
C ++ forráskód
C ++ forráskód
C ++ forráskód

A C/C ++ rendszerben általában a funkciók prototípusának létrehozása előtt kell kódolni őket.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Az Arduino IDE nem igényli ezt a lépést, mivel a funkciók prototípusai automatikusan generálódnak. Ezért a funkció prototípusai nem jelennek meg az itt látható kódban. egy timer1 túlcsordulás megszakítás. Kicsit rejtélyes megjelenésű kódrészletek kezdőknek, pl míg (! (SPSR & (1 << SPIF))) {} közvetlenül használja az MCU regisztereit. Ez a példa szavakkal: "míg az SPSR regiszter SPIF-bitje nincs beállítva, ne csináljon semmit". Csak azt szeretném hangsúlyozni, hogy a szabványos projektek esetében valóban nem szükséges ezekkel a hardverrel szorosan összefüggő dolgokkal foglalkozni. A kezdőket nem szabad megijeszteni ettől.

5. lépés: Kész modul

Kész modul
Kész modul
Kész modul
Kész modul
Kész modul
Kész modul

Miután megoldottam az összes problémát és elindítottam a kódot, létre kellett hoznom egy NYÁK -elrendezést, és el kellett küldenem egy mesés házba. Annyival tisztábbnak tűnik:-) Kép (1): teljesen kiépített vezérlőkártya Kép (2): a csupasz PC elülső oldala Kép (2): hátsó oldal. Ezek a portok a soros RX, TX vonalakat, az I -t tartalmazzák2C vonal, digitális I/O vonal és 7 ADC vonal. Ez pajzsok egymásra rakására szolgál a tábla hátoldalán. A távolság alkalmas perfboard (0,1 hüvelyk) használatára. A rendszerbetöltő az ICSP fejléc segítségével villoghat (az adafruit USBtinyISP -jével működik). Amint ez megtörtént, használjon szabványos FTDI USB/TTL soros adaptert vagy hasonlót. Hozzáadtam egy automatikus visszaállítás-letiltás jumpert is. Én is elkészítettem egy kis Perl szkriptet (lásd a blogomat), amely lehetővé teszi az automatikus visszaállítást FTDI kábelekkel, ami általában nem működik a dobozból (RTS vs. DTR vonal). Ez működik Linuxon, talán MAC -on. Nyomtatott áramköri lapok és néhány DIY KIT elérhető a blogomban. SMD forrasztás szükséges! Tekintse meg a PDF -fájlokat a LED -mátrixok építési utasításaival és forrásaival kapcsolatban.

6. lépés: Alkalmazás: CPU terhelésfigyelő Linuxhoz Perl használatával

Ez egy nagyon egyszerű terhelésfigyelő előzményrajzzal. Ez egy Perl szkripten alapul, amely az iostat használatával minden 1 másodpercben összegyűjti a rendszer "terhelési átlagát". Az adatokat egy tömb tárolja, amely minden frissítéskor eltolódik. Új adatok kerülnek a lista tetejére, a legrégebbi bejegyzés kiszorul. Részletesebb információk és letöltések (kód…) elérhetőek a blogomban.

7. lépés: Alkalmazás: Beszélgetés más modulokkal az I²C használatával

Alkalmazás: Beszélgetés más modulokkal az I²C használatával
Alkalmazás: Beszélgetés más modulokkal az I²C használatával

Ez csak egy elvi bizonyíték, és messze nem a legegyszerűbb megoldás erre a munkára2A C lehetővé teszi akár 127 "slave" tábla közvetlen címzését. Itt a videó jobb oldalán található tábla a "mester" (amely minden átvitelt kezdeményez), a bal oldali tábla a slave (adatra vár). én2A C -nek 2 jelvezetékre és a szokásos tápvezetékekre van szüksége (+, -, SDA, SCL). Mivel ez egy busz, minden eszköz párhuzamosan csatlakozik hozzá.

8. lépés: Alkalmazás: "Game Cube":-)

Alkalmazás
Alkalmazás

Csak egy furcsa gondolat. Ez is beleillik az intro oldalon látható faházba. A hátoldalán 5 gomb található, amelyek egy egyszerű játékhoz használhatók.

9. lépés: Képek / animációk megjelenítése a mátrixon - Quick Hack

Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack
Képek / animációk megjelenítése a mátrixon - Quick Hack

Tehát csak 8x8 képpont és néhány szín áll rendelkezésre. Először használjon valami Gimp -et, hogy kicsinyítse le kedvenc képét pontosan 8x8 képpontra, és mentse el ".ppm" nyers formátumban (nem ASCII). A PPM könnyen olvasható és feldolgozható Perl szkriptben. Az ImageMagick és a "convert" parancssori eszköz használata nem működik megfelelően. Töltse fel az új arduino kódot, majd a Perl parancsfájl segítségével töltse fel a vezérlőbe. A villódzás csak a LED -es frissítés és a fényképezőgép képkockasebességének ellentmondása. A kód egy kis frissítése után eléggé pörgősen fut. Minden kép élőben kerül átvitelre sorozaton keresztül, ahogy látja őket. A hosszabb animációk külső EEPROM-ban is tárolhatók, ahogyan azt a különböző küllős pov táblák teszik.

10. lépés: A tárolt animációk interaktív vezérlése

Miért hagyja, hogy a mikrokontroller szórakozzon? Az Arduino -kultusz a fizikai számítástechnikáról és az interakcióról szól, ezért csak adjon hozzá egy potenciométert, és vegye át az irányítást! A 8 analóg -digitális átalakító bemenet egyikének használata nagyon egyszerű.

11. lépés: Élő videó megjelenítése

A Perl szkript és néhány modul használata nagyon egyszerűvé teszi a kvázi élő videó megjelenítését az X11 rendszereken. Linuxra volt kódolva, és működhet MAC-eken is. Ez így működik:- az egérmutató pozíciójának beállítása- a kurzor középpontjában lévő NxN pixel doboz rögzítése- a kép mérete 8x8 pixelre- elküldése a LED-táblára- ismétlés

12. lépés: Több fény szinte ingyen

Több fény szinte ingyen
Több fény szinte ingyen

Mindössze két lépéssel a fényerő meglehetősen növelhető. Cserélje ki a 270Ω -os ellenállásokat 169Ω -os ellenállásokra, és helyezzen vissza egy másik 74HC595 váltóregisztert az IC5 -re.

Ajánlott: