DIP203-4e mit dem Arduino Due

Hallo allerseits,

Ich muss für ein Projekt das DIP203-4 mit einem Arduino Due betreiben. Mir stellt sich allerdings schon von anfang an ein riesiges Problem in den Weg, das Display zeigt nix an. Ich kann leider nicht mit sicherheit sagen ob das Display schon frittiert ist oder ob ichs einfach nicht gebacken bekomme.

Meine Portbelegung ist wie folgt:

#define RS  19  // output for RS-Signal
#define RW  18  // output for RW-Signal
#define E   16  // output for E-Signal
#define D4  15  // output for D4-Signal
#define D5  14  // output for D5-Signal
#define D6  8   // output for D6-Signal
#define D7  9   // output for D7-Signal

Dazu kommt noch GND und 3.3V Versorgung vom Arduino und ich habe den Reset des Displays mit dem Reset vom Arduino verbunden.

Hier ist noch ein Link zum Datenblatt: http://www.lcd-module.de/fileadmin/pdf/doma/dip203-4.pdf

Hat von euch zufällig jemand erfahrung mit dem Display und kann mir eventuell weiterhelfen?

Grüße, Mupflin

Hallo und willkommen im Forum!

Hast Du die Pins 3, 17 und 18 angeschlossen?

Interessant für ein 3,3V-Display finde ich diesen Satz: "Die Flussspannung der gelb/grünen Beleuchtung liegt zwischen 3,9V und 4,2V und die der weißen Beleuchtung zwischen 3,0V und 3,6V."

An Pin 18 ist der RW Pin vom Display angeschlossen, aus Platzgründen hab ich Pin 17 frei gelassen und Pin 3 ist auch nicht belegt.

Über die Displaybeleuchtung hab ich bis jetzt garnicht groß nachgedacht, ich war der Meinung das ist nur die Hintergrundbeleuchtung und daher zweitrangig.

AlmightyMupflin: Hat von euch zufällig jemand erfahrung mit dem Display und kann mir eventuell weiterhelfen?

Nein, das Display kenne ich nicht, aber an Deiner Stelle würde ich mich über das genaue Modell informieren, denn manche Displays funktionieren ohne Hintergrundbeleuchtung und manche benötigen eine Hintergrundbeleuchtung um zu funktionieren.

Faustregel für diese Text-LCD-Displays: Schriftfarbe schwarz: Hintergrundbeleuchtung nicht notwendig, kann optional verwendet werden Schriftfarbe weiß: Hintergrundbeleuchtung ist zwingend notwendig

Welche Schriftfarbe hat Dein Display?

Außerdem frage ich mich, ob Du das richtige Datenblatt verlinkt hast. Im verlinkten Datenblatt wird lediglich auf die Bestellbezeichnungen DIP203G-4NLED, DIP203B-4NLW und DIP203J-4NLW Bezug genommen, aber NICHT auf ein Display mit der Bezeichnung DIP203-4e.

Ich hab grade mal nachgeguckt. Ich hab das DIP203B-4NLW, also das mit Blauem Hintergrund und weißer Schrift. Ich werd das mit der Hintergrundbeleuchtung am Montag ausprobieren, soweit schonmal danke für die super hilfe :)

Hast Du die Pins 3, 17 und 18 angeschlossen?

AlmightyMupflin: An Pin 18 ist der RW Pin vom Display angeschlossen, aus Platzgründen hab ich Pin 17 frei gelassen und Pin 3 ist auch nicht belegt.

Nur damit es kein Mißverständnis gibt: Ich habe die Pins des Displays gemeint. Was im Sketch steht #define RW 18 // output for RW-Signal bezieht sich auf den Arduino-Pin.

Beispielsweise R/W Arduino-Pin 18 muß an Display-Pin 5.

Achso, die Pins sind alle unbelegt da ich, wie bereits erwähnt, der Meinung war das die Hintergrundbeleuchtung für fir Funktion nich wichtig wäre.

Also, es gibt Fortschritte!
Das Display zeigt nun etwas an, es lag bisher wirklich an der Hintergrundbeleuchtung etc.
Das Problem jetzt ist nun dass das Display nur ausgefüllte Kästchen anzeigt.

Mein Code ist wie folgt:

#include <LiquidCrystal.h>


/**********************************************
*                                             *
*         L C D - Anzeige                     *
*                                             *
***********************************************/
//#include "LiquidCrystal.h"

#define MAXLINES 4         // defines the number of display lines
#define LCD_CHARACTERS 20  // defines the number of Char per line

#define RS  19  // output for RS-Signal
#define RW  18  // output for RW-Signal
#define E   16  // output for E-Signal
#define D4  15  // output for D4-Signal
#define D5  14  // output for D5-Signal
#define D6  8   // output for D6-Signal
#define D7  9   // output for D7-Signal

#define Zeile1 0
#define Zeile2 1
#define Zeile3 2
#define Zeile4 3

// Initialisierung der Anzeige
LiquidCrystal lcd(RS, RW, E, D4, D5, D6, D7); // RS, RW,E, D4, D5, D6, D7 - the standard connection


void setup() {
 //lcd.begin(LCD_CHARACTERS, MAXLINES);
 //-------------------------------------------------
 //  LCD-Display
 //-------------------------------------------------

 // mit Pinmode die Ausgänge für das LCD zuweisen
 pinMode (E, OUTPUT);
 pinMode (RS, OUTPUT);
 pinMode (RW, OUTPUT);
 pinMode (D4, OUTPUT);
 pinMode (D5, OUTPUT);
 pinMode (D6, OUTPUT);
 pinMode (D7, OUTPUT);
 lcd.begin(20, 4);
 lcd.clear();
 lcd.setCursor(0, Zeile1);
 lcd.print("TEST-Menue");
 lcd.setCursor(0, Zeile2);
 lcd.print("Ver:");
 lcd.print("0.1");
 lcd.setCursor(0, Zeile3);
 lcd.print("Datum:");
 lcd.print("17.07.2015");
}

void loop() {
 lcd.print("18");
 lcd.print(":");
 lcd.print("07");
 lcd.print(":");
 lcd.print("2015");
 lcd.print(" -  ");
 lcd.print("09");
 lcd.print(":");
 lcd.print("20");

}

Die Pins sind wie im Code genannt belegt, allerdings krieg ich nur weiße Kästchen auf dem Display zu sehen.

AlmightyMupflin: Das Display zeigt nun etwas an, es lag bisher wirklich an der Hintergrundbeleuchtung etc. Das Problem jetzt ist nun dass das Display nur ausgefüllte Kästchen anzeigt.

Wenn das Display in der ersten Zeile ausgefüllte Kästchen anzeigt und in der zweiten Zeile leere Kästchen, dann stimmt die Stromversorgung und der Kontrast des Displays, aber die Ansteuerung fehlt noch komplett.

Und bei der Ansteuerung würde ich solche Fehler vermeiden:

 // mit Pinmode die Ausgänge für das LCD zuweisen
  pinMode (E, OUTPUT);
  pinMode (RS, OUTPUT);
  pinMode (RW, OUTPUT);
  pinMode (D4, OUTPUT);
  pinMode (D5, OUTPUT);
  pinMode (D6, OUTPUT);
  pinMode (D7, OUTPUT);

Das gehört komplett aus dem Code des Sketches gelöscht, da die pinModes von Deiner Library gesteuert werden.

Wie hast Du denn jetzt die Hintergrundbeleuchtung gelöst? Beleuchtung versorgt aus dem 5V-Pin des DUE mit einem Vorwiderstand in Reihe, um die LEDs im Backlight nicht zu überlasten?

Die Hintergrundbeleuchtung wird mit Vorwiderstand vom 3,3V Pin des Due versorgt, hat auch so funktioniert. Ich krieg grad das komplette Display voll mit den ausgefüllten Kästchen, also nicht nur die erste Reihe. Was sich mir auch noch nicht ganz erschließt ist warum ich das Display mit nur vier Datenpins (D7-D4) anspreche,wo doch acht vorhanden sind.

Im 4 Bit Modus werden 2 Halb-Bytes hintereinander übertragen um auf das ganze Byte zu kommen. Schlechter als der 8 Bit Modus ist das nicht wirklich.

AlmightyMupflin: Ich krieg grad das komplette Display voll mit den ausgefüllten Kästchen, also nicht nur die erste Reihe.

Bei einem 20x4 Display solltest Du nach Anlegen der Stromversorgung (ohne Ansteuerung) die erste und die dritte Zeile voll mit Klötzchen angezeigt bekommen. Die zweite und vierte Zeile sollten leer sein.

Probier mal ohne Ansteuerung, nur mit lcd.begin(20, 4);!

AlmightyMupflin: Was sich mir auch noch nicht ganz erschließt ist warum ich das Display mit nur vier Datenpins (D7-D4) anspreche,wo doch acht vorhanden sind.

Im 4-bit Mode des LCD-Controllers wird jedes Byte in Form von zwei Nibbles (Halb-Bytes zu je 4 Bits) übertragen. Dadurch werden nicht acht Datenleitungen benötigt, sondern nur vier Datenleitungen.

So eine loop-Funktion ist natürlich auch völliger Quatsch:

void loop() {
  lcd.print("18");
  lcd.print(":");
  lcd.print("07");
  lcd.print(":");
  lcd.print("2015");
  lcd.print(" -  ");
  lcd.print("09");
  lcd.print(":");
  lcd.print("20");
}

Damit versuchst Du, in einer einzigen LCD-Zeile unendlich viele Zeichen auszugeben. Du kannst aber maximal 20 Zeichen in einer Zeile ausgeben, wenn die LCD-Zeile 20 Zeichen breit ist.

Also testen könntest Du zum Beispiel mit:

void loop() {
 lcd.clear(); // löscht den LCD-Inhalt und setzt die Schreibmarke auf oben links
 lcd.print("18");
 lcd.print(":");
 lcd.print("07");
 lcd.print(":");
 lcd.print("2015");
 lcd.print(" -  ");
 lcd.print("09");
 lcd.print(":");
 lcd.print("20");
}

Dann würde das LCD beim Löschen und Neubeschreiben immer kurz flackern, aber durch das zwischenzeitliche clear() mit Positionierung der Schreibmarke in die erste Zeile links oben gibst Du dann wenigstens immer nur die nachfolgenden Ausgaben in derselben Zeile aus, bevor die Zeile dann gelöscht und die Schreibmarke wieder zurückgesetzt wird.

Wenn Du illegale Ausgaben auf ein Displays schickst, kann alles mögliche passieren. Aber es ist unwahrscheinlich, dass Du beim Senden illegaler Ausgaben genau die von Dir gewünschte Anzeige dabei herauskommt.

Es Funktionert!

Die Weißen Kästchen lagen an falscher Kontrasteinstellung.

Danke an alle, ihr habt mir super weitergeholfen :)