LCD

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

Diese Seite beschäftigt sich damit ein LCD an die Platine anzuschliessen und zu betreiben.

HD44780

Die folgenden Displays wurden gestestet:

  • Pollin, SC1604A, Bstnr. 120 572 (gestestet von #OR)
  • Pollin, YL162-90, Bstnr. 120 060 (getestet von SuperRiggi)
  • Pollin, TC1602E-01, Bstnr. 120 420 (getestet von Bitfehler)
  • Solomon, LM1180SYL (getestet von Doozer)
  • Conrad, AV2040, Bstnr. 181657-62, - Controller Type ks0067b auswählen - (getestet von punktl)
  • Bürklin, Peaktech P204A, Bstnr. 72S1170, - Controller ks0067b (getestet von michi)
  • Reichelt, Displaytech 162
  • weitere?

Pollin AVR-NET-IO

Da ich ein Pollin Board verwende, hier also die Beschreibung für ein AVR-NET-IO (:biggrin:). Den Anschluss des LCD habe ich von http://www.sprut.de/electronic/lcd/lcd.gif übernommen. Die folgende Grafik zeigt den Anschluss an den Controller:

Ethersex LCD.png

Wer ein bißchen besser löten kann, benötigt keine Anschlussplatine und kann das Ganze auch direkt auf einen SUB-D Stecker löten, die Stiftnummern stehen in der Grafik dabei.

Bei dem YL162-90 ist zu beachten, dass Vo (Kontrast) nicht mit positiver Spannung anzusteuern ist. Die negative Spannung ist am besten über ein 10kOhm-Potentiometer vom Pin 6 des RS232-Bausteines (Pollin AVR Board) abzugreifen. Bei ca. 5kOhm ist das Display gut zu erkennen.

Danach muss nochmal compiliert werden:

  • make menuconfig
  • Untermenu "I/O support"
  • den Punkt "HD44780 Module Driver" aktivieren
  • in selbiges Untermenu abtauchen und noch "Readback Support" und "Use Port C" aktivieren
  • danach rausgehen, speichern, compilieren, laden

"Use Port C" nicht mehr im Menü vorhanden (Nov. 2009) -> das gibt Compilerfehler. Also manuell pinnen:

 ifdef(`conf_HD44780', `
   pin(HD44780_RS, PC0)
   pin(HD44780_RW, PC1)
   pin(HD44780_EN, PC2)
   pin(HD44780_D4, PC3)
   pin(HD44780_D5, PC4)
   pin(HD44780_D6, PC5)
   pin(HD44780_D7, PC6)
 ')

Mehr Info dazu auch unter Pins_in_Ethersex_definieren und Ethersex_Hardware_hinzufügen.

Das LCD macht nach dem Einschalten erstmal gar nix. Zum Testen geht am besten der ECMD.

  • netcat 192.168.0.90 2701 aufrufen
  • dann lcd write Hallo eingeben

Man sollte jetzt etwas auf dem LCD lesen können.

Weitere Spielereien mit dem LCD

Leider habe ich noch nicht rausbekommen, wie man zb. die 1wire Temperatursensoren oder die ADC oder die Ports möglichst elegant auf das LCD bekommt :-). Aber vielleicht hat ja von Euch einer eine Idee.

  • Unter Temperaturanzeige_mit_TTY findet sich ein kleines Control6-Skript, mit dem man die Messwerte von 1-wire Temperatursensoren mit Hilfe des TTY-Layers auf's Display zaubern kann. --Stella 15:19, 26. Jun. 2009 (UTC)


S1D15G10

Diesen LCDisplay Controller findet man in diversen Mobiltelefonen. Ich habe das LCDisplay aus einem Nokia6610 ausgebaut.

Einige Online Portale/Händler bieten es auch incl. Anschlussplatine an.

Die folgenden Displays wurden getestet:

  • Epson, S1D15G10, ausgebaut aus Nokia6610 (getestet von veyron)
  • weitere?

Das 130x130 1.5" FarbLCD mit dem integrierten Controller S1D15G10 wird zB. so angeschlossen:

 RESET, PB0
 DATA,  SPI_MOSI
 CLK,   SPI_SCK
 CS,    PD7

Beispiel für Atmega644: pinning/hardware/etherrape.m4

ifdef(`conf_S1D15G10', `dnl
   /* port config for s1d15g10 lcd */
   pin(S1D15G10_CS, PA3, OUTPUT)
   pin(S1D15G10_RESET, PA1, OUTPUT)
')

Da die Daten via SPI generiert werden, können nur die Pins für RESET und ChipSelect frei gewählt werden.

Die Stromversorgung für den LCDController sollte nicht über 4V liefern! Die Pins sollten 3.6V nicht übersteigen! Die Hintergrundbeleuchtung braucht 6V - 7V.

Da der AVR meines etherrapes mit 5V läuft, hab ich jeweils eine 3V6 Zenerdiode und einen 1k5Ohm Pullup zwischen AVR und LCD gehangen.

In menuconfig:

 │ │                    Load a Default Configuration  --->
 │ │                    General Setup  --->
 │ │                    Network protocols  --->
 │ │                    I/O support  --->
 ...
 │ │                                     [*] S1D15G10 module driver (130x130-R/G/B-LCD)

Auf dem LCD wird dann ein bisschen farbiger Text auf schwarzem Hintergrund und das E-Sex Logo angezeigt.

Ist Debug und ECMD via UART aktiv, wird dies auch auf dem LCD ausgeben.

Das sieht dann so aus:

Veyrons ethersex S1D15G10.jpg

Bezugsquellen

  • Sparkfun vertreibt das LCD incl. Anschlussplatine
  • In folgenden Nokia Handys wurden diese LCDs verbaut:
    • 6100, 6610, 7210, 7250, und 5100

Andere Webseiten auf denen die Möglichkeiten und Anschluß ersichtlich wird. http://thomaspfeifer.net/nokia_6100_display.htm

Ansteuerung per ECMD

Folgende Befehle sind für's LCD vorhanden:

Kommando Funktion
lcd char N D1 D2 D3 D4 D5 D6 D7 D8 Benutzer-definierbares Zeichen N erstellen mit den Daten D1..D8 (in Hex)
lcd clear ZEILE Lösche ZEILE (0..3) oder das ganze Display (wenn ohne Parameter)
lcd goto ZEILE SPALTE Setze den Cursor auf ZEILE und SPALTE (Ursprung ist 0/0)
lcd reinit CURSOR BLINK Reinitialisiere das Display, schalte CURSOR aus oder ein (0 oder 1) und ob der Cursor BLINKen soll
lcd shift RICHTUNG Schiebe die ganze Anzeige in RICHTUNG (entweder 'left' oder 'right')
lcd write TEXT Schreibe TEXT an die momentane Cursorposition

Diese Tabelle wurde von Ecmd Reference übernommen und übersetzt.

Anmerkung: Das Zeichen-definieren scheint zu funktionieren, jedenfalls wird "OK" zurückgegeben. Aber wie rufe ich das Zeichen auf, d.h. wie übergebe ich 'lcd write <hex00>'?

S1D13305

Dies ist ein schon etwas älterer schwarz/weiss LCD Controller von Epson (Nachfolger: S1D13700). Link zum Datenblatt

Der Controller kann Displays bis zu einer Grösse von 640*256 Pixel ansteuern und bis zu 3 Textlayer, 3 Grafiklayer oder Text/Grafiklayer gemischt anzeigen. Der Controller hat einen eingebauten Zeichensatz, es ist aber auch möglich eigene Zeichensätze ins RAM des Controllers zu laden (zur Zeit noch nicht unterstützt)

Aktivierung

In menuconfig unter

  • I/O ->
  • LCD Displays ->
  • S1D13305 module Driver (GLCD)

Hier kann jetzt der Display modus eingestellt werden, die Displaygrösse und ob das Backlight schaltbar ist. Die Einstellung von XTAL und Refresh rate muss an den LCD-Controller und das Display angepasst werden. Normalerweise wird der LCD-Controller mit 10MHz betrieben, die von Epson empfohlene Refreshrate ist 75 Hz.

Die Implementierung des Treibers unterstützt 2 Modi:

  • Text/Grafik gemischt, wobei dann Layer 1 der Textlayer ist Layer 2 der Grafiklayer
  • Nur Grafik, dann sind 3 Grafiklayer verfügbar.

Pinning: (an eigene HW anpassen!):

 /* ports the s1d13305 is attached to */
 ifdef(`conf_S1D13305', `dnl
   S1D13305_DATA_PORT(A)
   pin(S1D13305_CS, PC6, OUTPUT)
   pin(S1D13305_RES, PD4, OUTPUT)
   pin(S1D13305_A0, PD5, OUTPUT)
   pin(S1D13305_RD, PD6, OUTPUT)
   pin(S1D13305_WR, PD7, OUTPUT)
   ifdef(`conf_LCD_BACKLIGHT', `dnl
     pin(LCD_BACKLIGHT, PC7, OUTPUT)
   ')dnl
 ')dnl

Nach der Initialisierung sollte das Display leer sein und nicht flimmern. Man kann jetzt z.b. mit

 lcd_writeTextPos(5,5,"Hallo Welt", 10);

einen Text auf dem Display ausgeben.

Wenn man eine Grafik ausgeben möchte, muss man im eigenen Code LCD_DRAWBITMAP_USED definieren und lcd_getBMPData implementieren. Beispiel:

 #define LCD_DRAWBITMAP_USED
 uint8_t lcd_getBMPData(uint16_t address_ui16)
 {
     return pgm_read_byte(yourBMP+address_ui16);
 }

Dann ruft man lcd_drawBitmap auf. Z.b. so:

 lcd_drawBitmap(LCD_LAYER_2, 10, 10, 20, 30);

Zu beachten ist hier, dass der vierte Parameter die Breite der Bitmap in BYTE erwartet, nicht in Pixeln! lcd_DrawBitmap ruft jetzt lcd_getBMPData auf um die zu zeichnende Bitmap zu holen.

Todo

  • ECMD Unterstützung
  • Grafikbibliothek für einfache Zeichenoperationen (evtl. gemeinsam für alle Displays?)
  • Laden von eigenen Zeichensätzen

Bezugsquellen

Eine Bezugsquelle für Platinen ist z.b. Mark de Jong Displays und die passenden Flachkabelstecker bekommt man gelegtlich bei Pollin oder bei Wallbraun-Electronics im Shop.