Ich habe dieses Atmega128 Board: http://www.chip45.com/AVR-Mikrocontroller-System-Platinen/Savvy128-V1-3-ATmega128-USB-RS232-RS485-Echtzeituhr-SD-Karte.html und steuere über SPI dieses Grafikdisplay CTS2432 an: http://www.demmel.com/ilcd/deutsch/cpanel2432.htm Programmiert wird in C mit GCC und AVR Studio Auf dem Display sollen zum einen nahezu statische Zustände (AN, AUS etc.) dargestellt werden und aber auch dynamisch veränderliche. Z.B. vier Bargrafen, also Balken, dessen länge sich ständig mit dem Messwert verändert. Eventuell auch die Farbe oder alternativ als Rundzeiger a´la Tacho. Jetzt ist die Frage wie man das prinzipiell an geht. Ich sehe da mehrere Möglichkeiten: 1.) Ich baue a´ la Fernseher das komplette Displaybild 25x in der Sec. neu auf. 2.) Ich verändere nur die Pixel, die sich ändern müssen. Also wenn der Balken kürzer wird überschreibe ich die Pixel am Balkenende mit der Hintergrundfarbe etc. 3.) So wie ich auf die schnelle in der Beschreibung des Befehlssatzes gesehen habe kann man Bereiche definieren. Hier eventuell für jeden Bargraf den größtnötigen Platz definieren und nur diesen komplett erneuern? Wie würdet ihr das machen oder was ist so üblich? Google und dieses Forum konnte mir auf diese Frage noch keine befriedigende Antwort geben.
Fly schrieb: > 1.) Ich baue a´ la Fernseher das komplette Displaybild 25x in der Sec. > neu auf. Das übernimmt das Display ja schon für dich. > 2.) Ich verändere nur die Pixel, die sich ändern müssen. Also wenn der > Balken kürzer wird überschreibe ich die Pixel am Balkenende mit der > Hintergrundfarbe etc. Das Teil hat massenhaft RAM. Vielleicht beherrscht es sogar overlay oder Kopieraktionen; dann könntest du verschiedene RAM Bereiche als Zwischenspeicher für die Balkengrafik usw. verwenden und dann einblenden/in den sichtbaren Bereich kopieren. > 3.) So wie ich auf die schnelle in der Beschreibung des Befehlssatzes > gesehen habe kann man Bereiche definieren. Hier eventuell für jeden > Bargraf den größtnötigen Platz definieren und nur diesen komplett > erneuern? Das Teil hat "nur" serielle Interfaces, damit kannst du nicht eben mal grössere Datenmengen rumschaufeln. Würde versuchen, beim Boot-Up möglichst alles (Zeichensatz, Grafiken) auf das Modul zu schieben und dann zu verwenden. Ob das intelligente Display das unterstützt, sagt dir sicher das Datenblatt. Viel Spass, sieht interessant aus! :)
Fly schrieb: > Wie würdet ihr das machen oder was ist so üblich? Das Teil hat ja einen eigenen Prozessor, der für sich alleine schon eine Menge kann. Im Grunde hast du da ein kleines Grafikterminal, welches aus Grfikkommandos reagiert. Und genau so wird es dann auch angesteuert: Die Veränderungen werden in Kommandos gefasst und diese Kommandos zum Display geschickt, bzw. die Bereiche entsprechend neu aufgebaut. > 1.) Ich baue a´ la Fernseher das komplette Displaybild 25x in > der Sec. neu auf. Wozu? Das ist doch massig Transfer für nichts. Sofern du mit der Übertragungsrate überhaupt hinkommst. > 2.) Ich verändere nur die Pixel, die sich ändern müssen. > Also wenn der Balken kürzer wird überschreibe ich die > Pixel am Balkenende mit der Hintergrundfarbe etc. Ja. Nur arbeitest du nicht auf Pixelebene, solange das nicht notwendig ist. Ein Balken ist in erster Instanz ein Rechteck. Und genau so teilst du das auch dem Display mit: male ein Rechteck von hier bis hier. Und wenn sich der Balken verändern soll, denkt man sich eine Strategie aus: Wird der Balken länger, dann wird mit der Balkenfarbe der hinzukommende Teil als Rechteck hinzugefügt (oder mglw. der Balken überhaupt komplett als Rechteck neu gezeichnet) wird er kürzer, so deckt ein Rechteck in der Hintergrundfarbe den nun überflüssigen Teil ab. Da du anscheinend meherere Screens zur Verfügung hast, sollte man sich auch Gedanken darüber machen, wie man die für ein Double-Buffering nutzen kann. Änderungen werden zunächst in einem nicht sichtbaren Screen gemacht, und erst dann wenn alle Änderungen fertig sind, wird der bisher nicht sichtbare Screen angezeigt. Auch kann man sich in nicht sichtbaren Screens so etwas wie Sprites zurechtlegen. Also vordefinierte Grfaiken, die als Ganzes aus dem einen Screen ausgeschnitten und in einen anderen Screen eingesetzt werden.
Klasse ich danke euch beiden für die ausführlichen Erläuterungen. Lösung 1 ist wohl damit tot. Möglichst viel das Display arbeiten zu lassen leuchtet mir jetzt auch ein. Nicht nur um den Datentransfer gering zu halten sondern auch mein µC Bord zu entlasten. Die Idee mit dem "Vorbereiten" auf einem unsichtbaren Layer war mir neu. Coole Sache, cooles Forum :-)
So, jetzt weis ich wie das Layout aussehen soll. Im "Layout_01" ist die Originaldarstellung wie sie auf dem Display erscheinen soll. Im "Layout_01_Verteilung" habe ich nach Häufigkeit der zu ändernden Werte eingefärbt. Rot = Häufige Veränderung Blau = Langsame Veränderung Weiß = Statisch Zur Verfügung habe ich "nur 8 Viewports" die ich wie einzelne kleine Displays ansprechen kann. Hat einer eine schlaue Idee wie man das elegant programmiert? Und noch eins, ich finde nichts wie man Schriftgrößen scalieren kann. Also z. B. 24pt für Überschrift und 12pt für Text. Das einzige was mir dazu einfällt ist beide Schriftgrößen als einzelne Schriftsätze an zu legen und dann auf zu rufen. Oder hab ich da was übersehen?
Fly schrieb: > Zur Verfügung habe ich "nur 8 Viewports" die ich wie einzelne kleine > Displays ansprechen kann. Machs nicht zu kompliziert. Du hast 3 'konzeptionelle' Displays. Je eines für EGT, BPC2 und LPG Jedes diese 'Displays' besteht aus einer Caption Aray und den möglichen Balken. Vielleicht ist es auch geschickt, verschiedene Display-Typen zu erfinden, die unterschiedlichen Aufbau haben (wie sich die opere Caption Area zusammensetzt). Musst du entscheiden. Aber mach nicht den Fehler, für jede Kleinigkeit einen eingenen Viewport zu erfinden. Irgendwann kennst du dich nämlich vor lauter Viewports nicht mehr aus. > Schritftgröße Das ist in der Tat interessant. Im PDF steht, dass die ASNI Sequenzen unterstützt werden. Da gibt es auch welche mit der man den Text mit doppelter Höhe ausgeben kann. Mann muss den Text dann auf 2-mal ausgeben: einmal die obere Zeichenhälfte, einmal die untere.
So ich habe fertig :-) Es gibt jetzt für EGT, BPC und LPG je ein Viewport der nur aktualisiert wird wenn wirklich geänderte Daten ankommen. Im Anhang habe ich die Dateien angehängt, zur freien Verwendung, kritisieren und verbessern.
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.