tévék. Konzolok. Projektorok és tartozékok. Technológiák. Digitális TV

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:

  1. Arduino mikrokontroller
  2. TV (enélkül nem tudsz menni sehova)
  3. Fejlesztőtábla vagy pajzs az Arduino számára
  4. 2 db 470 Ohm névleges értékű ellenállás és 1 Kom
  5. 2 db két érintkezős dugaszoló adapter
  6. Árnyékolt tv kábel a végén tulipánnal

Szoftver:

  1. 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 TVout TV;

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)); ) c1 = 0;) ) mást .print(cd); ) void tele_print_str(char *s) ( for (int i=0;i; Sorozatszám beállítást Sorozatszám() (kar betű = "ABVGDEYEZHZIYKLMNOPRSTUFHTSCHSHSHSHYYYYYUYA".begin(57600) ;

.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.



Kapcsolódó kiadványok