Programok kiválasztása az Arduino TV-n. TV könyvtár telepítése
A fordító szava: Egyszer régen, amikor az ország és a fák nagyok voltak, és a képzeletem egyszerűen határtalan volt, volt egy álmom - képes voltam megjeleníteni a képeket az Electronics MK-61 programozható mikroszámológépemről (hát mindenféle grafikonok, görbék vannak , képek) a TV képernyőjén. Vad, késő szovjet idők voltak, és nem csak a játékkonzol és a nagyon személyes MICROcomputer („Pravets 8D” vagy „Specialist” vagy „Siknkler”), hanem a videomagnók is újdonságnak számítottak. Általánosságban elmondható, hogy az emberek látványt követeltek, és akik emlékeznek a programozható számológépekhez készült ismeretterjesztő és szórakoztató kiadványok sorozatára „A Föld útja” általános címmel (Technológia - Ifjúság című folyóirat), megértenek engem.
Röviden: egy jó cselekményű tudományos-fantasztikus regény formájában két idióta alkalmi ismerős - egy hivatásos űrhajós és egy jelentős kibernetikus - utazását írták le a Holdtól a Földig. Az egész cselekménynek az adott különleges élménnyé, hogy az ún. „Lunolet”, azaz egy kis űrhajó vegyi hajtóművel, amelyet a holdak és más égitestek feletti közvetlen láthatóság melletti mozgásra terveztek hasonló a biliárdlabdához egyszerű megkönnyebbüléssel. A ciklus minden száma tartalmazta az egyes manőverek leegyszerűsített, igaz, de megalapozott matematikai leírását, mind a közeli égitest erős (relatív) gravitációs körülményei között, mind akkor, amikor az égi lövedéket a gravitáció hősei befolyásolták. a Föld és a Hold, valamint egy program a repülés következő szakaszának kiszámításához. Általánosságban elmondható, hogy a számológép képernyőjén nem volt elég megnézni a számokat, de gyönyörű íveket akartam a képernyőn (mint az MCC-ben).
Arról viszont ne feledkezzünk meg, hogy az Arduino család primitív mikrokontrollerei is teljesítményükben nagyságrenddel felülmúlják nem csak az akkori zászlóshajók - MK-52 és MK-61 - mikroprocesszorait, hanem egyesek számítási képességeit is. Későbbi idők 8 bites játékkonzoljai (Atary 2600 és más Rambos is igaz).
Általánosságban elmondható, hogy a bevezető kissé hosszadalmasnak bizonyult, úgyhogy térjünk át a mai lecke témájára – az Arduino videoképének megjelenítésére a TV képernyőjén.
Sajnos, tervezési jellemzők Az Arduino csak monokróm (fekete-fehér) képek kiadását teszi lehetővé, bár ez hasznos lehet néhány projektben, és a ChSV mindenképpen felkelti a noobok elméjét...
Első lépés. Alkatrészek és szoftverek
Szükséged lesz:
Alkatrészek és egységek:
- Arduino mikrokontroller
- TV (enélkül nem tudsz menni sehova)
- Fejlesztőtábla vagy pajzs az Arduino számára
- 2 db 470 Ohm névleges értékű ellenállás és 1 Kom
- 2 db két érintkezős dugaszoló adapter
- Árnyékolt tv kábel a végén tulipánnal
Szoftver:
- Arduino fejlesztői/firmware környezet. Hivatalos link
Második lépés. Összeszerelés
A szerző nevében elnézést kérek a nem helyénvalóért alacsony minőségű képek a kész TV-adapterről. Ez azzal magyarázható, hogy az utasítások írásakor először meg kell írni azokat, majd elkezdeni az összeszerelést az összes szakasz gondos fényképezésével. A mi esetünkben minden pontosan az ellenkezője lett, így egyszerűen lehetetlen bármit is megérteni a kész adapter felhős képéből.
Sokkal jobb, hogy mit hova és hogyan kell forrasztani – magyarázza kapcsolási rajz, ráadásul csak néhány részből áll.
Pinout:
Sync - a mikrokontroller digitális érintkezője 9
Videó - a mikrokontroller 8-as digitális kimenete
GND - mikrokontroller GND tű
Harmadik lépés. Programozás
A legszórakoztatóbb része a programozás.
Lényegében már megjelent új verzió A TV-könyvtárak viszont még hibásabb és instabilabb, mint az R5.91, amit a szerző használ, ezért érdemesebb letölteni a könyvtárat a fenti linkről.
Tex program lustáknak, akik túl lusták ahhoz, hogy újra beírják a kódot a képernyő másolatából:
#beleértve
előjel nélküli char x, y; void setup () ( TV.start_render(_NTSC); ) void loop () ( TV.clear_screen (); TV.print_str (10, 10, "TVout FTW!!!"); TV.delay (60); ) Feltételezhető, hogy az alapvető működési elvek és
- Arduino programozás
- – ismer ilyen mikrokontrollereket, ezért a szerző úgy döntött, hogy nem vándorol le a fán, és azt javasolja, hogy ismerkedjen meg az alábbi könyvtári parancsokkal:
- begin(mode) Elkezdi az információk megjelenítését a képernyőn. Normál felbontás - 128x96
- begin(mode,x,y) Elkezdi megjeleníteni az információkat a képernyőn. A felbontást a felhasználó határozza meg az x,y argumentumok segítségével
- end() Videopuffer törlése
- force_vscale(sfactor) Az egyes sorok megjelenítésének kényszerítése.
- force_outstart(time) Kényszeríti a kimenet megkezdésének idejét egy aktív vonalon.
- force_linestart(line) A sor kényszerítése a kimenet megkezdésére.
- set_vbi_hook(func) Állítsa be a függvényt, hogy a függõleges törlési periódusonként egyszer hívja meg.
- set_hbi_hook(func) Állítsa be, hogy a függvényt vízszintes törlési periódusonként egyszer hívják meg.
- char_line() A parancs visszaadja a sorban elférő karakterek számát.
- set_pixel(x,y,color) Állítsa be a pixel színét a megadott koordinátákon
- get_pixel(x,y) A megadott koordinátákkal rendelkező pixelt állítja be referenciapontnak.
- fill(color) A képernyőt kitölti a megadott színnel.
- clear_screen() Törli a képernyőt.
- invert() Megfordítja a képet a képernyőn.
- shift(távolság,irány) A képernyőt egy megadott távolsággal görgeti a 6 irány bármelyikébe.
- rajzol_vonal(x0,y0,x1,y1,szín) Hozzon létre egy vonalat az (x0,y0) koordinátáktól a koordinátákig (x1,y1).
- rajzol_sor(sor,x0,x1,szín) A sort kitölti x0 és x1 közötti koordinátákkal a megadott színnel.
- draw_column(oszlop,y0,y1,szín) Az y0-y1 koordinátákkal rendelkező oszlopot kitölti a megadott színnel.
- draw_rect(x,y,w,h,color,fillcolor) Megrajzol egy téglalapot, amelynek origója az (x,y) koordinátákon, méretekkel (h,w), és kitölti a megadott színnel.
- draw_rect(x,y,w,h,color) Egy téglalapot rajzol, melynek origója (x,y) koordinátái és méretei (h,w) vannak.
- draw_circle(x,y,radius,color,fillcolor) Megrajzol egy kört, amelynek középpontja (x,y) koordinátáinak sugárral (RADIUS) van megadva, és kitölti egy adott színnel
- draw_circle(x,y,radius,color) Megrajzol egy kört, amelynek középpontja (x,y) koordinátákkal és sugárral (SUGÁR) van.
- bitmap(x,y,bmp,i,width,height) A megadott képet koordinátákban jeleníti meg.
- print_char(x,y,c) Egy karaktert nyomtat (x,y) koordinátákon.
- set_cursor(x,y) Beállítja a következő karakter megjelenítési helyét.
- select_font(font) Beállítja a betűtípust a szövegkimenethez.
- print() Szöveg nyomtatása.
- println() Egy sort nyomtat.
- printPGM() Kiír egy sort a program memóriájából.
- hang(frekvencia) Meghatározott frekvenciájú hang.
- hang (frekvencia, időtartam) A megadott frekvenciájú és időtartamú hangjelzés.
- noTone() Leállítja a hangkimenetet.
Negyedik lépés. Befejezés
Ha úgy érzi, hogy Arduino projektje túl kicsi egy 1602-es alfanumerikus kijelzőhöz, feltétlenül nézze meg a TellyMate Shield projektet. Lehetővé teszi, hogy ugyanazokat az alfanumerikus információkat jelenítse meg rendszeres tévé, videó bemeneten keresztül.
Némi szerencsével nagyon lenyűgöző méretű kijelzőt kaphat (ha a TV megfelelő számú hüvelyk átlóval rendelkezik), amely teletype módban működik 38 x 25 helyen. Amikor azonban először rápillant a diagramra, azon kapja magát, hogy egy gyakorlati viccen gondolkodik. Valójában:
Normál ATmega8 bekapcsolva órajel frekvenciája A 16 MHz két videojel komponenst hoz létre, amelyeket két ellenállásból és két diódából álló egyszerű áramkör segítségével kevernek össze. Az S1 kapcsolócsoport beállítja az üzemmódokat; A 75 Ohm-os illesztő ellenállás egy jumperen keresztül van csatlakoztatva, és inkább a sokoldalúság miatt került hozzáadásra (szerintem a legtöbb esetben nem lesz rá szükség).
Az Arduino a soros porton – RX/TX érintkezőkön keresztül adja ki a megjelenítéshez szükséges információkat. Ha megzavarja, hogy a vázlatot ezek segítségével töltik be, és e folyamat során „hülyeségek” jelennek meg a képernyőn, a SoftwareSerial könyvtár segítségével bármelyik tűhöz ugorhat. Támogatott különböző sebességeket, és lehetőség van az automatikus felismerésre is. A legegyszerűbb vázlat így néz ki:
Sorozatszám. kezdődik(57600);
//57k6 baud Serial . println("Szia, világ!");
Sajnos a kép kizárólag fekete-fehérben alakul ki. De belül van egy teljes értékű 437-es kódlap karaktergenerátorunk, amely pszeudografikát tartalmaz:
Valószínűleg észrevette, hogy a videokimenethez 3,5 mm-es audio jack csatlakozót használnak. Valójában ez nem véletlen, hanem egy teljesen tudatos választás, amely korlátozza az elemek magasságát és lehetővé teszi a pajzsok egymásra helyezését:
A normál karakterek kiadása mellett támogatottak az úgynevezett ESCAPE szekvenciák, amelyek vezérlik a kurzort, megduplázzák a karakterek magasságát és/vagy szélességét, sőt fontbankokat váltanak és újradefiniálják a karaktereket (ami azonban csak az ATmega328P-n lehetséges, amely sokkal több memóriával rendelkezik, mint az ATmega8) . Ugyanígy megkaphatja a firmware verzióját és egyéb diagnosztikai információkat. Mivel minden anyag rendelkezésre áll és módosítható, úgy döntöttünk, hogy kísérletezünk egy kicsit, és létrehozunk egy oroszosított változatot ezen a pajzs alapján. A "TellyMate" név, az Arduino-hoz hasonlóan, védjegy - ezért el kellett neveznünk a verziónkat:
Freeduino Telechat Minden részlet PTH, mivel a pajzs eredetileg készlet formátumban készült, önszerelhető - és mi lehet jobb, mint mindent saját kezűleg összeszerelni? ;) Az RX/TX tűk forrasztási jumperekkel rendelkeznek hátoldal
táblák, így kívánság szerint vághatók és forraszthatók bármilyen más csapra. A reset gomb is hasonló módon le van tiltva - ha nem szeretné, hogy az MK pajzs az Arduino vázlattal szinkronban legyen visszaállítva.
Gyors útmutató a pajzs összeszereléséhez: Az Oroszosított betűtípust pontosan úgy helyeztük el, mint a szerzőt - a GDocs-ban található dokumentumra mutató hivatkozás formájában, amelynek másolatát szükség esetén elmentheti magának. IN az utolsó hexadecimális számot generáló könyvjelzőre kell lépni, és be kell másolni a tartalmát a fontbank0.c fájlba, lecserélve a forráskódban (letölthető a projekt oldaláról). A fordítás után megkapja a firmware-t a 866-os kódoldal támogatásával. Ez az ATmega8-ba, amely a Freeduino TeleChat készletben található.
Az orosz szöveg kiadásához további munkát kell végeznie. Mint tudják, az ArduinoIDE az összes karaktert UTF-8 kódolásban tárolja, és a normál működéshez le kell fordítania őket 866 kódolásra. Ezt az eredeti firmware-ben szentségtörésnek tűnt – a szerzők nagyon alaposan kiszámolták a kód összes késését. . Az átkódolási funkció legegyszerűbb változatát kínáljuk:
c1 bájt = 0; void tele_print_char(char cd) ( c bájt = cd; if (c >= 0x80) ( // UTF-8 kezelése if (!c1) ( c1 = c; ) else ( if (c1 == 0xd0) ( if (c) == 0x81) Sorozatszám.print(char(0xf0)); // Yo else Sorozatszám.print ((char ) (c - 0x10)); Sorozatszám) if (c1 == 0xd1) ( if (c == 0x91) Sorozatszám.print(char(0xf1)); // е else Sorozatszám.print ((char ) (c + 0x60));.println("Helló világ!");
tele_print_str("Szia világ!\n\r" ) ;
tele_print_str(betű); ) érvénytelen
- hurok
- () ( // ne csinálj semmit!)
- Egy rövid lecke, amelyben megtudhatja, hogyan kell Arduinót televízióhoz (TV-hez) csatlakoztatni szöveg, információ és grafika megjelenítéséhez.
- Az Arduino számos eszközhöz csatlakoztatható, beleértve a szenzorokat, az elektromechanikus alkatrészeket és akár az egyszerű kijelzőket is. De képzelje el, hogy egy Arduino-t csatlakoztathat a TV-hez, és használhatja szövegek, információk és akár durva grafikák megjelenítésére.
A hagyomány szerint azokkal a részletekkel kezdjük, amelyekre a projekthez szükségünk lesz:
1x - 470 Ohm ellenállás
1x - 1 kOhm ellenállás
1x - TV kompozit videó bemenettel
1x - Kompozit videokábel (RCA csatlakozó)
Azt a sebességet, amellyel a televíziók képsorokat jelenítenek meg mozgóképet alkotva, képkocka per másodpercnek nevezik (más néven FPS). Mivel minden képkocka egy állókép, és ezek a képek soronként rajzolódnak meg a TV-n, a képek egymás után kerülnek elküldésre a TV-re, és minden képpont egyenként kerül elküldésre. De ha a képsor szekvenciális adat, hogyan határozható meg a fényerő? A digitális soros csatlakozástól eltérően a PAL jelek analógok, és a soros vonal feszültsége határozza meg a pixel fényerejét. Az alábbi grafikon a PAL grafikont és a különböző feszültségek értékeit mutatja.
Ha a bemeneti jel 0 V, a TV ezt szinkronjelnek tekinti. A szinkronjel végrehajtásának módjától függően két dolog egyike használható tévéadásra:
- Vízszintes szinkronizálás - készen áll a következő sor megjelenítésére képünkön
- Függőleges szinkronizálás – Készen áll egy teljesen új képre
A 0,3 V és 1 V közötti feszültségek a kép pixelei, ahol a 0,3 V egy fekete, 1 V egy fehér képpont, a közöttük lévő feszültségek pedig szürkék. A színes pixeleket nem takarja el, mivel a szín nagyon összetett a fáziseltolás és a színes sorozatjelek használatával. Tehát hogyan érhetjük el ezeket a feszültségszinteket, ha nincs analóg kimenetünk az Arduino Uno-n? Erre való a két külső ellenállásunk!
Az Arduino Uno, ha a TV Out könyvtárral együtt használja, két érintkezővel rendelkezik: videó és szinkron. A videokimenet a videoadatok (egyes pixelek) továbbítására, az órajel pedig a TV szinkronizálására szolgál. Ez a két érintkező R1-en és R2-n keresztül kapcsolódik egymáshoz, amelyek egy egyszerű potenciálosztót alkotnak, amely a következő feszültségszinteket adja.
TV könyvtár telepítése
Kezdje a letöltéssel, majd kattintson:
Vázlat → Könyvtár hozzáadása → Könyvtárak kezelése
(Vázlat -> Könyvtár hozzáadása -> Könyvtárak kezelése)
A megnyíló könyvtárablakban válassza ki a keresősávot, és írja be a „TV Text” kifejezést.
Ha a keresés befejeződött, válassza ki a TV-szöveg könyvtárat, és kattintson a telepítés gombra.
Az utolsó lépés a beépített példa megnyitása, hogy kipróbálhassuk. Kattintson:
Fájl → Példák → TV-kimenet → Demo PAL
(Fájl → Példák → TV-kimenet → Demo PAL)
A készülék összeszerelése
Ez a projekt kenyérpirítót használ az Arduino Uno két ellenálláshoz és egy kompozit videokábelhez való csatlakoztatásához. Az Arduino csatlakoztatva van a számítógéphez az egyszerű programozás és az áramellátás érdekében, és a beállítás után (a lent látható módon) beprogramozhatja az Arduinót és bekapcsolhatja a TV-t.
Ha minden a tervek szerint halad, valami hasonlónak kell lennie a TV képernyőjén, amely alább látható:
Ez volt az első lecke az Arduino és a TV közötti interakció sorozatában. Ha jó visszajelzéseket kapunk, folytatjuk az ilyen irányú leckék közzétételét. Minden nagyszerű projekt.