LCD 128x64 Ram kaputt?

OP #2597668
Lesenswert?
• ▲
▼
LCD 128x64 Ram kaputt?

Hi,
bekanntermaßen sind die 128x64 KS0108 in der Senkrechten in sogenannte 
Pages zu je 64Bytes organisiert.
Um einen Pixel zu setzen muß man:
- die Page anwählen
- Das Byte lesen
- den Pixel in das Byte UND-verknüpfen
- das Byte wieder zurückschreiben
Ich verwende die GLCD Bibliothek von Apetech.

An etwa 5% aller Speicherstellen lese ich, nachdem alle Pixel des 
Displays eindeutig auf 0 (oder 1) gesetzt werden, Fehler zurück. Der 
Fehler ist reproduzierbar.
Ich resete das Display nach jedem Neustart (was aber auf das RAM 
eigentlich ohnehin keinen Einfluß hat). Lese ich in Wahrheit ein 
Shadow-RAM das sich von dem physikalischen "Pixel-RAM" unterscheidet? 
Ich hatte das Ding seit Jahren in der Bastelkiste liegen, es wäre das 
erste mal, daß Bytes durch irgendeinen äusseren Einfluß (elektrostat. 
Aufladung) umkippen...

Das Bild zeigt eine waagerechte Linie, die senkrechten Pixel sind 
mutmaßlich zurückgelesene RAM-Fehler. Die letzte zurückgelesene 
fehlerhafte Zelle hat den Inhalt 255.

An der Leseroutine liegt's eher nicht, die macht nen gesunden Eindruck.
1
uint8_t ks0108DoReadData(uint8_t first) {  
2
  uint8_t data;
3
  volatile uint8_t i;
4
  unsigned char chip = 0;  //Debug
5
  
6
  if(ks0108Coord.x < 64) 
7
    {
8
     LCD_CMD_PORT.Ks0108E1 = 1;          
9
     chip = 0;
10
    } 
11
  
12
  else if(ks0108Coord.x >= 64) 
13
    {
14
     LCD_CMD_PORT.Ks0108E2 = 1;          
15
     chip = 1;
16
      }
17

18
  if(ks0108Coord.x == 64) 
19
    {                      
20
     ks0108WriteCommand(LCD_SET_ADD,1);  // wuff wuff
21
    }
22
  
23
  //set port to input
24
  initPortDataInKs108();
25
  LCD_CMD_PORT.D_I = 1;     //Debug   // D/I = 1
26
  LCD_CMD_PORT.R_W = 1;     //Debug   // R/W = 1
27
  //sendcmd (LCD_CMD_PORT);
28

29
  PORTH |= (1<<PortD_I);
30
  PORTB |= (1<<PortR_W);
31
  if (chip == 0)  PORTB |= (1<<PortKs0108E1); //ok
32
  if (chip == 1)  PORTB |= (1<<PortKs0108E2); //ok
33

34
  ks0108Enable(chip);
35

36
  //lies Daten von 8 einzelnen Portleitungen, 
37
  //zusammengefasst zu enem Byte:
38
  data = getPortData();
39

40
  LCD_READ = data;    //Debug
41
  ks0108GotoXY(ks0108Coord.x, ks0108Coord.y);  
42
  if(ks0108Inverted)  data = ~data;
43
  
44
  return data;
45

46
}
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.