Obsah:

64 Pixel RGB LED displej - další klon Arduino: 12 kroků (s obrázky)
64 Pixel RGB LED displej - další klon Arduino: 12 kroků (s obrázky)

Video: 64 Pixel RGB LED displej - další klon Arduino: 12 kroků (s obrázky)

Video: 64 Pixel RGB LED displej - další klon Arduino: 12 kroků (s obrázky)
Video: Arduino návody | OLED displej 128x32 SSD1306 I2C 2024, Listopad
Anonim
64 Pixel RGB LED displej - další klon Arduino
64 Pixel RGB LED displej - další klon Arduino
64 Pixel RGB LED displej - další klon Arduino
64 Pixel RGB LED displej - další klon Arduino
64 Pixel RGB LED displej - další klon Arduino
64 Pixel RGB LED displej - další klon Arduino

Tento displej je založen na matici LED 8x8 RGB LED. Pro účely testování byl připojen ke standardní desce Arduino (Diecimila) pomocí 4 posuvných registrů. Poté, co jsem to dostal do práce, jsem to permatizoval na fabbed PCB. Posuvné registry jsou široké 8 bitů a lze je snadno propojit s protokolem SPI. K míchání barev se používá modulace šířky pulsu, o tom později. Část paměti MCU RAM je použita jako framebuffer pro uložení obrazu. Video RAM je na pozadí analyzováno rutinou přerušení, takže uživatel může dělat další užitečné věci, jako je rozhovor s počítačem, tlačítka pro čtení a potenciometry. Více informací o „Arduino“: www.arduino.cc

Krok 1: Modulace šířky pulsu pro míchání barev

Modulace šířky pulsu pro míchání barev
Modulace šířky pulsu pro míchání barev

Modulace šířky pulzu - CO? Modulace šířky impulzu v podstatě zapíná a vypíná napájení přiváděné do elektrického zařízení poměrně rychle. Použitelný výkon vyplývá z matematického průměru funkce čtvercových vln převzaté v intervalu jedné periody. Čím déle funkce zůstane v poloze ON, tím více energie získáte. PWM má stejný účinek na jas LED jako stmívač na střídavých světlech. Úkolem dopředu je individuálně ovládat jas 64 RGB LED (= 192 jednotlivých LED!) Levným a snadným způsobem, aby bylo možné získat celý spektrum barev. Přednostně by nemělo docházet k blikání nebo jiným rušivým efektům. Nelineární vnímání jasu vykazované lidským okem zde nebude bráno v úvahu (např. Rozdíl mezi 10% a 20% jasu se zdá „větší“než mezi 90% a 100%). Obrázek (1) ilustruje pracovní princip algoritmus PWM. Řekněme, že kódu je dána hodnota 7 pro jas LED (0, 0). Navíc ví, že jas je maximálně N kroků. Kód spouští N smyček pro všechny možné úrovně jasu a všechny potřebné smyčky pro obsluhu každé LED ve všech řadách. V případě, že je počitadlo smyčky x ve smyčce jasu menší než 7, rozsvítí se LED. Pokud je větší než 7, kontrolka LED zhasne. U všech LED diod, úrovní jasu a základních barev (RGB) to lze provést velmi rychle, každou LED lze individuálně upravit tak, aby zobrazovala požadovanou barvu. Měření pomocí osciloskopu ukazují, že obnovovací kód displeje trvá přibližně 50% času CPU. Zbytek lze použít k sériové komunikaci s PC, čtení tlačítek, rozhovoru se čtečkou RFID, odeslání I2Data C do jiných modulů…

Krok 2: Mluvení s posuvnými registry a kontrolkami LED

Mluvit s posuvnými registry a LED diodami
Mluvit s posuvnými registry a LED diodami
Mluvit s posuvnými registry a LED diodami
Mluvit s posuvnými registry a LED diodami

Posuvný registr je zařízení, které umožňuje načítání dat sériově a paralelně. S příslušným čipem je možná i opačná operace. Na webu arduino je dobrý návod na posuvné registry. LED diody jsou poháněny 8bitovými posuvnými registry typu 74HC595. Každý port může dodávat nebo odebírat asi 25mA proudu. Celkový proud na jeden čip potopený nebo získaný by neměl překročit 70 mA. Tyto čipy jsou extrémně levné, takže za kus neplatíte více než asi 40 centů. Protože LED diody mají charakteristiku exponenciálního proudu / napětí, musí existovat odpory omezující proud. Pomocí Ohmova zákona: R = (V - Vf) / IR = omezující odpor, V = 5V, Vf = dopředné napětí LED, I = požadovaný proud Červené LED diody mají dopředné napětí asi 1,8 V, modrý a zelený rozsah od 2,5 V do 3,5 V. K určení toho použijte jednoduchý multimetr. Pro správnou reprodukci barev je třeba vzít v úvahu několik věcí: spektrální citlivost lidského oka (červená/modrá: špatná, zelená: dobrá), účinnost LED při určité vlnové délce a proudu. V praxi si jednoduše vezmete 3 potenciometry a nastavujete je, dokud LED dioda neukáže správné bílé světlo. Samozřejmě nesmí být překročen maximální proud LED. Zde je také důležité, že posuvný registr pohánějící řádky musí dodávat proud 3x8 LED, takže raději netlačte proud příliš vysoko. Byl jsem úspěšný s omezujícími odpory 270 Ohmů pro všechny LED diody, ale to samozřejmě závisí na značce LED matice. Posuvné registry jsou propojeny se sériovým SPI. SPI = Serial Peripheral Interface (Image (1)). Na rozdíl od sériových portů na PC (asynchronní, bez hodinového signálu) SPI potřebuje hodinovou linku (SRCLK). Pak je tu signální linka, která zařízení říká, kdy jsou data platná (výběr čipu / západka / RCLK). Nakonec existují dvě datové linky, jedna se nazývá MOSI (master out slave in), druhá se nazývá MISO (master in slave out). SPI se používá k propojení integrovaných obvodů, stejně jako já2C. Tento projekt potřebuje MOSI, SRCLK a RCLK. Kromě toho se používá také linka pro povolení (G). Cyklus SPI se spustí zatažením čáry RCLK do polohy LOW (obrázek (2)). MCU odesílá svá data na linku MOSI. Jeho logický stav je vzorkován posuvným registrem na stoupající hraně čáry SRCLK. Cyklus je ukončen zatažením linie RCLK zpět na HIGH. Nyní jsou data k dispozici na výstupech.

Krok 3: Schéma

Schéma
Schéma
Schéma
Schéma

Obrázek (1) ukazuje, jak jsou posuvné registry zapojeny. Jsou řetězově propojeny, takže data lze přesouvat do tohoto řetězce a také přes něj. Přidání dalších posuvných registrů je proto snadné.

Obrázek (2) ukazuje zbytek schématu s MCU, konektory, křemenem … Přiložený soubor PDF obsahuje celá díla, nejlepší pro tisk.

Krok 4: C ++ zdrojový kód

C ++ zdrojový kód
C ++ zdrojový kód
C ++ zdrojový kód
C ++ zdrojový kód
C ++ zdrojový kód
C ++ zdrojový kód

V C/C ++ obvykle člověk musí před kódováním funkce prototypovat.#Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } Arduino IDE tento krok nevyžaduje, protože prototypy funkcí jsou generovány automaticky. Prototypy funkcí se proto nezobrazí v zde uvedeném kódu. Image (1): setup () functionImage (2): spi_transfer () function using hardware SPI of the ATmega168 chip (runs faster) Image (3): framebuffer code using přerušení přetečení timer1. Kusy kódu, které mají pro začátečníky mírně kryptický vzhled, např while (! (SPSR & (1 << SPIF))) {} přímo použít registry MCU. Tento příklad slovy: „zatímco SPIF bit v registru SPSR není nastaven, nedělejte nic“. Chci jen zdůraznit, že u standardních projektů opravdu není nutné zabývat se těmito věcmi tak úzce souvisejícími s hardwarem. Začátečníci by se toho neměli děsit.

Krok 5: Hotový gadget

Hotový gadget
Hotový gadget
Hotový gadget
Hotový gadget
Hotový gadget
Hotový gadget

Poté, co jsem vyřešil všechny problémy a spustil kód, stačilo vytvořit rozvržení desky plošných spojů a odeslat jej do fabrického domu. Vypadá to mnohem čistěji:-) Obrázek (1): plně osazená řídicí deska Obrázek (2): přední strana holého PCB Obrázek (2): zadní strana Existují konektory vylamující PORTC a PORTD čipu ATmega168/328 a 5V/GND. Tyto porty obsahují sériové linky RX, TX, I2C linky, digitální I/O linky a 7 ADC linek. Toto je určeno ke stohování štítů na zadní stranu desky. Rozteč je vhodná pro použití perfboardu (0,1 palce). Zavaděč lze flashovat pomocí hlavičky ICSP (funguje s USBtinyISP od adafruit). Jakmile to bude hotové, použijte standardní sériový adaptér FTDI USB/TTL nebo podobný. Také jsem přidal propojku pro automatické resetování a deaktivaci. Také jsem připravil malý skript Perl (viz můj blog), který umožňuje automatické resetování pomocí kabelů FTDI, které obvykle nefungují po vybalení (řada RTS vs. DTR). Funguje to na Linuxu, možná na MAC. Na mém blogu jsou k dispozici tištěné obvody a několik DIY KITů. Je vyžadováno pájení SMD! Pokyny k sestavení a zdroje pro matice LED najdete v souborech PDF.

Krok 6: Aplikace: Monitor zatížení procesoru pro Linux pomocí Perlu

Toto je velmi základní monitor zátěže s historií. Je založen na skriptu Perl, který shromažďuje „průměr zatížení“systému každých 1 s pomocí iostat. Data jsou uložena v poli, které je při každé aktualizaci posunuto. Na začátek seznamu se přidají nová data, nejstarší záznam se vytlačí. Podrobnější informace a soubory ke stažení (kód …) jsou k dispozici na mém blogu.

Krok 7: Aplikace: Mluvení s jinými moduly pomocí I²C

Aplikace: Mluvení s jinými moduly pomocí I²C
Aplikace: Mluvení s jinými moduly pomocí I²C

Toto je jen důkaz principu a zdaleka ne nejjednodušší řešení pro tuto práci2C umožňuje přímé adresování až 127 desek "slave". Zde je deska na pravé straně ve videu „master“(která iniciuje všechny přenosy), levá deska je slave (čeká na data). Já2C potřebuje 2 signální vedení a obvyklé napájecí vedení (+, -, SDA, SCL). Jelikož se jedná o sběrnici, jsou k ní připojena všechna zařízení paralelně.

Krok 8: Aplikace: „Game Cube“:-)

Aplikace
Aplikace

Jen podivná myšlenka. Tato se také hodí do dřevěného krytu zobrazeného na úvodní stránce. Na zadní straně má 5 tlačítek, která by mohla být použita pro hraní jednoduché hry.

Krok 9: Zobrazení obrázků / animací na Matrixu - Quick Hack

Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack
Zobrazení obrázků / animací na Matrixu - Quick Hack

K dispozici je tedy pouze 8x8 pixelů a několik barev. Nejprve použijte něco jako Gimp, abyste zmenšili svůj oblíbený obrázek přesně na 8x8 pixelů a uložili jej jako surový formát „.ppm“(nikoli ASCII). PPM se snadno čte a zpracovává ve skriptu Perl. Použití ImageMagick a nástroje „převést“na příkazovém řádku nebude fungovat správně. Načtěte nový arduino kód a poté pomocí skriptu Perl nahrajte do ovladače. Blikání je pouze nesoulad mezi obnovou LED a obnovovací frekvencí mého fotoaparátu. Po trochu aktualizaci kódu běží docela zippy. Všechny obrázky jsou přenášeny živě po sérii, jak je vidíte. Delší animace lze ukládat do externí paměti EEPROM, jako se to děje v různých tabulích mluvených pov.

Krok 10: Interaktivní ovládání uložených animací

Proč nechat mikrokontrolér mít veškerou zábavu? Kult Arduino je o fyzickém počítání a interakci, takže stačí přidat potenciometr a převzít kontrolu! Použití jednoho z 8 vstupů analogového na digitální převodník to velmi zjednodušuje.

Krok 11: Zobrazení živého videa

Pomocí skriptu Perl a několika modulů je docela snadné zobrazovat kvazi živé video na systémech X11. Byl kódován na linuxu a může fungovat i na MAC. Funguje to takto:- získejte pozici kurzoru myši- zachyťte pole pixelu NxN se středem na kurzoru- zmenšete obrázek na 8x8 pixelů- odešlete jej na LED desku- opakovat

Krok 12: Více světla téměř zdarma

Více světla téměř zdarma
Více světla téměř zdarma

Pouhými dvěma kroky lze jas docela zvýšit. Vyměňte odpory 270Ω za 169Ω a zapojte další posuvný registr 74HC595 na IC5.

Doporučuje: