Barevny LCD 640x480 k x51,PIC,AVR ... taky trochu komerce

Jiri Bezstarosti jiri@bezstarosti.cz
Pondělí Listopad 5 19:08:35 CET 2007


Zdravim.

Podarilo se mi vytvorit radic barevneho LCD displeje 640x480. Mnou 
pouzity displej ma 5.7", 640x480x18b a touchscreen.

Asi nejprve obrazek:
http://www.siliconbrain.biz/x/tft640x480.jpg
Text je tam ten prvni, ktery jsem chytil do ruky ;) a obrazek po malem 
vyberu z webu. Foto to neni nic moc, je dokumentacni, udelane v 
rychlosti, ale pro jakysi nahled ze to funguje myslim staci. Co by ale 
mohlo zaujmout, procesor ktery to temi daty ke zobrazeni nakrmil, je 
obycejna PICka, i kdyz trochu lepsi, PIC18 ;).

Protoze jsem si kladl pozadavek mit moznost jej pouzit prakticky s 
cimkoli, je radic koncipovan tak, abych mohl displej pouzit opravdu s 
ledascim (i s 8bit MCU). Takze vysledek je, ze se pro CPU/MCU chova 
displej s radicem jako kus pameti, kam co vlozim, to se zobrazi. Zadna 
inicializace, zadne velke opicarny, proste A0 az A18, D0 az D7 a OE (RD) 
a WE (WR) signaly.

Pri rozliseni 640x480 je dat pomerne hodne, proto jsem snizil pocet 
barev na 256 (8b RGB 3b-3b-2b), coz je pro mnoho aplikaci stale 
dostatecne a setri mi to vyrazne pamet u toho co ta data do toho vklada. 
Dalsi veci je, ze zapisy vetsich kusu pameti pomalym MCU nemusi byt 
prilis rychle (tech bodu muze byt k prekresleni dost) a proto jsem 
zavedl 2 stranky. Pak mam jednu stranku nastavenu pro zobrazeni (co v ni 
je se zobrazuje) a druhou stranku k zapisum a cteni. Tim mohu stranku 
vykreslit a pak jen stranky prehodit, coz dela dojem okamziteho 
prekresleni (kdo pise hry to asi zna). Zaroven se stranky prehazuji jen 
po kazdem celem obrazu, takze mohu prehodit stranky, pockat na prehozeni 
a tim si synchronizovat vytvareni jednotlivych snimku. Mohu ale take 
zapsat do jedne stranky, stranky prehodit a do druhe zapsat totez, coz 
se mi muze hodit treba pro pismena. Pro posuv obrazovky treba o pixel 
mam dve stejne stranky a pak jednu posunu o pixel, prehodim stranky, 
presunu o 2 pixely a pak uz po 2 ... zkratka to uz jsou zpusoby jak s 
timhle resenim pracovat.

Vysledkem je tedy radic, ktery resi to co male MCU nezvladnou (LCD 
samotne je tady krmeno 25MB/sec) a umoznuje je k displeji pripojit. Ja 
vim, ze urcite nekdo namitne, ze nema tolik pameti, aby mohl zobrazit 
byt i jeden jediny obrazek. Ale kdyz se na to podivame k cemu to je, 
budeme vykreslovat nekolik spritu (lepit kousky bitmap) a psat texty. 
Pokud mam fonty 8x10 bodu (8x8 uz jsou fakt dost male, ale i tak slusne 
citelne), cela znakova sada zabere 2560B (rastrovym fontum staci bit na 
bod), pokud tedy implementujeme vsech 256 znaku - v mnoha aplikacich 
jich ale bude stacit i jen 96.

Prvni testy jsem provedl s PIC18F452 na 40MHz a signaly generuji softem. 
Pracuje to prima, ale treba posuv obrazovky uz holt chvili trva (asi tak 
sekundu), ono presunout 300kB (takze precist a ulozit) timhle zpusobem 
neni nic moc. Pokud jde ale o vlastni radic, chova se jako 30ns SRAM, 
takze rychlym MCU/CPU se da uzivit i plnych 60 obrazku / sec - pouzity 
LCD je 60Hz (coz je asi dnes bezne), takze pokud mam CPU/MCU s trochu 
sviznejsi sbernici pro pripojeni SRAM ...

Pamet lze cist i zapisovat a to tak, ze jedna stranka (512kB) se 
zobrazuje a druha se muze cist a zapisovat. Prehozeni stranek se deje na 
adrese nad obrazovou pameti displeje a ctenim se zjistuje, zda uz je 
prehozeno. Na dalsi adrese se ridi podsviceni v rozsahu 0 az 15 (0 
nesviti, 15 plny jas).

Pouzity displej ma LED podsviceni a cele to beha napajeno z 5V (vcetne 
podsviceni), pricemz to nevezme vice nez 500mA pri plnem svitu. Radic je 
3.3V, ale ma 5V tolerantni vstupy a stabilizator 3.3V je rovnou na desce 
radice.

Zatim je to bastl na stole, ale chystam se to dat dohromady do sendvice 
s displejem. Takze to berte jako jakysi report, ze se neco takoveho deje 
a pokud by to nekdo v budoucnu chtel delat, ze je to mozne a nebo ze uz 
to nekdo ma a pujde to koupit. Jeste resim touchscreen, bude zrejme jako 
vystupy napeti pro osy X a Y.

A jeste mozne aplikace. Jiste jich kazdy objevi dost, tak uvedu treba 
ruzne meraky, digitalni osciloskop, terminal, ovladani ruznych stroju a 
pristroju, zakres podvesu s raketami v aute ;))), umely horizont a ruzne 
budiky do ultralightu, velice komfortni nabijecka aku, neco jako PDAcko 
s obycejnym MCU, kapesni diar a nebo jen nacrtnik s poradnym displejem 
(a po pripojeni Vinculum i s poradnym FLASH diskem) ... atd. atp. a 
pritom se takova parada da navesit treba na i na obycejne MCU s 
potrebnymi IO k dispozici,  treba ATMEGA128, PIC18F8722 atp. 
Pochopitelne s lepsim MCU je mozno delat vetsi divy.

Pokud se nekdo zepta, proc tohle a ne rovnou CPU/SoC s radicem, pak mu 
odpovim, ze protoze to chci mit moznost pouzit s cimkoli co kdo umi (dat 
moznost pripojit takovy displej k MCU snad uplne kazdemu) a doufam, ze 
jsem se prilis nespletl a bude to chtit lidi vic. Vetsina SoC je pak v 
BGA, coz spouste lidi take muze vzit chut je pouzivat.

Cenu celeho displeje vcetne radice predpokladam kolem 6kKc, tedy neni to 
mysleno pro nejake vylozene low-endy, ale pro veci, ktere treba ani nic 
moc sileneho nedelaji, ale jsou z nejakeho duvodu drazsi nez par stovek 
a musi dobre vypadat. Jiste ze nektere SoC s Linuxem tohle resi taky, 
ale uz jsem mel s necim takovym co do cineni a ta spolehlivost, to bylo 
pekne bebicko ... zlate hloupe osmibity bez OS. Nektere veci holt musi 
bezet od zacatku do konce a nelze je dodatecne zaplatovat. A nakonec je 
vzdycky lepsi napsat neco i pro neco horsiho (myslim pomalejsiho a treba 
osmibitoveho), kdyz to dokonale umim ;).

--
Jiri Bezstarosti



Další informace o konferenci Hw-list