Problem mit <LiquidCrystal_SR3W.h>

Hallo,

Ich habe ein Problem mit der Schieberegister Library. Ich verwende ein M74 HC595 B1R, ein gelatchtes Schieberegister.
Da ich das Schieberegister mit 3 Verbindungen an den Arduino angeschlossen habe (Data, Clock, Latch), habe ich die LiquidCrystal_SR3W.h library verwendet.
Nur leider wird das LCD mal wieder nicht einmal initialisiert, also man sieht nur diese schwarzen Balken, bzw. einen schwarzen Balken, wenn man mit dem Kontrast runter geht.
Ich kann nicht meinen ganzen Sketch hier hineinschreiben, weil der relativ groß ist, aber ich nehme mal die ersten betroffenen Zeilen:

#include <LCD.h>
#include <LiquidCrystal_SR3W.h>

LiquidCrystal_SR3W lcd(11, 12, 10);          //Schema der Pinbelegung (Data, Clock, Latch)

byte Pfeilhoch[8] = {
      B00000,
      B00100,
      B01110,
      B10101,
      B00100,
      B00100,
      B00000,
      B00000
};

void setup() {
  lcd.createChar(5, Pfeilhoch);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print(" Gyroskop Test! ");
}

Und noch eine Frage: Muss man auch die <LCD.h> lib importieren?

Ich habe das Schieberegister hiernach angeschlossen:
https://bitbucket.org/fmalpartida/new-liquidcrystal/src/bebe49d613c1/LiquidCrystal_SR3W.h

VG Alex

Wie hast Du den 74HC595 angeschlossen? Also die QX-Pins sind klar, die gehen ja zum LCD, aber die restlichen Pins, welche hast Du an den Arduino gehängt, welche nach Masse, welche nach 5V gezogen?

Das ganze sieht bei mir so aus:
ST_CP ist Latch und SH_CP Clock

Und noch eine Frage: Muss man auch die <LCD.h> lib importieren?

Nein, die wird vom anderen Header-File schon importiert.

Da ich keinen Fehler erkennen kann, weder in der Software, noch im Schema, würde ich an Deiner Stelle die Verbindungen überprüfen.

Okay, Danke, dass Du Dir die Zeit genommen hast, die Schaltpläne durchzugucken :slight_smile:
Ich habe das ganze jetzt auch auf dem Breadboard nachgebaut und dann tritt der selbe Fehler auf.
Jetzt kann es eigentlich nur noch am Anschluss an dem LCD liegen (1x10 Pin Stiftleiste eingeschrumpft).
Werde das überprüfen und dann nochmal schreiben ob es funktioniert.

Gruß, Alex

Also es funktioniert nicht.
Hardware ist auf jeden Fall alles richtig verkabelt (Alles doppelt geprüft und auf Breadboard nachgebaut).
Ich habe mal die Ausgänge mit einem normalen Voltmeter vermessen, weil ich nichts besseres hier habe und da ist mir aufgefallen, dass Data durchgängig auf High ist und Clock und Latch durchgängig auf LOW.
Es kann nätürlich sein, dass die beiden Leitungen nur für einen ganz kurzen Moment HIGH sind und deswegen das Multimeter nichts davon mitbekommt. Wäre auch logisch beim Latch.
Hat noch jemand eine Idee, warum es nicht funktionieren könnte?

Hallo nochmal,

Ich habe meine Platine jetzt an die <LiquidCrystal_SR2W.h> lib angepasst und jetzt funktioniert es nach diesem Schaltplan: Google Code Archive - Long-term storage for Google Code Project Hosting.

Jetzt tritt allerdings wieder ein neues Problem auf: Die selbstdefinierten Zeichen werden nich mehr als solche angezeigt, sondern als irgendein anderes Zeichen:
Hier z.B. eigentlich ein Pfeil nach oben, angezeigt werden aber nur zwei senkrechte Striche mit einem kleinem Punkt unten rechts an dem rechtem Strich: ||.

Hier nochmal der Sketch:

#include <LiquidCrystal_SR2W.h>

LiquidCrystal_SR2W lcd(11, 12);          //Schema der Pinbelegung (Data, Clock)

byte Pfeilhoch[8] = {
      B00000,
      B00100,
      B01110,
      B10101,
      B00100,
      B00100,
      B00000,
      B00000
};

void setup() {
  lcd.createChar(5, Pfeilhoch);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print(" Gyroskop Test! ");
}

void loop() {
  lcd.setCursor(0,1);
  lcd.write(5);
  while(true);
}

Gruß, Alex

Fehler gefunden:
Das LCD muss vor dem createChar initialisiert werden:

#include <LiquidCrystal_SR2W.h>

LiquidCrystal_SR2W lcd(11, 12);          //Schema der Pinbelegung (Data, Clock)

byte Pfeilhoch[8] = {
      0b00000,
      0b00100,
      0b01110,
      0b10101,
      0b00100,
      0b00100,
      0b00000,
      0b00000
};

void setup() {
  lcd.begin(16,2);
  lcd.createChar(0, Pfeilhoch);
  lcd.setCursor(0,0);
  lcd.print(" Gyroskop Test! ");
}

void loop() {
  lcd.setCursor(0,1);
  lcd.print(char(0));
  while(true);
}

Edit: Und lcd.write() durch lcd.print(char()) ersetzt.