Katze1.jpgKatze1b.jpgKatze2.jpgKatze2b.jpgKatze3.jpgKatze3b.jpgKatze4.jpgKatze4b.jpg

Displays

Serielles LCD-Display (Sparkfun)

Hardware

Sparkfun bietet ein seriell ansteuerbares LCD-Display an (16x2 und 20x4). Das ist bei Projekten sinnvoll, bei denen man wenig Arduino-Ports zur Verfügung hat. Im Prinzip wird nur der TxD-Pin des Arduino benötigt. Sollte die serielle Schnittstelle bereits belegt sein, kann man einen beliebigen Port verwenden, wenn man die NewSoftSerial Library verwendet.

Ich bin nach meinen Tests nicht restlos vom Display überzeugt. Positiv fällt auf:

  • Platine mit geringer Bauhöhe, passt auch in kleine Gehäuse
  • Nur ein Daten-Pin des Arduino benötigt, es bleiben viele Ports frei
  • Preisgünstig

Negativ fiel auf:

  • Die Helligkeit ist nicht sehr hoch und kann nicht eingestellt werden. Der Kontrast ist einstellbar und ausreichen.
  • Das Display hängt sich beim Laden eines Sketches manchmal auf und muss kurz von der Stromversorgung getrennt werden.
  • Zwei Character sind nicht nutzbar, weil sie als Steuerzeichen benötigt werden
  • Ich fand keinen Befehl, wie ich mir eigene Character in den Controller laden kann
  • Es gibt keine Buttons auf dem Display, man kann also nur anzeigen

Wünschenswert wäre ein Display, dass diese Nachteile aufhebt. Ich werde als eines meiner nächsten Projekte einen Arduino für die Displaysteuerung opfern und eine kleine Zusatzplatine entwerfen.

 

Sparkfun Serial Display

 

 

Dies ist das neue Display der Version 2.5, bei welcher der Microcontroller bereits auf der LCD-Platine integriert ist. Der große Vorteil ist, dass man nur einen Digital Port des Arduino belegt (TxD). Nachteil: Sparkfuns Display hat keine Taster zur Bedienung des Programms, wie es z.B. DFRobot's LCD Shield aufweist.

Sparkfun Serial Display Löstseite

 

Auf der Lötseite ist der Microcontroller mit Quarz zu erkennen. Ein dreipoliger Stecker (Gnd, +5V, RxD) dient zum Anschluß an den Arduino. Das Display kann also nur programmiert und nicht abgefragt werden. Die Standardeinstellung ist 9600Bd, 8 Bit, No Parity. Die Schnittstelle kann auf höhere Geschwindigkeiten umprogrammiert werden. Neben dem Controller ist ein Miniaturtrimmer zu erkennen, mit dem der Kontrats des LCD nachgestellt werden kann.

Die Helligkeit der Hintergrundbeleuchtung ist leider nicht besonders hoch. Man kann sie auch nicht höher einstellen. Die programmierbaren Helligkeitsstufen schaffen auch keine Abhilfe.

Dieses Display ist für 17-20 € bei chinesischen Händlern im Internet erhältlich (Ebay).

Libraries

In den Foren finden sich Hinweise darauf, dass es zu Fehlfunktionen des seriellen LCD beim Booten bei Verwendung der Hardware-Schnittstelle des UNO kommt. Der Bootloader sendet anscheinend Zeichen über das serielle Hardware-Interface, welche vom Sparkfun LCD falsch interpretiert werden. Ausweg: Man schließt das LCD an einen beliebigen Port an und verwendet die Library NewSoftSerial (Link) von Mikal Hart. Des weiteren benötigt man die Library SerLCD von Steven Cogswell (Link). Auf dessen Website finden sich auch Hinweise zur Implementierung.

Achtung! Steven Cogswells Beispielprogramm zu seiner Library lief zuerst anscheinend nicht. Nach dem Hochladen des Sketches auf den Arduino waren oft nur ein paar wirre Zeichen zu sehen. Reset am UNO half nicht, man musste das LCD von der Stromversorgung trennen. Das passiert nur beim Laden, nicht im Normalbetrieb mit Ein- und Ausschalten.
Tipp

Beim Kommando

theLCD.setPosition(1,12);

ist der erste Parameter die Zeile (1...2 bzw. 1...4), der zweite Parameter die Spalte (0...15 bzw. 0...19). Etwas verwirrend, weil die Nummerierung einmal bei Null und andererseits bei Eins beginnt.

Tipp

Beim Kommando

SerLCD theLCD(NSS, 16, 2);

wird die Instanz aus der Lib erzeugt. Parameter 1 ist der Instanzname der seriellen Schnittstelle, Parameter 2 ist die Zeichenanzahl einer Zeile, Parameter 3 die Zeilenanzahl.

 

Character Map

HD44780 Character Map

Die rot markierten Character können nicht verwendet werden, weil Sparkfun sie zur Einleitung von Steuersequenzen vewendet:

  • 124 (0x7C)
  • 254 (0xFE)
Ausgabe Character Map

 

Mit dem Character Map Sketch wird der Zeichenwert in Hex ausgegeben und darunter der zugehörige Character angezeigt, im Beispiel die ASCII-Zahl Zwei.

 

Sketch

Es gibt mehrere Sketche zum SparkFun-LCD:

  • SerLCD_Demo.pde Demonstriert die Möglichkeiten des Displays
  • SerLCD_CharSet.pde Gibt auf dem Display alle Characters aus

Mit SerLCD_CharSet kann man die Character Map des LCD prüfen. Jeder Character wird für zwei Sekunden angezeigt. Die beiden Steuerzeichen (0x7C und 0xFE) sind davon ausgenommen:

#include <NewSoftSerial.h>
#include <SerLCD.h>

/***************************************************************************** 
 * Sketch:  SerLCD_CharSet.pde
 * Author:  Andreas Kriwanek
 * Version: 1.00 02.04.2011/21:00
 *
 * Hardware:
 * Arduino UNO
 * Sparkfun serial LCD Display 16x2
 * Use Digital Pin 11 for serial interface
 *
 *
 *****************************************************************************/
// RTC values:
// NewSoftSerial Object on pin 11
NewSoftSerial softSER(0,11);
// SerLCD object using that softSER; initializing for 16x2 LCD:
SerLCD serLCD(softSER, 16, 2); 

char LCDChar[2]="";

//----------------------------------------------------------------------------------------------------------
// Setup and Main:

void setup(void)
{
  // Remember to start the NewSoftSerial port
  // before doing things with the SerLCD
  softSER.begin(9600);
  Serial.begin(9600);
  // This will attempt to initialize the display to
  // blank with the backlight on:
  serLCD.begin();
  // Display some massively important informative text
  serLCD.setPosition(1,0);
  serLCD.print("SparkFun serLCD");
  serLCD.setPosition(2,0);
  serLCD.print("<Character Set>");
  delay(1000);
}

void loop(void){
  // Some text at positions
  serLCD.clear();
  for(int i=0; i<=255; i++){
    if (i!=124 && i!=254){
      serLCD.setPosition(1,0);
      serLCD.print("Value=");
      sprintf(LCDChar, "0x%02X", i);
      serLCD.print(LCDChar);
      serLCD.setPosition(2,0);
      serLCD.print("Character:");
      serLCD.print(char(i));
      delay(2000);  
    }  
  }
}

© 2012 Familie Kriwanek
Joomla templates by a4joomla