Forum: Mikrocontroller und Digitale Elektronik EA DIP 122-5 mit SED1520: Kann Page 2 nicht ansprechen


von Jens N. (midibrain)


Angehängte Dateien:

Lesenswert?

Hallo,

hab hier ein EA-DIP 122-5 von Elctronic Assembly mit zwei SED1520 
Controllern.
Derzeit möchte ich nur EINEN Cotroller ansprechen, also nur eine 
Displayhälfte.

Im init_glcd() versuche ich den Anfang der nachfolgenden 
Schreiboperationen auf die verschiedenen Pages (0-3) zu legen z.B.:

     write_glcd(1,0b10111000,0); für die erste Page.
                           ^
Danach gebe ich in einer Schleife eine Zahl aus z.B:

     write_glcd(1,129 ,1);für die Bitfolge 0b10000001
                   ^
Das klappt auch bei den Pages 0,1,3, die richtigen Pixel werden 
dargestellt
und hintereinander bis zum Ende der Page geschrieben.

Wenn ich aber auf Page 2 schreiben möchte:

     write_glcd(1,0b10111010,0); für die dritte Page.
                          ^
klappt das nicht und statt auf Page 3 (0x10) wird auf die 4te (0x11) 
geschrieben.

Jetzt habe ich schon das Display in Verdacht kaputt zu sein, möchte aber 
hier erst einmal fragen ob vielleicht schon mal jemand so ein Problem 
gehabt hat.

Jens

: Bearbeitet durch User
von Jens N. (midibrain)


Lesenswert?

Hat niemand eine Idee oder ist mein Anliegen unverständlich dargelegt?
Jens

von Harry (Gast)


Lesenswert?

Sprichst du Pascal?
1
Procedure GraphInit;
2
  Begin
3
    IsCtrlTwo := false;                                  // controller 1
4
    WriteLCD(%10101111,false);                           // display on
5
    WriteLCD(%11000000,false);                           // start line 0
6
    WriteLCD(%10111000,false);                           // page 0
7
    WriteLCD(%00000000,false);                           // address 0
8
    IsCtrlTwo := true;                                   // controller 2
9
    WriteLCD(%10101111,false);                           // display on
10
    WriteLCD(%11000000,false);                           // start line 0
11
    WriteLCD(%10111000,false);                           // page 0
12
    WriteLCD(%00000000,false);                           // address 0
13
    gClrScr(0);
14
    gDispRefresh;
15
  End GraphInit;
16
17
UserDevice GraphIOS(Cmd: Byte; Arg: byte);
18
  Begin
19
    If Cmd=0 then                                        // set row addr
20
      CurRow:=arg;
21
      IsCtrlTwo:=false;                                  // controller 1
22
      WriteLCD(%10111000+CurRow,false);                  // page
23
      WriteLCD(%00000000,false);                         // address 0
24
      Col:= 0;
25
    else
26
      If Col=61                                          // if column = 61 then switch to controller 2
27
        then
28
          IsCtrlTwo:=true;                               // controller 2
29
          WriteLCD(%10111000+CurRow,false);              // page
30
          WriteLCD(%00000000,false);                     // address 0
31
          WriteLCD(Arg,true);
32
          Inc(Col);
33
        else
34
          If Col<122
35
            then                                         // only column 0..121 are valid
36
              WriteLCD(Arg,true);
37
              Inc(Col);
38
            Endif;
39
        EndIf;
40
    EndIf;
41
  End GraphIOS;

von Jens N. (midibrain)


Lesenswert?

Hallo,
wenn ich das richtig sehe fügst Du hier

WriteLCD(%10111000+CurRow,false);

der Page einen Zähler hinzu um auf die nächste Page zu wechseln.

So habe ich das auch schon probiert, kann aber nicht die Row 3 - also 
die Page 3- erreichen, mit den anderen Pages(Rows)geht das aber.

von Harry (Gast)


Lesenswert?

Hallo,

ich sehe, da fehlt noch was
1
Procedure WriteLCD(Arg: Byte; IsData: Boolean);
2
  Var Mask : Byte;
3
  Begin
4
    If IsData
5
      then
6
        Mask:=$14;                                       // Daten
7
      else
8
        Mask:=$10;                                       // Befehl
9
      EndIf;
10
    TWIOut(PCA9555,$02,Arg);                             // Output arg
11
    If IsCtrlTwo
12
      then
13
        TWIOut(PCA9555,$03,(Mask or $08));               // Controller 2
14
      else
15
        TWIOut(PCA9555,$03,(Mask or $01));               // Controller 1
16
      EndIf;
17
    TWIOut(PCA9555,$03,Mask);
18
  End WriteLCD;
Ich habe das Display via PCA9555 über I2C verwendet, aber das spielt 
keine Rolle.
Hast du auch nach der Page-Adresse die Startadresse wieder auf 0 
gesetzt?
1
WriteLCD(%10111000+CurRow,false);                  // page
2
      WriteLCD(%00000000,false);                         // address 0

Und ja so funktioniert es.

Harry

von Jens N. (midibrain)


Lesenswert?

Hallo Harry,

ja, die Sartadresse ist auch auf Null gesetzt, ich lass die Row gleich 
nach dem Init beschreiben, da ist die Strartadresse(column) sowieso 
Null.
Jens

von Crazy Harry (crazy_h)


Lesenswert?

Hi Jens,

ich hab noch 2 von den Displays rum liegen, allerdings mit I2C-Platine 
drunter ..... falls Interesse besteht. Sind die sw mit gelbgrüner 
Beleuchtung.

Harry (mal angemeldet)

von Jens N. (midibrain)


Lesenswert?

Hallo Harry,

ich habe hier auch noch einige EA DIP 122-5, allerdings aus einer 
Charge.
Da ich gern mal probieren würde ob Displays aus einer anderen Charge 
auch nicht auf die Page 3 gehen hätte ich schon interesse an Deinen 
Displays wenn die I²C Platine nicht angelötet ist.
Jens

von Crazy Harry (crazy_h)


Lesenswert?

Hi Jens,

doch die sind fertig zusammen gebaut mit PCA und Erzeugung der negativen 
Kontrastspannung.

Harry

von Jens N. (midibrain)


Lesenswert?

ist schon lange her...

Am Ende ist das Display kaputt gewesen.
Ich hab mir ein PCB mit Buchsenleisten gemacht und einige weitere LCDs 
aufgesteckt und überprüft. Die sind alle in Ordnung, das erste Display 
dann wohl kaputt.

Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.