Leider wird bei dem nächsten Lauf der alte Messwert nicht überschrieben.
Einzelne Pixel bleiben weiter sichtbar. Nach ca 5 bis 10 Durchlauf ist
nur noch ein schwarzer Fleck auf dem Display.
1
ks0108Puts_P(PSTR(" "));// Ausgabe P
Mit dieser Zeile wollte ich eigentlich den alten Messwert löschen, geht
aber nicht. Das ganze Display kann ich auch nicht löschen und jedesmal
neu schreiben.Die Position stimmt genau, habe ich getestet. Scheinbar
werden die genutzen Pixel angelassen und die neuen dazu geschrieben. Zur
Angabe der Namen und Bezeichnungen lege ich vorher eine Maske drüber und
wollte dann nur noch die Werte ändern. Jemand eine Idee dazu?
achim
Achim S. schrieb:> Hallo Gemeinde> Auf einem Graphikdisplay lasse ich mir Messwerte anzeigen. Alle 200ms> erfolgt eine neue Messung.(C, AT1284p)
Das ist schön. Nur welche Bibliothek genau verwendest Du denn hier?
asdfasd schrieb:> Mittels ks0108SetTransparency(0) das "Mischen" abschalten und einfach> den neuen Text drüberschreiben.
Hm. In der KS0108 Lib die ich hier auf mikrocontroller.net nach kurzer
Suche gefunden habe, gibt es eine solche Funktion nicht. Also gibt es
offenbar verschiedene Libs bzw. Versionen.
Womit wir wieder beim Punkt "Themenersteller, gib bitte vernünftige
Infos" wären.
Eventuell könnte man mit
ks0108FillRect()
arbeiten. Ein gefülltes Rechteck in der Hintergrundfarbe zu zeichnen ist
quasi das Gleiche wie diesen Bereich zu löschen. Danach den Messwert neu
ausgeben, am besten nicht in Hintergrundfarbe :)
Sollte an und für sich hinhauen.
Hallo
ich arbeite mit der Lib von apetech. Bestandteil da von sind:
ks0108DrawLine
ks0108DrawRect
ks0108DrawRoundRect
uint8_t radius, uint8_t color);
ks0108FillRect
ks0108InvertRect
ks0108SetInverted
ks0108SetDot
Das Lib stammt auch von dieser Seite.
Das mit dem Rechteck werde ich testen. Brauche das 8 mal in dieser
Maske.
Hatte beim suchen diese Lib gefunden.
Welche habe ich übersehen?
achim
Durch die Angabe einer Form überschreibe ich den Messwert, Beim nächsten
lauf kommt der neue Wert.
Zu Anfang war es schwierig die genau Position zu finden.
Danke für deine Hilfe
Das Programm soll über den i2C Bus 4 x analoge Daten und 4 x umgrechnete
Spannungen auf einem Display anzeigen.
achim
Achim S. schrieb:> Leider wird bei dem nächsten Lauf der alte Messwert nicht überschrieben.
Tja, du hast die ganze Herangehensweise beim Benutzen von Grafikdisplays
noch nicht verstanden. Das ist im ganz Groben so ähnlich wie das
Zeichnen von Programmoberflächen unter Windows am PC. Man legt sich für
jedes Element einen Bereich zu, den man zu behandeln wünscht: Mit einem
Hintergrund füllen oder in irgend einer Farbe ablöschen (also mit Farbe
füllen) und anschließend das darauf plazieren, was darauf zu sehen sein
soll: eine Ausschrift oder ein Icon oder eine Linie, Kreis etc... Das
muß man bei jedem Aufruf zur Selbstdarstellung des betreffenden
Elementes machen.
So ähnlich geht es auch bei Grafikdisplays am µC zu.
Das läuft dann so etwa auf ein Unterprogramm hinaus, was mal ganz grob
so aussieht:
void ZeichneMesswert(const rect R, int MW)
und dessen Inhalt sieht dann so aus:
- Ablöschen des Rechtecks R
- Wandeln von MW in eine Zeichenfolge
- Zeichenfolge in Rechteck R zeichnen, ggf. passend ausrichten (links,
rechts, mittig, Dezimalpunkt an bestimmter Stelle o.ä.)
W.S.
Sorry, das verstehe ich so nicht.
Durch die Lib werden bestimmte Anweisungen bereit gestellt. Diese
Anweisungen kann man mit Daten versehen, damit an bestimmtem stellen
geometrische Figuren gezeichnet werden können.
Es werden bestimmte Fonts genutzt um bestimmte Zeichensätze in der
gewünschten Art darzustellen. Genauso können auch ganze Bilder auf dem
Display dargestellt werden.
Danach kann man das ganze Display löschen und was neues zeichnen oder
anzeigen.
Habe es so gemacht, eine Maske definiert mit allen notwendigen Anzeigen
und Bezeichnungen. Diese wird zu Beginn einmal aufgerufen. Das Auslesen
der Messwerte, das Umrechnen der Messwerte und die Darstellung in der
Maske erfogt dann alle ca 100 bis 200 ms. Dadurch spare ich mir das
löschen des Displays und den Neuaufbau alle 200ms. Da ich die
notwendigen Berechnungen mit Festkomma ausführe, geht die Anzeige
relativ schnell.
Könntest du es mir etwas klarer darstellen?
achim
Achim S. schrieb:> Sorry, das verstehe ich so nicht.
Dann vielleicht so: vor dem Schreiben neuer Werte den alten Wert noch
einmal in der Hintergrundfarbe schreiben. Damit werden genau die Pixel
gelöscht, die vorher geschrieben wurden.
Danach den neuen Wert anzeigen.
Achim S. schrieb:> Da ich die> notwendigen Berechnungen mit Festkomma ausführe, geht die Anzeige> relativ schnell.
Das geht auch mit float schnell.