closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

LCD Graphic-Display auteilen



pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 09:17   -  
Hallo Leute,

ich möchte gerne die Anzeige in 2 Bereiche aufteilen und unterschiedlich aktualisieren lassen. (siehe Bild).


Der Bereich 1 muss zyklisch aktualisiert werden, der Bereich 2 nur bei Änderungen bzw. bei einer Eingabe.
ich gehe mal davon aus, das bei einem
Code
gDispRefresh;

Immer das ganze Display einen Refresh macht, aber hier könnte man Rechenzeit sparen und das würde ich gerne machen und diese beiden Bereiche irgendwie auftrennen.

Kann ich das irgendwie mit dem Viewports verbiegen?
Wenn ich das richtig verstanden habe, kann ich mit Viewports immer nur den ganzen Bereich umschalten oder?

Thorsten
You must be logged in or your permissions are to low to see this Attachment(s).
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5303
Registered: 03 / 2002
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 11:31   -  
Hallo Thorsten,
ein teilweiser Refresh ist theoretisch denkbar. Aber das würde ziemliche
Mathe benötigen und bringt wahrscheinlich nichts oder nicht viel.
Viewports sind logische Einheiten und wirken sich auf den Display Refresh
nicht aus.

rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 16:08   -  
Hallo Thorsten,

wenn du Probleme mit der Rechenleistung hast, dann spendier doch deinem LCD einen eigenen Prozessor.

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 18:10   -  
Quote by Harry

Hallo Thorsten,

wenn du Probleme mit der Rechenleistung hast, dann spendier doch deinem LCD einen eigenen Prozessor.

Gruss
Harry


Hallo Harry,

Layout und Gerät ist fertig :-) Da wird jetzt nix mehr geändert, EMV ist durch jetzt kommt noch der TÜV :-D

Ich habe da ein paar Punkte, die ich vermeiden möchte:
1. Die Hauptroutine (Türsteuerung) darf zu keiner ZEIT irgendwie
Probleme mit der Abarbeitung bekommen.
2. Das Display Bereich 1 muss regelmäßig aktualisiert werden mind. alle 2s

3. Ich muss mir eine Menüeingabe erzeugen, die ich am besten als Funktion aufrufen kann.
z.B.
Code

 Datum:= getDate( RTCDate );     

Darin sollte auch das Eingabemenü erzeugt werden und mit WaitPipe() würde ich hier gerne auf Tasten, genau an dieser Stelle warten. Aber die Fußzeile muss regelmäßig einen Refresh erhalten. Also kann ich nicht den ganzen DispMenu Process schlafen legen. Deswegen wollte ich das gerne trennen. Und bin gerade am austüfteln einer möglichen Lösung.

Im Moment bin ich am überlegen ob ich noch einen weiteren Task oder Prozess dazu nehme, evtl. so:

Process DispEingabe...
Hier rufe ich de Eingabe und Menüfunktionen auf und lege diese mit WaitPipe() schlafen, wenn keine Daten in der Pipe sind.

Process DispBott...
Hier mache ich die Fußzeile und erzeuge mit "gDispRefresh;" ein Refresh.


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 19:39   -  
Hallo Thorsten,

also wenn du die Schrift in der oberen Zeile noch 1 Pixel höher setzt, so daß oben nur 8 Pixel vertikal upgedated werden müssen, dann brauchst du doch nur den Anfang des Display-RAMs adressieren und vom Display-Array die ersten 256 Byte senden. Unten genau so: Adresse auf den letzten Block und die letzten 256 Byte des Arrays raus schicken.

Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 1-times. Last edit: 07.05.2018 - 19:40 by Harry.
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 19:39   -  
Hallo rolf,

sag mal die Funktion gDispRefresh schreibt doch einfach nur die Daten vom DispRam zum LCD Display oder?

Und das mit der Funktion, CMD 1:
Code
UserDevice GraphIOS (cmd : byte; data : byte);
begin
// commands passed to user defined function "GraphIOS"
// cmd 0 set row address data = row
// cmd 1 write data byte data = content
if cmd = 0 then
  display_address( 0, data);  // set row addr = data

else
  DispBW2RGB( data );
endif;
end GraphIOS;


Oder? Dann könnte ich ja auch gezielt nur den Teil schreiben der für mich aktuell wichtig ist.

@Harry,
genau so meine ich es :-D

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 2-times. Last edit: 07.05.2018 - 19:42 by pvs-deck.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 19:41   -  
Lies mal über deinem letzten Post ;)
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 07.05.2018 - 20:35   -  
Quote by Harry

Lies mal über deinem letzten Post ;)


Sag mal wie komme ich an den Pointer für den Speicher LCDGrapic ?

Hast Du eine Idee dazu?

Nachtrag:

Habe es mir gerade aus dem ASM-Listing gezogen, ich denke das sollte dann die Adresse sein :-)

Code
   viewPtr:= @GraphColArr;


Ist das eigentlich das gleich, wenn ich auf den "ViewPortPTR" zugreife und diesen verwende?
Und sind diese Schlüsselworte irgendwo dokumentiert? Im Handbuch habe ich nichts gefunden.
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
This post has been edited 2-times. Last edit: 07.05.2018 - 21:08 by pvs-deck.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 08.05.2018 - 08:02   -  
Ich schreibe einfach das Array adressiert in das Display. Also
Code

For ii:=0 to 7 do
  // hier Zeile setzen
  For ij:=0 to 31 do
    SPIOutByteE(GraphColArr[(ii*32)+ij]);
    EndFor;
  EndFor;

Natürlich mußt du deine 1-Pixel=4-Bit-Umwandlung dazwischen schieben.

Bei den letzten 8 Zeilen dann
Code

For ii:=56 to 63 do
  // hier Zeile setzen
  For ij:=0 to 31 do
    SPIOutByteE(GraphColArr[(ii*32)+ij]);
    EndFor;
  EndFor;


..... oder eben mit Pointer ;)

Du kannst auch mal schauen, ob der Display-Controller lineares schreiben über den gesamten Speicher unterstützt. Dann reicht es Zeile 0/Spalte 0 zu adressieren und die 256 Byte in einem Rutsch zu schreiben.

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
This post has been edited 3-times. Last edit: 08.05.2018 - 08:05 by Harry.
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 08.05.2018 - 13:06   -  
Quote by Harry

...
..... oder eben mit Pointer ;)

Du kannst auch mal schauen, ob der Display-Controller lineares schreiben über den gesamten Speicher unterstützt. Dann reicht es Zeile 0/Spalte 0 zu adressieren und die 256 Byte in einem Rutsch zu schreiben.


Ja, das Display arbeitet Linear. Habe gestern schon angefangen die Routinen zu erstellen.
Ich muss nun noch die Menüstruktur anpassen, das dauert jetzt einen Moment, die Pipe mit den Tasten läuft schon.

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 08.05.2018 - 20:26   -  
Ich habe jetzt ein komisches Anzeige Problem.
Ich vermute es liegt daran, das ich das Display jetzt von 2 Prozessen beackere. Und beide an verschiedenen Adressen ins Display schreiben. Ich möchte auch nicht bei jedem einzelnen SPIWrite eine Adressierung vornehmen.

Mal schauen ob ich es eingrenzen kann.

Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5303
Registered: 03 / 2002
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 08.05.2018 - 21:32   -  
Das übliche Problem bei konkurrierendem zugriff auf IOs oder Treiber

rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 09.05.2018 - 11:34   -  
Ich mach das mit einer Boolean-Var: alle möglichen Ausgaben/Proceduren/Funktionen/Prozesse setzen diese auf true, wenn eine Ausgabe erfolgt und ein Refresh notwendig ist und an einer Stelle erfolgt dann die Abfrage: Refresh oder nicht.
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
pvs-deck offline
Schreiberling
Avatar
Gender: male
Location: GERMANY 
Age: 47
Posts: 864
Registered: 02 / 2009
Homepage Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 09.05.2018 - 11:37   -  
Quote by rh

Das übliche Problem bei konkurrierendem zugriff auf IOs oder Treiber

Ja, ich hatte das ganze zuerst liniear geschrieben.
Durch die Prozesse wurde mitten im schreiben das ganze unterbrochen.
Ich habe das ganze jetzt Zeilenweise gegen unterbrechen geschützt und jede Zeile neu adressiert. Jetzt läuft es sauber und ich kann in den Display-Eingaben mit WaitPipe diesen Teil einfrieren.

Code
//--------------------------------------------------------------
// Unteren Teil im DispRam löschen Nicht LCD
procedure DispClearUnten;
var
  xiii : word; // Adresse GraphColArr
begin
 For xiii:=1728 to 2048 do
     GraphColArr[xiii]:=$00;
 EndFor;
end DispClearUnten;


Code
//--------------------------------------------------------------
// Oberen Teil im DispRam löschen Nicht LCD
procedure DispClearOben;
var
  xiii : word; // Adresse GraphColArr
begin
 For xiii:=0 to 1727 do
     GraphColArr[xiii]:=$00;
 EndFor;
end DispClearOben;


Code
//-------------------------------------------------------------
// nur die Fußzeile Refresh
procedure DispBottomRefresh;
var
 xDispFor  : byte; // Zeile
 xiDispFor : byte; // Spalte
 xiii      : word; // Adresse GraphColArr
begin
 xiii:=54*32;       // Speicher Adresse für Start setzen

 For xDispFor:=54 to 63 do // Zeile
  LOCK( LCD_DisplBott );  // Lock für Adresse und Zeile
   display_address( 0, xDispFor);  // hier Zeile setzen
   For xiDispFor:=0 to 31 do   // Spalte
     DispBW2RGB( GraphColArr[xiii]);
      inc(xiii);
   EndFor;
  UNLOCK( LCD_DisplBott ); // Nach der kompletten Zeile kann der Process unterbrochen werden
 EndFor;

end DispBottomRefresh;


Code
//-------------------------------------------------------------
// Nur der obere Teil Refresh
procedure DispHeadRefresh;
var
 xDispFor  : byte; // Zeile
 xiDispFor : byte; // Spalte
 xiii      : word; // Adresse GraphColArr
begin
//Oberer Bereich
 xiii:=0; // Speicher Adresse für Start setzen

 For xDispFor:=0 to 53 do // Zeile
  LOCK( LCD_Displ );  // Lock für Adresse und Zeile
   display_address( 0, xDispFor);  // hier Zeile setzen
   For xiDispFor:=0 to 31 do   // Spalte
     DispBW2RGB( GraphColArr[xiii]);
      inc(xiii);
    EndFor;
  UNLOCK( LCD_Displ ); // Nach der kompletten Zeile kann der Process unterbrochen werden
 EndFor;

end DispHeadRefresh;


Thorsten
---------------------------------------------------------
Nichts ist unmöglich in der Elektronik und der Software, die Grenzen
setzt nur das Budget, Zeit und der Entwickler! ( P V S - D E C K )
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 53
Posts: 1360
Registered: 03 / 2003
Private message
Subject: Re: LCD Graphic-Display auteilen  -  Posted: 09.05.2018 - 11:42   -  
Wieso löscht du das vorher? Wenn du die Textattribute richtig setzt, wird automatisch überschrieben - notfalls mit Leerzeichen.
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 19.08.2018 - 22:47