2024. április 23., kedd

Gyorskeresés

Alapvető képmegjelenítés FPGA alapokon

Írta: | Kulcsszavak: fpga . képmegjelenítés . spartan . govinda

[ ÚJ BEJEGYZÉS ]

Helló!

Sikerült egy elektrolumineszcens kijelzőt szereznem egy kiszuperált life-monitor eszközből, 320x256 pixelre és egy szín megjelenítésére képes, árnyalatokra nem.

Manuál: Planar - EL320.256

Van itthon egy Spartan-3E Starter Kit fejlesztői lapkám egy fórumtárs jóvoltából, és ezzel hajtom meg.
Egy jó darabig fogalmam nem volt hogy induljak neki, a manuálban megtalálható időzítési diagramok alapján kezdtem, ezeket akartam egy az egyben lemásolni, de sok sikertelen próbálkozás után elegem lett belőle egy időre.

Egyszer azonban beugrott, hogy egyetemi tananyag volt VGA kijelzők interfészelése, és végülis semmit sem veszíthetek ha kipróbálom a példaprogramot, ami után elsőre természetesen nem működött tökéletesen, de reményre adott okot hogy kaptam képet! Kis idő után rájöttem hogy mi a probléma, nem tetszett neki az órajel meg a horizontal/vertical porchok időzítése, és mivel ISE szimulátorában már láthatóak voltak az adott kimeneteken megjelenő hullámformák, ezeket össze tudtam hasonlítani a manuálban megtalálhatóakkal, és amikor eléggé hasonlított ahhoz, akkor természetesen működött is rendesen.

Első "normális" működés:

Itt pixelenkénti címzés már elérhető teljes mértékben.

A következő elérendő cél amit terveztem az bármilyen fajta képmegjelenítés, tekintve hogy egyelőre ez is csak proof-of-concept projekt, így a legegyszerűbb megoldást választottam, azaz sprite-okat jelenítek meg.
Az ISE BROM generátora nem akart meghajolni az akaratom előtt, így szimplán a chip fabricját használom az adatok tárolására. Kb így:

module prom_DMH(
input wire [3:0] addr,
output wire [0:31] M
);

reg [0:31] rom [0:15];
parameter data = {
32'b00000000000000011100000000000000,
32'b00000000000011001001100000000000,
32'b00000000000001100011000000000000,
32'b00000011111000111110000000000000,
32'b00000111111110000000001111100000,
32'b00001100000111100000111111111000,
32'b00011000000001110001111000011100,
32'b00000000000001110011100000001100,
32'b00000000001111111111000000011100,
32'b00000000011111111110000000111000,
32'b00000000000001110000000001110000,
32'b00011110000000111000000011100000,
32'b00000111000000111100000001100000,
32'b00000011100001111000000000100000,
32'b00000001111111110000000000000000,
32'b00000000011111000000000000000000
};

integer i;

initial
begin
for (i=0; i<16; i=i+1)
rom[i] = data[(511-32*i) -: 32];
end

assign M = rom[addr];

endmodule

Mivel a képernyő minden pixele kettő értéket vehet fel, így minden képet ha a fenti módon akarok megjeleníteni, akkor át kell alakítanom "szöveges bináris" formátumba, azaz egy text file-t hozok létre aminek a tartalma nullák és egyesek sorozata lesz.
Ezt numpy/PIL/scipy segítségével érem el, majd a kelező szöveges file sorai elé beírom a verilogban szükséges prefixet, a fenti esetben 32 bites egy sor tehát 32'b, egy másik generált kép esetén például egy sor 301 karakter hosszú, ez 301 bit, azaz 301'b-t kell a sor elejére tenni.

Ezen szöveges fileokat elhelyeztem a parameter data = { ... } -ba, majd átírtam az M, és az addr értékét, hogy címezhető legyen minden sor, az initialban a feltöltés megvalósításánál is át kell írni pár számot.

Különböző fajta képekkel különféle eredmények születtek, értelemszerűen azok lettek a legjobbak, ahol az eredeti alkotás is fekete-fehér volt, minél nagyobb kontúrral annál jobb.
Komplex, színes képeket nehezen alakít át a szkript, és nagyon fontos neki hogy mekkora a kiindulási anyag.

Eredmények:

Govinda:

Eredetije:

-----------------------------------------------------------------------------------------------------------------------------

Megumin:

Eredetije:

-----------------------------------------------------------------------------------------------------------------------------

Krishna és Arjuna

Eredetije:

-----------------------------------------------------------------------------------------------------------------------------

Krishna:

Eredetije:

-----------------------------------------------------------------------------------------------------------------------------

Narayana:

Eredetije:

-----------------------------------------------------------------------------------------------------------------------------

Kártyával:

Mivel csakis proof-of-concept, nem azzal foglalkoztam hogy mennyi erőforrást eszik egy kép megjelenítése (nagyon sokat), a fejlesztőkártyán azonban található flash és ram is, a jelenlegi to-do az ezek felhasználása hasonlóan képek megjelenítésére.

Hozzászólások

(#1) hcl


hcl
félisten
LOGOUT blog

Elég frankó! :R Jó kis kijelző, hogy csak ilyen kevés vezeték kell a vezérléshez :D Van pár bontott HFG12864-em, annak a meghajtása ehhez képest elég horror lenne...

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#2) y@g4n


y@g4n
tag

Köszi!
19 pint használ a 30 ból, az kb még élhető, egy 60 pines board to boardos érintős színest bontottam nemrég, hobby elektro topikban kérdeztem bármi ötletet hozzá [link] de érthető módon nem kaptam helpet egyelőre :) .

[ Szerkesztve ]

हरि बोल | हरे कृष्ण हरे कृष्ण कृष्ण कृष्ण हरे हरे हरे राम हरे राम राम राम हरे ह रे

(#3) hcl válasza y@g4n (#2) üzenetére


hcl
félisten
LOGOUT blog

19???? A képen látok kb. ötöt...
Ja, elég kevesen értenek itthon az ilyen LCD-khez, mint amit kérdeztél, valószínű az ilyen kérdéseket nem itt érdemes feltenni. :(
Én programozós topicokban szoktam olyanokat kérdezni, amire semmi válasz :D

Mutogatni való hater díszpinty

(#4) y@g4n


y@g4n
tag

Az általad említett 30 pines használ "csak" 19-et.
Teljesen logikus, de nem jutott eszembe külföldin megkérdezni!
Köszönöm az ideát!

हरि बोल | हरे कृष्ण हरे कृष्ण कृष्ण कृष्ण हरे हरे हरे राम हरे राम राम राम हरे ह रे

(#5) hcl válasza y@g4n (#4) üzenetére


hcl
félisten
LOGOUT blog

Ja... de egy Arduinon az is sok, meg a fenének volt kedve kiépíteni mellé az áramkört csak azért, hogy legyen egy 128-as kijelzőm :D

Mutogatni való hater díszpinty

(#6) y@g4n


y@g4n
tag

Teljesen jogos :R

हरि बोल | हरे कृष्ण हरे कृष्ण कृष्ण कृष्ण हरे हरे हरे राम हरे राम राम राम हरे ह रे

(#7) #90088192 válasza hcl (#1) üzenetére


#90088192
törölt tag

Ha érdekel már neki estem, igaz PIC az alany.

(#8) hcl válasza #90088192 (#7) üzenetére


hcl
félisten
LOGOUT blog

Ez nem HFG12864-hez van...
De különben kemény, a fene tudna ilyen szinten C-ben... :Y :R

Mutogatni való hater díszpinty

(#9) #90088192 válasza hcl (#8) üzenetére


#90088192
törölt tag

Az nem 128X64 bit 1 színű, 2X64 blokkra osztva, 8 bites adat bemenet/kimenet plusz 2 bit parancs, plusz a tobbi sallang?

Nem tudok, csak próbálkozok :C .

[ Szerkesztve ]

(#10) hcl válasza #90088192 (#9) üzenetére


hcl
félisten
LOGOUT blog

De, az lehet.
Amúgy Arduinora van is rá library, az nem gond, de többet kéne melózni a meghajtóáramkörrel, mint azzal, amibe be akarom építeni :D

[ Szerkesztve ]

Mutogatni való hater díszpinty

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.