Pinbelegung für GLCD

Gast #238733
Lesenswert?
• ▲
▼
Ich will ein GLCD 128x64 mit dem Controller KS0108 anschließen.
Ich benutze den Source von http://www.apetech.de.

Wo ich mein Problem habe ist die Pinbelegung.

In der ks0108.h finde ich folgendes:
1
// Ports
2
#define LCD_CMD_PORT    PORTA    // Command Output Register
3
#define LCD_CMD_DIR      DDRA    // Data Direction Register for Command
4
Port
5

6
#define LCD_DATA_IN      PINC    // Data Input Register
7
#define LCD_DATA_OUT    PORTC    // Data Output Register
8
#define LCD_DATA_DIR    DDRC    // Data Direction Register for Data Port
9

10
// Command Port Bits
11
#define D_I          0x00    // D/I Bit Number
12
#define R_W          0x01    // R/W Bit Number
13
#define EN          0x02    // EN Bit Number
14
#define CSEL1        0x03    // CS1 Bit Number
15
#define CSEL2        0x04    // CS2 Bit Number
16

17
// Chips
18
#define CHIP1        0x00
19
#define CHIP2        0x01
20

21
// Commands
22
#define LCD_ON        0x3F
23
#define LCD_OFF        0x3E
24
#define LCD_SET_ADD      0x40
25
#define LCD_SET_PAGE    0xB8
26
#define LCD_DISP_START    0xC0


DataPort ist ja klar geht von portc.0 bis portc.7 aber wie sind die
Commands Belegt?

Porta.0 == D_I
Porta.1 == R_W
Porta.2 == EN
Porta.3 == CSEL1
Porta.4 == CSEL2

Ist das richtig?
Warum ist aber z.B. CSEL1 0x03 und nicht 3 ??
Gast #238735
Lesenswert?
• ▲
▼
Danke. Kann mir vielleicht einer noch sagen wieso im ks0108 sourcecode
wie Z.B. in der Zeige die Daten vom Display erst gelesen werden und
dann geschrieben?

void ks0108SetDot(uint8_t x, uint8_t y, uint8_t color) {
  uint8_t data;

  ks0108GotoXY(x, y-y%8);          // read data from display memory
  data = ks0108ReadData();

  if(color == BLACK) {
    data |= 0x01 << (y%8);        // set dot
  } else {
    data &= ~(0x01 << (y%8));      // clear dot
  }

  ks0108WriteData(data);          // write data back to display
}

wieso muss ich erst auslesen? kann man nicht einfach in der Position
sofort schreiben?
Gast #238736
Lesenswert?
• ▲
▼
Hallo

Weil du immer nur 8 Bits auf einmal setzen kannst und du nicht weißt,
wie die anderen 7 Bits gerade gesetzt sind.

Und da die Routine nur einen Punkt setzen soll, mußt du halt erst die
anderen auslesen, mit deinem neuen Bit verknüpfen und wieder zurück
schreiben.

MFG
Dieter

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.