Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Textmode / GFXmode Reihenfolge
#1
Hallo,

Wenn ich was auf das LCD schreibe, kommt immer zuerst der Text (#Textmode)
und danach der GFX Teil (#GFXmode).
Auch wenn man die beiden Teile im Skript vertauscht.
Kann man das irgendwie einstellen, damit erst der GFX Teil und dann der Text Teil übertragen wird ?
Dadurch wird mir der Text auf dem LCD immer gelöscht, wenn ich eine Grundgrafik übertrage die das gesamte LCD umfasst.

Gruß,
Rainer
#2
wenn sich die grafik nicht mehr ändert, könntest du diese in den Header rein packen.

Da wirds nur zu Beginn einmalig ausgewertet.
#3
Hallo,

Hatte ich schon ausprobiert.
Da kommt aber auch beim ersten Mal der Text und dann der GFX-Teil.
Ich benutze verschiedene Skriptseiten, jeweils nach Situation, die dann einmal was anzeigt und dann wieder auf eine andere Seite springt.
Da kommt dann kein Text, weil der GFX Teil den Text überschreibt.
Und man kann die Grafik zur Laufzeit nicht mehr verändern.

Gruß,
Rainer
#4
hmmm, versteh ich nicht. meinst du jetzt einen bestimmten lcd treiber oder meinst du rein das scripting? vieleicht kannst du mal ein scriptbeispiel anhängen.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#5
Hallo,

Ich möchte gerne beides (Text/GFX) gleichzeitig benutzen.
Ich muss beim GFX Teil immer das ganze LCD aktualisieren, dadurch wird der Text, der davor geschrieben wurde gelöscht.
Deshalb war meine Idee erst den GFX Teil aufs LCD zu schreiben, und dann den Text zu schreiben.
Da ich weiß wo sich im GFX was befindet, schreibe ich dann den Text in die "leeren" Bereiche.
Da aber der GFX Teil immer danach geschrieben wird, wird der Text immer gelöscht.
Im Header geht es teilweise auch nicht, da ich mit Changescreen auf eine andere Seite wechsle, mit anderem GFX Teil, und nach der Anzeige (3 Sekunden)
wieder zurück zum Hauptscript springe.
Da wird mir der Test wieder durch die Grafik gelöscht.

Deshalb habe ich im Script den GFX vor den TEXT Teil gestellt, hatte aber keine Auswirkung.

Gruß,
Rainer
#6
Hi,

welches LCD hast du denn? Der Textmodus ist normalerweise hardwäremäßig im LCD ein eigener "Layer", da kannst du nix löschen. Ich nehme mal an du hast einen Treiber der den Textmodus grafisch umsetzt. Ist die Frage ob jetzt hier ein rumdrehen der Reihenfolge was bringt, weil normalerweise müsste die Umsetzung des Textmodus auch erstmal das ganze LCD löschen, damit z.B. keine Überbleibsel vom vorherigen Scriptdurchlauf dargestellt werden, bzw. müsste die Umsetzung ein XOR von Text und Grafiklayer machen, so wie es die LCDs meistens tun.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#7
Hallo,

Ich habe ein KS0108 LCD an meinem entwickelten µC.
Da gibt es leider keinen eigenen Layer für Char.
Es gibt nur einen RAMbereich für "beides", bzw die Buchstaben sind als Fonttabelle im µC hinterlegt.
Das µC Programm setzt dann den CharTeil um. Damit kann ich es dann wie ein CharLCD für Text ansteuern.
Auch ein GOTO(X,Y) geht damit.
Deswegen wollte ich erst den GFX Teil schreiben, wenn dann der Text kommt, wird der dann mittels GOTO(X,Y) an die richtige Stelle im LCD geschrieben, wo kein GFX Teil ist.

Im TEXT Teil, löscht mein LCDHype Treiber alle Leerzeichen, wenn vorhanden, vor und hinter dem zu sendenden Text String und schickt den übrigen Text dann mittels GOTO an mein Programm und dann an den µC wo das LCD angeschlossen ist. Damit bleibt dann der GFX Teil im LCD erhalten.

Dazu müsste halt nur der GFX Teil davor kommen, bzw besser wäre wenn man das einstellen könnte.
Z.B. über die Reihenfolge von #GFX und #TEXT im Script. Dann wäre es universell.

Gruß,
Rainer
#8
kannst du dir in deinem mikro controller keinen buffer aufbauen? du müsstest hier also

a) den buffer leeren
b) deine goto anweisungen auf den buffer ausführen
c) die gfx daten in den buffer schreiben jedoch dabei die XOR operation anwenden
d) den buffer ans lcd senden

dann sollte das gehen auch ohne das ich jetzt an lcdhype rumschraube.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#9
Hallo,

So viel Speicher hat der µC nicht.
Ich müsste das Byte dann wieder aus dem LCD auslesen, ändern und wieder zurückschreiben.
Das dauert dann aber viel zu lange.
Und ich müsste immer das gesamte LCD aktualisieren. So schreibe ich einfach den Text.
Das ist wesentlich performanter.

Gruß,
Rainer
#10
Hi,

dann stell doch deinen LCDHype Treiber so um, das er die Daten anders herum an den µC sendet. Sollte doch möglich sein, oder?
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#11
Hallo,

Habe ich gerade mal probiert.
Dann fängt das LCD das flackern an :-(
Könnte man es so umstellen, dass wenn im Header ein GFX steht der zumindest zuerst
kommt, und dann der Text. Das würde auch schon helfen.
Dann kann ich im Header das Hintergrundbild laden und dann den Text drüberschreiben.

Gruß,
Rainer
#12
Schick mir mal bitte den Quellcode zu dem Treiber, das Flackern muss irgendwo ein Fehler im Code sein. Ob ich nun LCDHype anpasse oder der Treiber angepasst wird sollte für den µC keinen Unterschied bedeuten.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#13
Hallo,

Das Flackern kommt von dem 2x LCD überschreiben.
Erst mit GFX dann mit Text. Da ist der µC oder das LCD zu langsam.

Habe es jetzt soweit gelöst, dass ich auf den "Anzeige"-Seiten ein
%Common.SetPriority(1000) eingefügt habe und dann bis 5 zähle bevor ich
auf die nächste Seite springe. In der ersten Sekunde sieht man dann zwar nichts, aber so geht es zumindest.
Schöner wäre es wenn der Header zuerst kommt ;-)

Habe auch bemerkt, dass wenn ein
#GfxMode
/insert gfxmode script code here/
#EndGfxMode

im Skript steht (leer) ein leeres Bild gesendet wird.
Hab ich jetzt mit %Param.SetGfxOutput(0)
abgeschaltet, aber eigentlich sollte bei keinem Inhalt auch cnihts gesendet werden.

Gruß,
Rainer
#14
Hmm, naja ich behalt das mal im Hinterkopf mit der Reihenfolge. Vieleicht kann ich die Tage mal schnell was hexen.

QUOTE

Habe auch bemerkt, dass wenn ein
#GfxMode
/insert gfxmode script code here/
#EndGfxMode

im Skript steht (leer) ein leeres Bild gesendet wird.
Hab ich jetzt mit %Param.SetGfxOutput(0)
abgeschaltet, aber eigentlich sollte bei keinem Inhalt auch cnihts gesendet werden.


Ne, das is korrekt so, genau deswegen gibt es den Befehl %Param.SetGfxOutput(0) auch.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#15
OK, Danke biggrin.gif
#16
so, im anhang mal ne neue version in der die reihenfolge beachtet wird. vieleicht funktioniert das ja sogar, hab gerade leider keine möglichkeit an einem LCD zu testen.


Attached Files
.zip   lcdhype_0761_txtmode_gfxmode_order_fix.zip (Size: 1,08 MB / Downloads: 83)
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#17
Hallo,

Vielen Dank für deine Mühe.

Funktioniert schon recht gut.
Einen Fehler hab ich gefunden.
Wenn im Header eine %Graph Anweisung steht, wird diese zuerst ausgeführt.
Dann kommt der Textteil. Perfekt biggrin.gif

Bei der nächsten Wiederholung wird nochmal der Header ausgeführt/aktualisiert,
aber x-mal, je nachdem wie viele %Graph Zeilen im Header stehen.
Bei der zeiten Wiederholung passt es dann und es wird nur der Text aktualisiert.

Hier ein Beispiel:
#Header
/insert header code here/
%Common.SetPriority(5000)
%Graph.Rect(0, 0, 127,63, 1,0)
%Graph.Rect(86, 0, 127, 63, 1, 0)
%Graph.Rect(0,30, 127, 63, 1, 0)
#EndHeader

Hier wird bei der ersten Wiederholung 3x der GFX Teil vom Header ans LCD geschickt.
Ausgabe:
GFX
TEXT
--- 5Sekunden warten
GFX
GFX
GFX
TEXT
--- 5Sekunden warten
TEXT
--- 5Sekunden warten
TEXT
--- 5Sekunden warten

Gruß,
Rainer
#18
Wie sieht das ganze Script aus? Irgendwas ist da komisch dry.gif
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition
#19
Hallo,

#Header
/insert header code here/
%DefVar(HDDSize,Global=-1)
%Common.SetPriority(5000)
%Graph.Rect(0, 0, 127,63, 1,0)
%Graph.Rect(86, 0, 127, 63, 1, 0)
%Graph.Rect(0,30, 127, 63, 1, 0)

#EndHeader

#GfxMode
/insert gfxmode script code here/
#EndGfxMode#Header

#TextMode
/insert textmode script code here/

%Assign(HDDSize,%Trunc(%Div(%System.Drive(C,Free),1048576),2))
%Format.Overlay(0,1,' '%System.GetDateTime(dd.mm ' ' hh:nn) ' CPU')
%Format.Overlay(0,2,' D: ' %HDDSize()' GB '%System.CPU(Usage)'%')

#EndTextMode

Gruß,
Rainer
#20
Achso, ja das sollte korrekt sein, Beim ersten Durchlauf wird natürlich die ganze Gfx Anzeige gesendet, also gehen nur 1x Gfx Daten zum LCD. Im 2. Durchlauf werden die Bereiche, die durch die 3 Gfx Befehle im 1. Durchlauf erzeugt wurden, gesendet. Hier nun also 3x Gfx Daten ans LCD. Diese Bereiche schimpfen sich "Overlay Areas", das hat was mit animierten Sachen und so zu tun, deswegen wird das standardmäßig gemacht.

Schau dir mal %Param.RenderMode() an. Der Wert Full sollte dir hier weiterhelfen denk ich.
Current stable version of LCDHype: 0.7.6
New plugin: Notepad++ Bookmark Manager
New music: Nordwise - Empire transition


Forum Jump:


Users browsing this thread: 1 Guest(s)