www.mikrocontroller.net

Forum: Compiler & IDEs Pinbelegung für GLCD


Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
// Ports
#define LCD_CMD_PORT    PORTA    // Command Output Register
#define LCD_CMD_DIR      DDRA    // Data Direction Register for Command
Port

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

// Command Port Bits
#define D_I          0x00    // D/I Bit Number
#define R_W          0x01    // R/W Bit Number
#define EN          0x02    // EN Bit Number
#define CSEL1        0x03    // CS1 Bit Number
#define CSEL2        0x04    // CS2 Bit Number

// Chips
#define CHIP1        0x00
#define CHIP2        0x01

// Commands
#define LCD_ON        0x3F
#define LCD_OFF        0x3E
#define LCD_SET_ADD      0x40
#define LCD_SET_PAGE    0xB8
#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 ??

Autor: Volkmar Dierkes (volkmar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: AVR Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.