LC-Display gibt nur Sonderzeichen aus

Hallo Forum,

ich weiß, der Thread-Titel mag schon einige abschrecken und glaubt mir, ich habe schon so einiges versucht, bin aber jetzt mit meinem Latein am Ende.
Ich habe eine Custom-PCB designed, mit der ich einen LC-Display (16x2) ansteuern möchte. Dazu verwende ich einen Arduino Nano.
Der relevante Teil der Schematic ist im Anhang zu finden. Als Code verwende ich das beigelegte Beispiel der "LiquidCrystal" Lib mit dem Titel "HelloWorld", bei der ich nur die vierfolgenden Zeilen im Setup noch eingefügt habe, damit die Hintergrundbeleuchtung aktiviert wird und der R/W Pin auf Low gezogen wird, bzw. die Pinnummer zur Ansteuerung lt. Schematic geändert.

pinMode(13,OUTPUT);
pinMode(7,OUTPUT);
digitalWrite(13,HIGH);
digitalWrite(7,LOW);

Auf dem Display kommen auch zeichen raus, jedoch sieht die Ausgabe irgendwie so aus " ??0<</", also nur Sonderzeichen. Lt. dem Beispielprogramm, soll aber hier ein Sekundezähler ablaufen. Die Sonderzeichen ändern sich dann auch im Sekundentakt. Irgendwo hakt es also an der Kommunikation denke ich.
Ich weiß echt nicht mehr weiter, warum mir der Display nur diese Sonderzeichen ausspuckt und wäre um jede Hilfe sehr dankbar!

  • Steck mal Display und Nano auf einem Breadboard zusammen - funktioniert das?

Damit man dir besser helfen kann bräuchte es

  • Bilder aus denen man deine Platine/Verkabelung erkennen kann.
  • Sketch posten den du tatsächlich verwendet hast.

Ich tippe auf eine Verbindung die unterbrochen ist oder 2 Leitungen die vertauscht sind.
Grüße Uwe

Das hab ich für den Versuchsaufbau für das Design gemacht, mit den neu gekauften Hardwarekomponenten jedoch noch nicht. Die sind verlötet auf der PCB, die müsste ich erst wieder auslöten, aber werde ich wahrscheinlich machen müssen.
Ich habe 3 PCB's zum Bestücken hier. Zwei davon habe ich bestückt und beide haben das gleiche Fehlerbild.

Hier der Code den ich verwende:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 6, en = 8, d4 = 12, d5 = 11, d6 = 10, d7 = 9;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  pinMode(13,OUTPUT);
  pinMode(7,OUTPUT);
  digitalWrite(13,HIGH);
  digitalWrite(7,LOW);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);
}

Unten das Bild der PCB, der Arduino sitzt auf der Rückseite. Verkabelung in dem Sinne gibt es keine, nur die Leiterbahnen. Der Widerstand R4 wird noch gegen einen SMD-Widerstand getauscht, hatte nur gerade keinen da und der ist auch nur für die Hintergrundbeleuchtung.

Ich habe die Pins durchgemessen - keine Querschlüsse, keine Masseschlüsse, keine Potentialschlüsse. Die Pinbelegung stimmt auch und es sind alle Verbindungen durchgängig..

schau mal deine Lötungen an ... ist die Leitung zum RS (?) auf deiner PCB nicht sauber verlötet?

Ein gutes Auge! :wink: Das sieht tatsächlich so aus:

image

Damit fehlt hier die Durchkontaktierung ...

Habs nochmal nachgelötet und durchgemessen von der oberen Boardseite des Arduino bis zum Pin am LCD. Alles durchgängig und niederohmig

Ergebnis?

wenn nok, bitte neue Bilder von BEIDEN Seiten,
sowie Bilder von deiner Routing Software damit wir uns nicht alles aus den Finger saugen müssen.

Rügt mich ruhig wie ich den Arduino aufgelötet hab :joy: bei der ersten PCB hab ichs mit Headern gemacht und da hab ich das selbe Problem, und gemessen hab ichs ja alles

geht leider immer noch nicht nein. Kann es sein, dass die Lib mit diversen Pins nicht umgehen kann? Benutzt sie SPI im Hintergrund?




t

ich sehe keinen Grund warum die Pins nicht gültig wären.
Daher der Rat das auf einem Breadboard nachzubauen.

Ich bin mir sehr sicher es liegt an deinem Board/deine Lötungen. Gut - du hast auf Durchgang geprüft - aber auch gegen Schlüsse zwischen den Pins. Jeder Pin gegen jeden anderen?

Die library verwendet nichts besonderes
abgesehen davon dass es auch eine Signatur für rs, rw, en gäbe

LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);

Es sind mehrere :wink:

Das werde ich die Tage definitv nochmal machen, um alles auszuschließen, heute geht sichs leider nicht mehr aus

Was meinst du damit? :thinking:

Kaltlöstellen?

Ok, ich check die Lötstellen nochmal und entnehme das überschüssige Zinn, baue die Schaltung am Breadboard nach und messe auch noch zwischen den Pins durch.
Das dauert aber jetzt ein wenig, ich melde mich wieder.

Danke bis dahin schonmal für die Hilfe :grinning:

Das wollte ich fragen, ob das LCD hat schon mal funktioniert.

Das is "fresh outta the box" und aufgelötet, selbiges mit den Arduino.. kann ich nicht beantworten. Aber wäre komisch wenn ein defekt 2x vorkommt

Das dünkt mir daß Du einen Fehler im Platinennaufbau hast.
Grüße Uwe

Joop mir auch . Wahrscheinlich ein schluss zwischen D6 und D7

Warum denkst du genau zwischen D6 und D7?