LCD Graphic-Display auteilen

  • 1
  • 2
  • 3
  • Seite 2 von 3
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2160
Dabei seit: 03 / 2003
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 08.05.2018 - 08:02 Uhr  ·  #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
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 08.05.2018 - 13:06 Uhr  ·  #10
Zitat geschrieben von 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
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 08.05.2018 - 20:26 Uhr  ·  #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
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: LCD Graphic-Display auteilen

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

rolf
Harry
Moderator
Avatar
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2160
Dabei seit: 03 / 2003
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 09.05.2018 - 11:34 Uhr  ·  #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
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 09.05.2018 - 11:37 Uhr  ·  #14
Zitat geschrieben von 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
Geschlecht:
Herkunft: zwischen Augsburg und Ulm
Alter: 60
Beiträge: 2160
Dabei seit: 03 / 2003
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 09.05.2018 - 11:42 Uhr  ·  #15
Wieso löscht du das vorher? Wenn du die Textattribute richtig setzt, wird automatisch überschrieben - notfalls mit Leerzeichen.
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: LCD Graphic-Display auteilen

 · 
Gepostet: 09.05.2018 - 11:46 Uhr  ·  #16
Zitat geschrieben von 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
  • Seite 2 von 3
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.035907s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI