Forum: Mikrocontroller und Digitale Elektronik Meßwerteverlauf auf GrafikLcd darstellen


von Mario E. (Firma: privat) (marioeduardo)


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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

: Bearbeitet durch User
von Uwe B. (uwe_beis)


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.

von S. R. (svenska)


Lesenswert?

Alternativ speicherst du in deinem µC nur die Messwerte in einem 
Ringpuffer und zeichnest jedesmal mit neuem Anfangspunkt den ganzen 
Graphen neu. Dann brauchst du keinen Framebuffer(teil) im Speicher 
halten.

von Tom (Gast)


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.

von S. R. (svenska)


Lesenswert?

Da ein DOG-Display keine Pixelzugriffe erlaubt, duerfte das nicht 
allzuviel bringen.

von HolgerS (Gast)


Lesenswert?

Schau Dir mal die Beiträge von Rolf Degen im Thread:
Library für EA-DOGM Grafikdisplays inkl. Font-Generator
an.

Gruß Holger...

von Mark B. (markbrandis)


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.

: Bearbeitet durch User
von Olaf (Gast)


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

von Mark B. (markbrandis)


Lesenswert?

Olaf schrieb:
> Du brauchst halt einen Controller der genug Speicher hat das der
> Displaypuffer da zweimal reinpasst.

Nicht zwingend. Ohne Double Buffering kann es halt flackern. Aber 
möglich ist es.

von Wolle G. (wolleg)


Lesenswert?

Olaf schrieb:
>> 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. .-)

Solche Sprüche "liebe" ich!!

von Karl H. (kbuchegg)


Lesenswert?

wolle g. schrieb:
> Olaf schrieb:
>>> 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. .-)
>
> Solche Sprüche "liebe" ich!!

Wo er allerdings recht hat, hat er recht.
Auch wenn es nicht politisch korrekt ausgedrückt ist.

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Karl H. schrieb:
> Wo er allerdings recht hat, hat er recht.
> Auch wenn es nicht politisch korrekt ausgedrückt ist.

Der Spruch greift hier meiner Meinung nach aufgrund der Beschränkungen 
der Hardware etwas zu kurz. Man kann auch mit Holz und Spucke ein Haus 
bauen, aber die Frage "Wie macht man das?" ist durchaus berechtigt. ;-)

von Mario EDUARDO (Gast)


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

von Mark B. (markbrandis)


Lesenswert?

Mario EDUARDO schrieb:
> 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...

Wie jetzt? Wenn man einzelne Pixel setzen kann, kann man alles zeichnen 
was das Herz begehrt.

von Noch einer (Gast)


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.

von Karl H. (kbuchegg)


Lesenswert?

Noch einer schrieb:
>> 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.

Wusste gar nicht, dass es auch BWL-Azubis gibt.

von M. K. (sylaina)


Lesenswert?

Karl H. schrieb:
> Wusste gar nicht, dass es auch BWL-Azubis gibt.

Nennt man die nicht auch Germanistik-Studenten? duckundweg :D

von Mario EDUARDO (Gast)


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

von S. R. (svenska)


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.

von spess53 (Gast)


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

von Noch einer (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.