Pinbelegung für GLCD

Gast #238733
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 ??
Was ich aus dem Header-File lesen kann, ist Deine Zuordnung richtig.

Was Deine andere Frage angeht: 0x03 ist die hexadezimale Darstellung
der dezimales Zahl 3 und damit identisch. Ist halt geschmackssache
welche Zahlendarstellung man verwendet.

Volkmar
Gast
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.