LCD Graphic-Display auteilen

  • 1
  • 2
  • 3
  • Page 2 of 3
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 08.05.2018 - 08:02  ·  #9
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
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 08.05.2018 - 13:06  ·  #10
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
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 08.05.2018 - 20:26  ·  #11
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
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 08.05.2018 - 21:32  ·  #12
Das übliche Problem bei konkurrierendem zugriff auf IOs oder Treiber

rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 09.05.2018 - 11:34  ·  #13
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.
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 09.05.2018 - 11:37  ·  #14
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
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 09.05.2018 - 11:42  ·  #15
Wieso löscht du das vorher? Wenn du die Textattribute richtig setzt, wird automatisch überschrieben - notfalls mit Leerzeichen.
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: LCD Graphic-Display auteilen

 · 
Posted: 09.05.2018 - 11:46  ·  #16
Quote by Harry

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.


Das habe ich am Anfang auch so gemacht, aber wenn Du viele verschiedene Eingaben machen möchtest wird das ziemlich unübersichtlich. Bei mir geht es um ca. 130 verschiedene Einstellungen, Zahlen 2 bis 6 Stellig, IPs, Booleans usw. Deswegen möchte ich hier Funktionen schreiben, die ich in der EIngabe gerade schlafen lege bis was in die Pipe kommt. :-D
  • 1
  • 2
  • 3
  • Page 2 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.028496s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI