SSD1322 GDDRAM auslesen

Gast #2676278
Lesenswert?

Hi,

hat jmd von euch bereits Erfahrungen mit dem Display-Controller SSD1322 
sammeln können? Die Initialisierung sowie das Beschreiben vom GDDRAM 
funktioniert. Allerdings kann ich vom GDDRAM nicht richtig Auslesen. 
Wenn ich z.B. ein Pixel auf 0xF (volle Helligkeit) gesetzt habe , wir 
dieses Pixel auch auf dem Display hell angezeigt. Beim Auslesen der 
gleichen GDDRAM-Adresse bekomm ich aber nicht 0xF zurückgeliefert 
sondern irgendetwas anderes - z.B. 0xD....

Nachdem mein Prozessor keinen externen Datenbus besitzt, hab ich die 
ersten 7 bits vom GPIO-PortB für den Datenbus verwendet. COMMAND gibt 
an, dass das A0/RS Pin low ist und bei DATA ist dieser High.
1
unsigned char read_data(void)
2
{
3
  unsigned char data = 0x00; 
4
  
5
  GPIOB->CRL &= ~0xFFFFFFFF;  // reset port-pins for both leds 
6
  GPIOB->CRL |=  0x88888888;  // set input with pull-up/down 
7
  
8
  //A0 bzw. RS is high
9
  GPIOC->BSRR = (1 << 4);
10
  //r/w  high setzen
11
  GPIOC->BSRR = (1 << 5);  
12
  //E pin auf high setzen
13
  GPIOC->BSRR= 1<<6;   
14

15
  //cs auf low setzen
16
  GPIOC->BRR = (1 << 8);
17

18
  delay_ms(100); 
19

20

21
  /* daten auslesen° */
22
  data = GPIOB->IDR & 0xFF; 
23

24

25
  //cs auf high ziehen 
26
  GPIOC->BSRR = (1 << 8);
27
   delay_ms(100); 
28

29

30
  //r/w auf low setzen
31
  GPIOC->BRR = (1 << 5);  
32
  //E pin auf high setzen
33
  GPIOC->BSRR= 1<<6;  //set to high 
34

35
  return data; 
36
}
37

38

39
void GDDRAMData(void)
40
{
41

42
unsigned char columnPixel[2];
43

44
    /* set addr to write */
45
    write_cmd(COMMAND, 0x75);
46
    write_cmd(DATA, 0x1C); //0x1C ist mein Offset -> 0 column
47
    write_cmd(COMMAND, 0x15);
48
    write_cmd(DATA, 0);
49
    
50
    /* write to GDDRAM (das erste Pixel leuchtet) */
51
    write_cmd(COMMAND, 0x5C); 
52
    write_cmd(DATA, 0xF0);
53
    write_cmd(DATA, 0x00);
54
   
55
   /* set addr to read */
56
    write_cmd(COMMAND, 0x75);
57
    write_cmd(DATA, 0x1C); //0x1C ist mein Offset -> 0 column
58
    write_cmd(COMMAND, 0x15);
59
    write_cmd(DATA, 0); 
60

61
    /* read GDDRAM */
62
    write_cmd(COMMAND, 0x5D);
63
    columnPixel[0] = read_data();    // Dummy reading
64
    columnPixel[0] = read_data();    // pixel 0, 1
65
    columnPixel[1] = read_data();    // pixel 2, 3
66

67
}

Die I/Os werden alle entsprechend richtig angesprochen. Das Schreiben 
des GDDRAMs funktioniert ja und den RD-Pin hab ich überprüft.



Gruß
Jens

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