Hallo Leute,
Ich möchte das Hitachi SX14Q004 STN Panel(resistance type) mit einem
FPGA(Spartan 3A) ansteuern.
Datenblatt:
[http://docs-europe.electrocomponents.com/webdocs/0784/0900766b80784957.pdf]
Dieses Display hat eine Auflösung von 320(960 RGB)x240
So wie ich das Datblatt verstanden habe, kann man nur 8 Farben
darstellen.
Das wäre für eine Videoaufnahme etwas sehr wenig.
Allerdings bin ich ein neuling in digitaler Videotechnick.
Ich habe im Forum schon nach ähnlichen Beiträgen gesucht, aber nichts
gefunden was mein Problem behandelt.
Wenn man T = 55us wählt kann man mit 75fps arbeiten.
Ich habe einen Videoinput mit 25fps, dass bedeutet ich sende einfach
drei bilder und bekomme so 512 Farben. Da ich immer vom MSB weg runter
gehe.
Würde das so funktionieren??
Danke für eure Hilfe, schon im Vorraus
Matt wrote:
> So wie ich das Datblatt verstanden habe, kann man nur 8 Farben> darstellen.
Ja.
> Wenn man T = 55us wählt kann man mit 75fps arbeiten.
Ich würde auf 100Hz oder 125Hz gehen.
> Ich habe einen Videoinput mit 25fps,
Wenn das PAL ist, dann hast du 50Hz mit 2 Halbbildern.
> dass bedeutet ich sende einfach drei bilder und bekomme so 512 Farben. Da ich
immer vom MSB weg runter gehe.
Du willst also die Bits binär nacheinander senden? Das geht so nicht.
Mit 3 Bildern kannst du 4 Zustände pro Farbe darstellen, nämlich 0/3,
1/3, 2/3 und 3/3. Das macht 2bit pro Farbe, also 64bit insgesamt.
Du brauchst im Prinzip eine PWM, die in jedem Bild erhöht wird. Und mit
diesem PWM Wert vergleichst du deine Farbinformationen.
Wenn das LCD mit einer höheren Framerate als das Videosignal läuft, dann
musst du das Bild zwischenspeichern. Bei 4bpp wären das 300kBit. Könnte
vom Blockram her bei einem kleineren FPGA knapp werden. Notfalls halt
externes RAM.
Um mehr Farben zu bekommen musst du entweder mehr PWM Stufen machen. Da
dadurch aber die effektive Framerate reduziert wird, ist hier iregenwann
Schluss. Daher verwendet man meist noch ein Dithering um Pseudofarben zu
erzeugen.
PS: Keine Ahnung ob die das beim SX14Q004 behoben haben, aber das
SX14Q001 ist extrem empfindlich auf der CL1 Leitung. Wenn da auch nur
der kleinste Überschwinger drauf ist, macht das LCD irgendeinen Mist.
Erstmal danke für die rasche antwort.
Also ich glaub ich hab das vorhin etwas ungenau beschrieben.
Genauer: Ich bekomme von einem Videodecoder (ADV7183B) alle 37ns
(13,5MHz)
drei 8-bit vectoren (RGB), also eine Farbtiefe von 24bpp.
Ich möchte mir von allen dreien(RGB), natürlich von allen in einer Zeile
und einem Frame, das MSB nehmen und ausgeben, danach nehme ich das
nächste bit usw..
Das bedeutet in Summe(25fps) 9bit R(2:0), G(2:0), B(2:0)
dadurch gebe ich mit 75fps meine drei Bilder aus, jedoch wird es für das
Auge wie ein 25fps Bild mit 512 Farbne wircken. So hab ich mir das
vorgestellt. Liege ich da völlig falsch?
Aja hab was vergessen: kannst du mir irgendeinen link oder so schicken,
wo dithering genauer beschr. ist, oder tutorials. Darüber hab ich schon
gelesen, allerdings nichts detailierteres gefunden.
Matt wrote:
> Das bedeutet in Summe(25fps)
Wie zuvor schon geschrieben: Es sind 50fps.
> dadurch gebe ich mit 75fps meine drei Bilder aus, jedoch wird es für das> Auge wie ein 25fps Bild mit 512 Farbne wircken. So hab ich mir das> vorgestellt. Liege ich da völlig falsch?
Ja, du liegst falsch.
Ein Beispiel:
Bitmuster 110 = 2/3, Bitmuster 011 = 2/3. Auf dem LCD ergibt das die
gleiche Farbe, aber 110 ist heller als 011.
Matt wrote:
> Aja hab was vergessen: kannst du mir irgendeinen link oder so schicken,> wo dithering genauer beschr. ist, oder tutorials.
Kenne ich jetzt auswendig keine. Ordentlich macht man es z.B. so:
http://de.wikipedia.org/wiki/Floyd-Steinberg-Algorithmus
Quick&Dirty ist viel einfacher:
Die 2 höchstwertigen Bits werden für die Graustufen mit PWM genutzt.
Die nächsten z.B. 2bits für Dithering. Diesen Wert rundet man zur
nächsthöheren oder nächstniedrigeren PWM Stufe. Den Fehler der durch das
Runden entsteht, addiert man auf und addiert dazu den nächsten Pixel.
Das führt dazu, dass im Mittel über eine Zeile mehr Zwischenwerte
erzeugt werden, da ein Pixel mal auf und der danebenliegende abgerundet
werden.
aso, jetzt verstehe ich das mit den 2bit von vorhin.
das mit den 50fps ist mir schon klar, nur kann ich nicht ganze Bilder
ausgeben. Muss ich unbedingt zuerst alle odd und dann alle even
ausgeben?
Wenn nicht kann ich das mit den 3 bildern sowieso vergessen.
Also würdest du mir dithering empfehlen, es sieht so aus als bliebe mir
nichts anderes übrig.
danke
Matt wrote:
> das mit den 50fps ist mir schon klar, nur kann ich nicht ganze Bilder> ausgeben. Muss ich unbedingt zuerst alle odd und dann alle even> ausgeben?
Du kannst entweder abwechselnd ODD und EVEN ausgeben, oder du kannst
auch nur eines von beiden verwenden. Das ist im Grunde egal, da das LCD
sowieso nur etwa die halbe Auflösung hat als das Eingangssignal.
Da 50Hz auch zu wenig sind, sollte man das Bild auf jedenfall
zwischenspeichern, und dabei kann man ja auswählen welche Halbbilder man
speichert.
> Also würdest du mir dithering empfehlen, es sieht so aus als bliebe mir> nichts anderes übrig.
Empfehlen ist relativ. Sowohl PWM als auch Dithering sind beide nicht
perfekt, je nachdem wie sehr bewegt die Bilder sind, kann es sein, dass
Dithering sinnvoller ist, als bei stehenden Bildern. In der Praxis
verwendet man meist eine Kombination aus beiden. Die größeren Controller
verwenden meist 16 Stufen PWM und 4 Stufen Dithering. Ich habe mit 8
Stufen PWM + 8 Stufen Dithering gute Erfahrungen gemacht. PWM oder
Dithering alleine ist nur bei wenigen Farbstufen sinnvoll.