. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Grafický kontrolér s dsPIC33
15. července 2010 - 8:24 | Pandatron | Grafický kontrolér s dsPIC33 | Komentářů: 3  

Grafický kontrolér s dsPIC33

Generování grafického video signálu na dsPIC33. V aplikaci je ke generování analogového signálu využito integrované SPI rozhraní a na CPU nezávislá DMA obsluha.

Podnětem k aplikaci video grafického kontroléru s obvodem řady dsPIC33 pro mě byl software, který jsem dříve používal k emulaci terminálu na mém PC. Jeho účelem bylo převádět výstup z procesoru Z80 do grafické podoby. Zdálo se mi však hloupé, využívat gigahertzový a gigabytový stroj jen kvůli zobrazení výstupu z obvodu, pracujícího na jednotkách MHz a kB na konci obvodu. Již dříve jsem měl navíc pro jednu aplikaci vytvořený kód pro řízení dsPIC33 grafického LCD 320 x 240 px, oprášil jsem ho tedy a pokusil se z něho vytvořit univerzální grafické rozhraní.

Po inspiraci z nedávných experimentů Johna Burtona s PAL TV výstupem jsem se rozhodl, že prvním krokem by mělo být přidání podpory TV výstupu. Grafické LCD je sice pěkné, ale poměrně malé a na změny hodnot pixelů reaguje pomalu, takže animace jsou zde velmi rozmazané.


Obr. 1: Několik ukázek grafického výstupu

Myslím, že výsledky jsou poměrně dobré. Značná část kódu je převzata z původní LCD aplikace, což mi umožnilo zobrazit na TV již dříve použité grafické prvky. Navíc televizní výstup představuje pro CPU mnohem jednodušeji realizovatelné rozhraní, než obsluha grafického LCD. Mikrokontroléry PIC totiž na svém čipu integrují rychlé SPI periferní rozhraní, které při nastaveném hodinovém kmitočtu umožňuje vyslat osm nebo šestnáct bitů. Rychlost komunikace i vše ostatní se přitom ovládá jednoduchým zápisem do příslušných registru, což je přímo ideální pro vysílání jednotlivých pixelů a obrazových řádek.

Ještě lepší je využít spojení mikrokontroléru a DMA kanálů, které umožňují zajistit výstup zvoleného počtu bytů nebo slov do vybrané periferie, čtených přitom přímo z určité oblasti RAM bez jakékoliv účasti CPU. Vše co je v tom případě potřeba udělat, je zkopírovat kompletní scanline do paměti DMA, iniciovat převod z RAM do SPI a práce pro CPU v tu chvíli končí. Použití bloku DMA, na rozdíl od přímého zápisu dat do SPI rozhraní, snižuje výraznou měrou rendering. Kupříkladu ukázková implementace Mandelbrot fractal part omezí dobu vykreslování z 33s na pouhých 18s, tedy téměř polovinu.

Bohužel se zde vyskytl i jeden problém, který jsem nebyl schopen efektivně vyřešit. Jde o to, že dsPIC vloží mezi každý DMA / SPI transfer malé zpoždění. V důsledku toho je každý šestnáctý pixel trochu širší, než všech patnáct před ním. To je patrné zvláště při určitých grafických prvcích, periodicky se opakujících. Při modifikaci kódu pro přímé odesílání znaků z RAM do SPI rozhraní tento problém zmizí. Nejsem si však jist, zda mírné zvýšení kvality obrazu stojí za ztrátu volného výpočetního výkonu, tak jsem se rozhodl tento problém neřešit a dvojnásobnou šířku každého šestnáctého pixelu korigovat případně graficky.

Zde je ukázka současného provedení, které již delší dobu s úspěchem provozuji:

Stáhněte si prosím Flash Player pro přehrávání videí.

Co se týče hardwarového provedení, je TV výstup zatížen klasickým 75 ohmovým rezistorem (paralelní kombinací rezistorů). Další dva rezistory jsou využity ve funkci napěťového děliče ze dvou pinů mikrokontroléru, čímž jsou získány standardní napěťové úrovně pro obrazový signál. Tedy 0 V pro synchronizaci, 0,3 V pro černou barvu a 1,0 V pro barvu bílou. V době kdy je televizor odpojen, je na výstupu napětí 3,3 V, neboť zde neexistuje žádná aktivní zátěž, která by pin "stahovala" na 0,3 V. Toto může být rovněž s výhodou použito k detekci připojeného televizoru, nebo PAL/VGA konvertoru.

Pro více informací o použitém principu generování obrazového signálu bych rád odkázal na pěkný článek Jak softwarově generovat video signál s pomocí PIC (How to generate video signals in software using PIC) - Rickard Gunée. Zároveň je pro zájemce k dispozici kompletní zdrojový kód uvedené aplikace, napsaný v jazyce C. Dále je k dispozici i druhá varianta zdrojového kódu, napsaná s využitím SPI ve slave režimu a časovače. Díky pravidelnému hodinovému signálu jsou zde všechny generované pixely stejně široké.

Odkazy & Download:
Domovská stránka autora projektu
dsPIC33 VDC with GLCD or PAL TV output

Controlling a PG320240H-P9 with a dsPIC33FJ128GP802
PAL tv output from PIC
How to generate video signals in software using PIC







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (3):

Zobrazit starší 30 dnů (3)...



Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
BC-NBK AUREL
Přijímač AM 433.92MHz, BW=1,2MHz, -97dBm,+5V/3mA
od 83 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007