Meßwerteverlauf auf GrafikLcd darstellen

OP (Firma: privat) #4315196
Lesenswert?

Ich möchte gerne den Verlauf von Meßwerten auf einem Grafik LCD 
darstellen, und zwar ähnlich dem Taskmanager von Windows, wo ein großer 
Teil der Fläche, wo der Meßwert dargestellt wird um ein Pixel nach links 
geschoben wird.
Wie macht man das z.B auf den Displays der DOG Serie ? Ich hab dort 
keine passende Funktion gefunden. Gibt es dafür Grafiklibraries; hab 
keine Ahnung wo und wie ich da Anfangen soll. Will halt das evtl 
vorhandene Rad nicht nochmal erfinden.
Danke für Tips, Mario
(Firma: matzetronics) #4315236
Lesenswert?

Mario E. schrieb:
> Ich hab dort
> keine passende Funktion gefunden.

Nö, die meisten Controller der DOG LCD sind 'dumm' und können gerade mal 
Spaltenadresse und Zeilennummer setzen und darauf dann ein Byte 
schreiben.
Das bedeutet, das du MC seitig den Speicher bereitstellen musst, indem 
deine Bilddaten stehen, und diese dann in einem Rutsch aufs Display 
schreibst. Alternativ und wenn es der LCD Controller zulässt, könntest 
du auch Daten vom LCD lesen, shiften (Spaltenadresse setzen) und dann 
wieder zurückschreiben.

Eine für simple Displays einfacherere Strategie ist der 'Oszilloskop' 
Ansatz, bei dem nicht der ganze Graph geschoben wird, sondern nur an 
aktueller Stelle ein neuer Wert eingetragen wird. Wenn der rechte 
Bildrand erreicht ist, gehts links wieder los.
#4315646
Lesenswert?

Ein weiteres Problem bei einer solchen einfachen Lösung wäre ein Raster, 
das üblicherweise fest auf dem Display stehen soll. Also nicht wie beim 
Task-Manager, sondern wie beim Oszi im Roll-Mode.

Ich habe mit einem Grafik-Display mit einem externen Epson-Controller 
gearbeitet. Der bietet die Funktionen, dass ein Bild verschoben 
(umkopiert) wird und gleichzeitig in einer anderen Ebene eine andere 
Hintergrund-Grafik unangetastet bleibt.
Gast #4315816
Lesenswert?

S. R. schrieb:
> Alternativ speicherst du in deinem µC nur die Messwerte in einem
> Ringpuffer und zeichnest jedesmal mit neuem Anfangspunkt den ganzen
> Graphen neu.

Hier könnte man sogar noch etwas Performance herausholen, weil man weiß, 
wo beim letzten Mal das Pixel gesetzt war und es gezielt löschen kann, 
statt die ganze Spalte neuzuzeichnen.
#4315844
Lesenswert?

S. R. schrieb:
> Da ein DOG-Display keine Pixelzugriffe erlaubt, duerfte das nicht
> allzuviel bringen.

Zumindest "mit der groben Kelle skaliert" dürfte das machbar sein. Man 
kann zum Beispiel bei einem EA DOGS104-A bis zu 8 Zeichen selbst 
definieren. Daraus kann man z.B. unterschiedlich hohe Rechtecke machen, 
von 5x1 Pixel bis 5x8 Pixel.

Das oben genannte Display kann 4x10 Zeichen darstellen, also könnte man 
Messwerte z.B. so anzeigen:

1
*     *  *
2
*   * *  *
3
** ***** *
4
**********

Das wären also maximal 10 Messwerte nebeneinander gleichzeitig, bei 
einer vertikalen Auflösung von 4x8 = 32 Stufen (die man hier im Beispiel 
nicht sieht).

Falls man es richtig fein aufgelöst braucht, geht das nur mit 
pixelgenauer Ansteuerung wie Du schon richtig sagst. Dann muss man eben 
ein entsprechend grafikfähiges LCD nehmen.
Gast #4315909
Lesenswert?

> Wie macht man das z.B auf den Displays der DOG Serie ? Ich hab dort
> keine passende Funktion gefunden.

Heb deinen Arsch hoch und programmier es. .-)

> Will halt das evtl vorhandene Rad nicht nochmal erfinden.

Es gibt auch Firmen die einem soetwas verkaufen. Halte ich aber, 
insbesondere bei kleinen Displays nicht so viel von weil das nie optimal 
zur eigenen Anwendung passt. Ausserdem muss man dann auch erst wieder 
Zeit investiern eine fremde Libary zu verstehen und zu integrieren.

Du brauchst halt einen Controller der genug Speicher hat das der 
Displaypuffer da zweimal reinpasst. Bei einem kleinen Grafikdisplay mit 
aktuellen Controllern ja keine grosse Sache mehr. Und dann sind das 
vielleicht ein paar Stunden Arbeit und man hat es laufen und alles 
verstanden.

Olaf
Gast #4316056
Lesenswert?

Also dake für die Infos, ist doch zu Fuß zu programmieren.
Hab jetzt nicht nachgesehen, was die DOG alles kann, hab aber etwa den 
Befehlssatz meiner Anzeige im Kopf; da gibts nix passendes; außer Pixel 
und Linie usw...

Danke, Mario
Gast #4316091
Lesenswert?

> Wo er allerdings recht hat, hat er recht.

Nix da! Ich versuch den Azubis beizubringen, die sollen erst mal 
schauen, ob andere das Problem gelöst haben, bevor sie 5eckige Räder 
erfinden. Und du torpediert hier meine mühevolle Arbeit.
Gast #4316257
Lesenswert?

Dann muß ich mal genau beschreiben was ich will:
Einen Befehl in der Form: Verschiebe in einem Fenster, dessen 
Koordinaten angegeben sind, die Bitmap um x Pixel nach links oder 
rechts.
Mario
#4316306
Lesenswert?

Da gibt es zwei Möglichkeiten:
(a) Der Grafikcontroller kann das bereits.
    Befehl aus dem Datenblatt raussuchen, fertig.
(b) Der Grafikcontroller kann das nicht.
    Dann musst du im RAM den Ausschnitt, den du verschieben können
    willst, vorhalten (Framebuffer), darauf arbeiten und dann immer
    neuzeichnen, wenn sich etwas ändert.
Gast #4316326
Lesenswert?

Hi

>Einen Befehl in der Form: Verschiebe in einem Fenster, dessen
>Koordinaten angegeben sind, die Bitmap um x Pixel nach links oder
>rechts.

Wirst du wohl selbst machen müssen. Dazu musst du dich erst mal mit der 
Organisation des Grafikspeichers des Displays und den Befehlen des 
Displaycontrollers beschäftigen.

Dann hast du zwei Möglichkeiten:

Entweder du beschränkst dich auf Y-Koordinaten n*8 und Höhen von n*8 
Pixeln, also oder auf pixelgenaue Y-koordinate und Höhe.

Ersteres sehe ich als relativ einfach an. Letzteres ist um einiges 
komplizierter.

Ich habe das auch noch nicht gemacht. Allerdings kenne ich etliche 
Dog-Grafikdisplays und benutze andererseits Assembler. Da wüsste ich wie 
ich es angehen würde.

MfG Spess
Gast #4316340
Lesenswert?

Damals, als der Speicher noch knapp war, hat man es anders gemacht. Im 
Speicher war nur die display list mit den Zeichenbefehlen. Zum Pixel 
verschieben wurde die Transformationsmatrix geändert und die display 
list neu gerendert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren