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
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
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.
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.
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.
Da ein DOG-Display keine Pixelzugriffe erlaubt, duerfte das nicht allzuviel bringen.
Schau Dir mal die Beiträge von Rolf Degen im Thread: Library für EA-DOGM Grafikdisplays inkl. Font-Generator an. Gruß Holger...
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
> 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
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.
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!!
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
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. ;-)
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
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.
> 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.
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.
Karl H. schrieb: > Wusste gar nicht, dass es auch BWL-Azubis gibt. Nennt man die nicht auch Germanistik-Studenten? duckundweg :D
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.