Probleme mit LCD SSD1803

Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 08.03.2014 - 18:57  ·  #41
Das bringt leider nur Chaos auf dem LCD.

Ich habe diese Funktion verwendet:

Code
SYSTEM.LCDSETUP:
                        CLI
                        IN        _ACCA, 022h
                        ANDI      _ACCA, 080h
                        OUT       022h, _ACCA
                        IN        _ACCA, 021h
                        ORI       _ACCA, 07Fh
                        OUT       021h, _ACCA
                        LDI       _ACCA, 03h
                        OUT       022h, _ACCA
                        LDI       _ACCB, 16
                        CLR       _ACCA
                        CALL      SYSTEM.MDELAY
                        IN        _ACCA, 022h
                        ORI       _ACCA, 10h
                        OUT       022h, _ACCA
                        PUSH      _ACCA
                        LDI       _ACCA, 30h


Das scheint aber nicht zu funktionieren wenn ich das als inline-asm in den Pascal Code einfüge.
Da zeigen alle nur Kauderwelsch, auch die, die sonst liefen.
Ich habe ein Display, dass gar nichts anzeigt, egal was ich mache, es ist aktiv, man sieht, dass sich etwas tut, aber es sind keine Zeichen zu sehen.

So langsam gehen mir die Ideen aus, ich habe auch schon eins direkt an einen 3,3V Atmega644 angeschlossen, selber Effekt, am 5v->3,3V Wandler liegt es also scheinbar nicht.

Zu dumm aber auch, dass das alte Display nicht mehr hergestellt wird, das lief einfach problemlos.
Harald_K
 
Avatar
 
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 08.03.2014 - 19:16  ·  #42
klaro, wenn du nur den gleichen Code wie der Compiler verwendest, dann tut sich nix.

wenn du aber bei
....
LDI _ACCB, 16
CLR _ACCA
CALL SYSTEM.MDELAY
...

aus der 16 ne 32 machst (du lädst 32 statt 16 in _acca/_accb als Delayzeit in ms)
und auch bei den weiteren delay-Aufrufen die Übergabewerte verdoppelst

dann könnte das was bringen ...


wenn du Glück hast hängt es nur an der init-sequenz, weil im Normalbetrieb ja vor jedem LCD-Befehl immer das busy-Flag des Displays geprüft wird, nur beim init geht das nicht.


achja .. daß da unten an deinem codeschnipsel noch so einiges bis zum Ende der Init-sequenz fehlt ist schon klar ... weil wenn du da einfach irgendwo mittendrin aufhörst kommt immer Müll raus.

udn du darfst dann natürlich auch nicht nach dem Aufruf deiner eigenen Init-Routine die compilereigene nochmals aufrufen.
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 08.03.2014 - 22:47  ·  #43
Ich habe die komplette Initialisierung jetzt aus dem ASM-File kopiert und die Delayzeiten erhöht.
Das scheint zu klappen, dafür hakt es jetzt sporadisch bei anderen Funktionen wie LCDCLR.
Davon erholt es sich manchmal nicht, das LCD bleibt dann aus.

Ich forsche weiter...

Louis
Harald_K
 
Avatar
 
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 09.03.2014 - 20:56  ·  #44
dann hilft es vielleicht noch, nen Versuch mit dem LCDUserPort zu machen ....

da kannst du dann die Zykluszeit des E-Signals auch noch runterbremsen, dann wirds wohl funzen.

ok, die Init-Sequenz mußt du weiterhin mit dem $NOINITLCD und dem modifizierten asm-code machen, eventuell noch den mehrfachen NOPs zwischen den Steuerportzugriffen ein paar NOPs hinzufügen.

(vielleicht gibts auch bald ne Compiler-Revision, wo man mit LCDctrl = 0073,2; ne Verdoppelung oder Vervielfachung aller automatisch erzeigten Delays im LCD-Bereich einstellen kann ... ;) )
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 15.03.2014 - 17:54  ·  #45
Ich habe jetzt enorm viel Zeit investiert um das zum Laufen zu bekommen, ich gebe auf. Viele hundert Euro stehen hier an fertigen Steuerungen herum, allesamt für die Tonne weil das Display zickt :-(
Ich sehe keine Möglichkeit das verd**** Ding ordentlich zum Laufen zu bekommen, und möchte keine weitere Zeit mehr damit verschwenden. Vielleicht kommt ja irgendwann eine Änderung in Avrco die die Verzögerung einstellbar macht, dann könnte ich die ganzen Geräte wieder aktivieren.

Das ist eben der Nachteil nicht mit Opensource-Software zu arbeiten, da könnte man schnell die Lib ändern.

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

Re: Probleme mit LCD SSD1803

 · 
Posted: 16.03.2014 - 10:04  ·  #46
Hi,

ich hab das LCD seit 15 min (hatte endlich Zeit dafür) am Laufen an einem XMega256-A3U @ 8 MHz. Freut euch nicht zu früh: parallel 4Bit hab ich es nicht geschafft, aber (Soft-)SPI ging eigentlich fast sofort. Natürlich mit LCDNOINIT und eigener Initialisierung.

@WOM: Ich hab das Display ja ausgelötet und betreibe es ohne Levelshifter. Auf deiner Platine ist ja eigentlich alles für SPI vorhanden - müßtest also eigentlich nur die Software (das Define) umstellen und auf den Displays die SPI-Brücke schliessen.

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

Re: Probleme mit LCD SSD1803

 · 
Posted: 16.03.2014 - 12:25  ·  #47
Hab noch ein paar Tests gemacht: XMega @ 64 MHz geht, MISO "in die Luft hängen" geht ist aber deutlich langsamer.
Bei dem Testprogramm hab ich absichtlich immer alle Zeilen auf Position 0 geschrieben, dann auf 1, ..... also 80 LCDXY pro Bildaufbau, danach werden einfach alle 4 Zeilen mit Zeichen beschrieben.
Keine Delays nach LCDXY oder LCDCLR !

Code

Program WOM_LCD2;
{ DIP203-4 via SPI                                                             }

{$NOSHADOW}
{ $WG}                     {global Warnings off}

Device = xmega256A3U, VCC=3.3;

{ $BOOTRST $20000}         {Reset Jump to $20000}
{$LCDNoInit}

Import SysTick, LCDPort;

From System Import;

Define
  OSCtype        = int32MHz,
                   PLLmul=4,
                   prescB=1,
                   prescC=1,
                   overdrive;
  SysTick        = 10;             {msec}
  StackSize      = $0100, iData;
  FrameSize      = $0100, iData;
  
  LCDport        = SPI_Soft,PortC,2,1,3,0;  // MISO kann "in der Luft" hängen
                                            // 3 --> unbelegter Port
                                            // --> Display deutlich langsamer !
  LCDtype        = 0073;                    // Controller-Typ
  LCDrows        = 4;                       // 4 Zeilen
  LCDcolumns     = 20;                      // 20 Zeichen


Implementation
{$IDATA}
{------------------------------------------------------------------------------}
{ Type Declarations }
Type
{------------------------------------------------------------------------------}
{ Const Declarations }
Const
{------------------------------------------------------------------------------}
{ Var Declarations }
Var
{------------------------------------------------------------------------------}
{$IDATA}
{ functions }
Procedure Init_Ports;
  Begin
    DDRC:=%00000111;                             // SPI
  End Init_Ports;


Procedure Start;                                 // Initialisierung LCD
  Begin
    LCDCTRL($34);                                // 8 Bit, Extension Bit RE=1
    mDelay(2);
    LCDCTRL($09);                                // 4 Zeilen-Modus
    mDelay(2);
    LCDCTRL($30);                                // 8 Bit, Extension Bit RE=0
    mDelay(2);
    LCDCTRL($0C);                                // Display ein, Cursor off, Blinken off
    mDelay(2);
    LCDCTRL($01);                                // Display clear, Cursor 0,0
    mDelay(2);
    LCDCTRL($06);                                // Cursor Auto-Increment
    mDelay(2);
  End Start;


Procedure Main;
  Var X, Y: Byte;
  Begin
    For X:=0 to 19 do
      For Y:=0 to 3 do
        LCDXY(X,Y);
        Write(LCDOut,'X');
        EndFor;
      mDelay(50);
      EndFor;
      
    mDelay(1000);
    LCDXY(0,0);
    Write(LCDOut,'ABCDEFGHIJKLMNOPQRST');
    LCDXY(0,1);
    Write(LCDOut,'UVWXYZ0123456789+-*/');
    LCDXY(0,2);
    Write(LCDOut,'abcdefghijklmnopqrst');
    LCDXY(0,3);
    Write(LCDOut,'uvwxyz9876543210()?&');
    mDelay(1000);
    LCDCLR;
  End Main;
{------------------------------------------------------------------------------}
{ Main Program }

Begin
  EnableInts($87);
  Init_Ports;
  Start;
  Loop
    Main;
    Endloop;

End WOM_LCD2.
Attachments
 
Filename: DIP203-4.avi
Filesize: 210.67 KB
Title:
Download counter: 29
Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Probleme mit LCD SSD1803

 · 
Posted: 16.03.2014 - 14:01  ·  #48
Muss den Post ändern: Eureka, ich habe es...

Ich habe Deinen Code auf 4 Bit umgesetzt, mit Hilfe des C-Codebeispiels des Herstellers.
Da ist aber ein Fehler drin, der dazu führte, dass die 4-Bit Umschaltung nicht richtig klappte, auch toll wenn der Hersteller so etwas ausliefert...

Bei mir geht es jetzt so:

Code


Procedure WriteNibble(data : byte);
begin
  data:=data SHR 4;
  PORTA := data;
  incl(LCD_EN);
  mdelay(20);
  excl(LCD_EN);
end;

procedure WriteData(data: byte);
begin
 incl(lcd_rs);
 incl(LCD_RW);
 WriteNibble(data);   //High nibble
 mdelay(20);
 WriteNibble(data SHL 4);     //low nibble
end;


Procedure Start2;
begin
  excl(LCD_EN);
  excl(LCD_RS);
  excl(LCD_RW);

  writedata($30);  // HIER STEHT BEIM HERSTELLER-C-CODE "WRITENIBBLE", was falsch ist!
  mdelay(20);
  writedata($30);
  mdelay(20);
  writedata($30);
  mdelay(20);
  writedata($20);
  mdelay(20);

//init Display
  LCDCTRL($24); //4-Bit, RE=1  0010 0100
  mdelay(20);
  LCDCTRL($09); //4 line mode
  mdelay(20);
  LCDCTRL($20); //4-Bit, RE=0  0010 0000
  mdelay(20);
  LCDCTRL($0C); //Display on, cursor off, cursor blink off
  mdelay(20);
  LCDCTRL($01); //clear display
  mdelay(20);
  LCDCTRL($06); //return home
end START2;


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: 16 · Cache Hits: 15   138   153 · Page-Gen-Time: 0.026296s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI