EA DIP 122-5 mit SED1520: Kann Page 2 nicht ansprechen

#7002746
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
Angehängte Dateien:
Gast #7003674
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;
Gast #7003866
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren