[Erledigt]Frage zu ehemaligem User

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

[Erledigt]Frage zu ehemaligem User

 · 
Posted: 15.11.2020 - 14:46  ·  #1
[Edit]Hat sich erledigt, das Display läuft :)


Hallo Zusammen,

es gab hier mal einen User "Alois", der leider gelöscht wurde. Weiß jemand wer das war und wie man ihn kontaktieren kann? Ich habe von ihm damals Displays bekommen, die ich nun versuche (nach langer, langer Zeit) zu verwenden. Ich habs auch schon fast geschafft, aber mir fehlt ein entscheidender Tip :).

Falls jemand diesen Tip alternativ hat: Ich sehe, daß mein Test-Text auf dem Display erscheint, aber 0.x Sekunden später wird das Display komplett schwarz (wie ein gFillRect(0,0,319,239,$FF)). Dieses Display hat bis zu 4 Screens/RAM-Bereiche, die man auch alle gleichzeitig anzeigen kann (mit div. Verknüfungsoptionen or/xor/...). Controller ist ein Epson S1D13700.

[EDIT]Ich habe grad noch was raus gefunden: Den Text, den ich da sehe, ist der Text, der das letzte mal in das Display-RAM geschrieben wurde. D.h. das schwarz werden des Displays muß etwas mit der Konfiguration zu tun haben, was aber erst nach einer kurzen Zeit aktiv wird.

Ich starte die Display-Config, warte 10 Sekunden, gebe Text aus. Nach dem 2. Reset sehe ich kurz diesen Text vor es schwarz wird. Wenn ich den Text ändere, compiliere, flashe, Programmstart, dann sehe ich immer noch den Text vom letzten mal. Erst nach einem erneuten Reset (und natürlich 10s Pause vorher) sehe ich den aktuellen Text.

Code

Procedure LCDInit;
  Begin
    mDelay(100);
    LCD_Select:=1;                     // 0=8080, 1=6800
    LCD_WR:=0;                         // 8080: /WR   6800: 0=WR 1=RD
    LCD_En:=0;                         // 8080: /RD   6800: 0-->1 En
    
    LCD_Reset:=1;                      //
    mDelay(100);                       // ensure minimum 50 ms after power up LCD }
    LCD_Reset:=0;                      //
    mDelay(20);                        // ensure minimum 1 ms pulling RESET }
    LCD_Reset:=1;                      //
    mDelay(20);                        // wait minimum 3 ms for system stable }

                                       // Overview TM S.19
    WriteLCD($40,false);               // Sets initial operation and window size (TechMan S.22)
    WriteLCD($00,true);

    mDelay(10);
    WriteLCD($40,false);               // Sets initial operation and window size (TechMan S.22)
    WriteLCD($34,true);                // P1: 0 0 IV 1 WS M2 M1 M0               (TM 23)
    WriteLCD($87,true);                // P2: WF 0 0 0 0 FX FX FX                (TM 26)
    WriteLCD($00,true);                // P3: 0 0 0 0 FY FY FY FY                (TM 27)
    WriteLCD($27,true);                // P4: CR                                 (TM 27)
    WriteLCD($2B,true);                // P5: TCR                                (TM 28)
    WriteLCD($EF,true);                // P6: LF                                 (TM 28)
    WriteLCD($28,true);                // P7: APL                                (TM 29)
    WriteLCD($00,true);                // P8: APH                                (TM 29)

    mDelay(10);
    WriteLCD($44,false);               // Scroll: Sets the display start address and display area (TM 32)
    WriteLCD($00,true);                // Screen 1: A7 A6 A5 A4 A3 A2 A1 A0        Start-Adr. Lo
    WriteLCD($00,true);                // Screen 1: A15 A14 A13 A12 A11 A10 A9 A8  Start-Adr. Hi
    WriteLCD($EF,true);                // Screen 1: L7 L6 L5 L4 L3 L2 L1 L0        Lines-1
    WriteLCD($25,true);                // Screen 2: A7 A6 A5 A4 A3 A2 A1 A0
    WriteLCD($80,true);                // Screen 2: A15 A14 A13 A12 A11 A10 A9 A8
    WriteLCD($EF,true);                // Screen 2: L7 L6 L5 L4 L3 L2 L1 L0
    //WriteLCD($00,true);                // Screen 3: A7 A6 A5 A4 A3 A2 A1 A0
    //WriteLCD($4B,true);                // Screen 3: A15 A14 A13 A12 A11 A10 A9 A8
    //WriteLCD($00,true);                // Screen 4: A7 A6 A5 A4 A3 A2 A1 A0
    //WriteLCD($00,true);                // Screen 4: A15 A14 A13 A12 A11 A10 A9 A8

    mDelay(10);                        //                                        (TM 45)
    WriteLCD($5C,false);               // Defines the offset Address of CG RAM in display memory space
    WriteLCD($00,true);                //
    WriteLCD($F0,true);                //

    mDelay(10);                        //                                        (TM 39)
    WriteLCD($5D,false);               // Sets the cursor shape etc.
    WriteLCD($04,true);                //
    WriteLCD($86,true);                //

    mDelay(10);                        //                                        (TM 46)
    WriteLCD($5A,false);               // Sets the horizontal direction dot unit and scroll position
    WriteLCD($00,true);                // 0 0 0 0 0 D2 D1 D0

    mDelay(10);
    WriteLCD($5B,false);               // Instructs screen overlay mode          (TM 41)
    WriteLCD(%00001100,true);          // 0 0 0 OV DM2 DM1 MX1 MX0

    mDelay(10);
    WriteLCD($60,false);               // Sets grayscale mode                    (TM 47)
    WriteLCD($00,true);                // 0 0 0 0 0 0 D1 D0     00=1 Bit/Pixel

    mDelay(10);
    WriteLCD($59,false);               // Instructs to turn display on/off and make the screen flash on/off
    WriteLCD(%00000100,true);          // FP5 FP4 FP3 FP2 FP1 FP0 FC1 FC0        (TM 30)

    mDelay(50);
   { turn on VO and VEE }              // only after init!
    LCD_VEE:=1;                        // enable both VEE and V0 (damit wird der DCDC -24V aktiviert)
    MDelay(50);

    gClrScr(0);
    gDispRefresh;
    
    gSetTextJustify(alHorCenter, alVertTop);     // Textausrichtung horizontal zentriert
                                                 //                 vertikal oben
    gSetTextMode(wmXorPix);                      // Text Xor, d.h. auf einer gefüllten Fläche
                                                 // wird der Text invertiert
    gSetTextBkGnd(bkTransp);                     // Texthintergrund transparent
    gSetCharSetRam(false);

  End LCDInit;
..... das "TM xx" ist die Seite des Technical Manual des Controllers.


Und ja, ich will dieses Display da es 320x240 Pixel und einen Touch hat, s/w ist (Konfigurierbar auf 1 Bit/Pixel) und der reine Pixelbereich 5.6" groß ist (der Displaybereich ist noch leicht größer). Außerdem habe ich es bereits von CCFL auf LED-Hintergrundbeleuchtung umgebaut und ich hab 4 Stück von denen.

Danke & Gruss
Harry
rage
Benutzer
Avatar
Gender: n/a
Age: 64
Homepage: processanalytik.de
Posts: 235
Registered: 02 / 2007
Subject:

Re: [Erledigt]Frage zu ehemaligem User

 · 
Posted: 18.11.2020 - 12:46  ·  #2
Hallo Harry,

ich habe ein Display mit dem gleichen Controller in unseren ersten Geräten verbaut, zwar ohne das Grafiksystem vom AvrCo, also händisch. Das hat prima funktioniert.

Code

  DisplayInit;
  ClearGraphicLayer1;
  ClearGraphicLayer2;
  ClearGraphicLayer3;
  DISPLAYON(True,False,False);
..........

procedure Displayinit;
var temp: byte;
    w: word;
begin
  ENABLE_JTAGport;
  DDRF := DDRF  or %00001011;
  PORTF:= PortF or %00001111;
  DDRE := DDRE  or %00000100;
  PORTE:= PortE or %00000100;

  BankData   :=$FF;
  D13700MaxColumn:=Byte(LCD_Width  div 8);
  D13700MaxRow   :=Byte(LCD_Height div 8);
  D13700MemSizeG :=(LCD_Width div 8) * LCD_Height;

  BPB        :=0;
  DrawSymbols:=0;
  ServiceDir :=True;            //Ausgang
  MessOnDir  :=True;            //Ausgang
  USBPowerDir:=False;           //Eingang
  USBSleepDir:=False;           //Eingang
  //GSMDisplay start
  XMCRA:=%00000000;       //Init Memorycontroller
  DDRA :=%00000000;             //PortA Eingänge
  DDRC :=%11111111;             //PortC Ausgänge
  PortC:=%11111111;             //Adresse=$FFFF
  LCD_WRDir :=True;       //Lines as output
  LCD_RDDir :=True;
  LCD_ALEDir:=True;

  LCD_WR  :=True;       //Lines pegel High
  LCD_RD  :=True;
  LCD_ALE :=True;
  DDRA   :=%11111111;          //Output
  PortA  :=Lo(CMDADR);        //Adressdecoder
  LCD_ALE:=False;
  LCD_ALE:=True;
  DDRA :=%00000000;             //PortA Eingänge
  //GSMDisplay end

  mDelay(Word(GLCDDelay));
  Excl(LCD_Res);      // LCD zurücksetzen
  WriteBankDaten(BankData);
  mDelay(Word(GLCDDelay));
  Incl(LCD_Res);
  WriteBankDaten(BankData);
  mDelay(Word(GLCDDelay));

  //LCD_MODE:=False;
  LCDCommand(cmdSystem);            // execute 'system set' instruction
  mDelay(Word(GLCDDelay));
//  Command(cmdSystem);            // execute 'system set' instruction
//  MakeTrigger;
  Excl(Trigger);      // LCD zurücksetzen
  WriteBankDaten(BankData);
  Incl(Trigger);
  WriteBankDaten(BankData);
//  MakeTrigger end;
// *****************************************************************************
// initialize LCD
// *****************************************************************************
  LCDCommand(cmdSystem);
  mDelay(Word(GLCDDelay));
  // ********** P1 -> REG[00h]  Memory configuartion
  Temp := 0;
  Temp.0 := 0;                                          //CGROM
  Temp.2 := 0;                                          //8 bit height char
  Temp.3 := 0;                                          //single panel
  Temp.5 := 0;                                          //screen origin compensation is not done
  Temp.4 := 1;                                          //must be

  //Temp:=$30;
  WriteLCDDaten(Temp);
// ********** P2 -> REG[01h]  Horizontal charter size
  Temp := 7;
  Temp.7 := 1;                                          //two-frame AC drive
  WriteLCDDaten(Temp);
// ********** P3 -> REG[02h]  Vertical charter size
// Font height - 1
  Temp := 7;
  WriteLCDDaten(Temp);
// ********** P4 -> REG[03h]  Charter bytes per row
// graphics width/Font width - 1
  Temp := Byte(LCD_Width div 8) - 1;
  WriteLCDDaten(Temp);
// ********** P5 -> REG[04h]  Total charter bytes per row
// TC/R = (xtal/framerate/displayHeight)/10+10
//      xtal = 10MHz
// framerate = 70
// (10000000/70/240)/10+10 = ~ 69
  //Temp :=LCD_xtal / LongInt(LCD_framerate) / LongInt(LCD_Height) / LongInt(10) + 10;
  temp := $42;
  WriteLCDDaten(Temp);
// ********** P6 -> REG[05h]  Frame height register
// graphics height -1
  Temp := Pred(Lo(LCD_height));
  WriteLCDDaten(Temp);
// ********** P7 -> REG[06h]  Horizontal Address Range register 0
  w := Word(D13700MaxColumn);
  WriteLCDDaten(Lo(w));
// ********** P8 -> REG[07h]  Horizontal Address Range register 1
  WriteLCDDaten(Hi(w));
// *****************************************************************************
// set SCROLL
// *****************************************************************************
  LCDCommand(cmdScroll);
// ********** P1 -> SAD1 LSB
  WriteLCDDaten(00);
// ********** P2 -> SAD1 MSB
  WriteLCDDaten(00);
// ********** P3 -> SL1
  TEmp := Lo(LCD_height);
  WriteLCDDaten(temp);
// ********** P4 -> SAD2 LSB
  w := D13700MemSizeG;
  WriteLCDDaten(Lo(w));
// ********** P5 -> SAD2 MSB
  WriteLCDDaten(Hi(w));
// ********** P6 -> SL2
  temp := Lo(LCD_height);
  WriteLCDDaten(TEmp);
// ********** P7 -> SAD3 LSB
  w := 2 * D13700MemSizeG;
  WriteLCDDaten(Lo(w));
// ********** P8 -> SAD3 MSB
  WriteLCDDaten(Hi(w));
// ********** P9 -> SAD4 LSB
  w := 0;//3 * D13700MemSizeG;
  WriteLCDDaten(Lo(w));
// ********** P10 -> SAD4 MSB
  WriteLCDDaten(Hi(w));
// *****************************************************************************
// set CSRFORM
// *****************************************************************************
  LCDCommand(cmdHDotScroll);
// ********** P1 -> Cursor width
  WriteLCDDaten(5);
// ********** P2 -> Cursor height
  Temp := 7;
  Temp.7 := 0;
  WriteLCDDaten(temp);
// *****************************************************************************
// set HDOT SCR
// *****************************************************************************
  LCDCommand(cmdHDotScroll);
  WriteLCDDaten(00);
// *****************************************************************************
// set OVLAY
// *****************************************************************************
  LCDCommand(cmdOverlay);
  Temp := 00;
  Temp.4 := 1;                                      //three layers
  Temp.3 := 1;                                      //Screen Block 3 - graphics mode
  Temp.2 := 1;                                      //Screen Block 1 - graphics mode
  Temp.1 := 0;
  Temp.0 := 1;                                      //Layer composition method = (L1 XOR L2) OR L3
  //Temp:=$1C;
  WriteLCDDaten(Temp);
  //LCDCommand(cmdGrayScale);
  //Temp:=%00000000;
  //WriteLCDDaten(Temp);

  SetCursorOFF;
end;

procedure WriteLCDDaten(wert : Byte);
begin
  DDRA   :=%11111111;          //Output
  LCD_ALE:=True;
  PortA  :=Lo(DataAdr);        //Adressdecoder
  LCD_ALE:=False;
  PortC  :=Hi(DataAdr);        //Adressdecoder
  PortA  :=Wert;
  LCD_WR :=False;              //WR HLH Flanke
  Nop;
  LCD_WR :=True;
  PortC  :=$FF;                //Adressdecoder=FFFF
  DDRA   :=%00000000;          //Input
end;

procedure LCDCommand(wert : Byte);
begin
  DDRA   :=%11111111;          //Output
  LCD_ALE:=True;
  PortA  :=Lo(CMDADR);        //Adressdecoder
  LCD_ALE:=False;
  PortC  :=Hi(CMDADR);        //Adressdecoder
  PortA  :=Wert;
  LCD_WR :=False;             //WR HLH Flanke
  Nop;
  LCD_WR :=True;
  PortC  :=$FF;               //Adressdecoder=FFFF
  DDRA   :=%00000000;          //Input
end;

procedure FillDisplay(value, layer: byte);
var w: word;
begin
  w:=0;
  case Layer of
    1: w := 0;|
    2: w := D13700MemSizeG;|
    3: w := D13700MemSizeG + D13700MemSizeG;|
  endCase;

  LCDCommand(cmdSetCsrAddress);
  //set cursor to begining of layer
  //w := 0;
  WriteLCDDaten(Lo(w));
  WriteLCDDaten(Hi(w));

  // set Cursor direction
  LCDCommand(cmdCsrDirRight);
  LCDCommand(cmdDisplayWrite);

  for w := 0 to D13700MemSizeG-1 do
    WriteLCDDaten(value);
  endfor;
end;

procedure ClearGraphicLayer1;
begin
  FillDisplay(0, 1);
end;

procedure ClearGraphicLayer2;
begin
  FillDisplay(0, 2);
end;

procedure ClearGraphicLayer3;
begin
  FillDisplay(0, 3);
end;


Ich habe aber immer nur den ersten Layer benutzt. Bei Fragen ruf mich an.
cu Ralf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: [Erledigt]Frage zu ehemaligem User

 · 
Posted: 18.11.2020 - 16:26  ·  #3
Hallo Ralf,

danke dir, aber gestern hab ich den Fehler gefunden und natürlich nutze ich das Display mit dem AVRCo-Grafiksystem. Diese bis zu 4 Screens haben mich total verwirrt und meine Fehlersuche in eine völlig falsche Richtung gelenkt.

Gruss
Harry
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   64   78 · Page-Gen-Time: 0.023701s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI