Forum: Mikrocontroller und Digitale Elektronik I2C Display Problem


von Test (Gast)


Lesenswert?

Hallo zusammen, habe heute mein Display+Controller erhalten und wollte 
gleich mal loslegen. Mit folgendem Skatch:
1
#include <LiquidCrystal_I2C.h>
2
3
LiquidCrystal_I2C lcd(0x27,20,4); 
4
5
void setup()
6
{
7
  lcd.init();                      
8
  lcd.backlight();
9
  lcd.setCursor(3,0);
10
  lcd.print("Hello, world!");
11
  lcd.setCursor(2,1);
12
  lcd.print("Test 2.Zeile");
13
   lcd.setCursor(0,2);
14
  lcd.print("Test 3. Zeile");
15
   lcd.setCursor(2,3);
16
  lcd.print("Test 4. Zeile");
17
}
18
19
20
void loop()
21
{
22
}

Die Adresse habe ich mit dem I2C Scanner ermittelt. 
Hintergrundbeleuchtung in an, aber ich sehe keinen Text.
Ist der Code soweit ok? Denke schon da verschiedene Beispiele ähnlich 
ausssehhen.
Was kann ich noch testen oder ist da etwas defekt?


Gruß und Danke

von Matthias L. (lindner8712)


Lesenswert?

Hallo,

Code sieht eig. Gut aus...
Hast du die Kontrastspannung eingestellt, ich denk mal das ist ein China 
Kracher aus der Bucht?!?

Dann sollte Auf der Platine sollte ein Poti sein welches diese Aufgabe 
übernimmt. Einfach mal dran drehen und schauen ob was angezeigt wird.

von Stefan F. (Gast)


Lesenswert?

Kläre mal, ob diese Bibliothek überhaupt für dein Display geeignet ist.
Hast du die Pull-Up Widerstände und die Spannungspegel am I²C Bus 
geprüft?

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Die Adresse habe ich mit dem I2C Scanner ermittelt.
> Hintergrundbeleuchtung in an, aber ich sehe keinen Text.

Ist normal. Dreh an der Schraube (mit einen Schraubenzieher) an der 
Rückseite des Interface. Die Chinesen drehen die immer maximal auf,.

von Test (Gast)


Lesenswert?

Habe am Kontrast schon geregelt, keine Veränderung.
Das Teile habe ich von Chhristians Technikshop und verschiedene 
Bibliotheken ausprobiert, immer das gleiche.
An die Pullup Widerstände dachte ich auch schonmal, auch wenn die 
Beispiele es nicht verwendet haben, habe ich es dennoch ausprobiert. 
Selbes Problem trotzdem.

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Habe am Kontrast schon geregelt, keine Veränderung.

Nicht nur ein bisschen drehen. Das musst du drehen bis es anschlägt in 
BEIDE Richtungen und dabei das Display beobachten. Das können mehrere 
Umdrehungen sein.

Ich habe das selbe Display aus den selben Shop mit den selben Interface 
und es waren ne Menge Umdrehungen.

Kleiner Tipp dabei. Irgendwann siehst du ein "Muster" dann musst du noch 
ein Tick weiter drehen bis das Muster verschwindet. Dann ist es perfekt 
eingestellt.

Logoweis musst du das unter Strom drehen. ;)

UND KEINE GEWALT anwenden.

Die "Schraube" ist in den blauen Würfel und du brauchst ein 
Minischraubenzieher . !!!!

von Test (Gast)


Lesenswert?

da gibt es nicht mehrere Umdrehungen, sondern nur etwas bis zum 
jeweiligen Anschlag.

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> da gibt es nicht mehrere Umdrehungen, sondern nur etwas bis zum
> jeweiligen Anschlag.

Hab es gerade getestet. Bei meinen sind es ca. 1 1/2 Drehungen. Und wie 
schon gesagt, das Muster (so ne Matrix je Buchstabenfeld) sollte 
erscheinen und dann wieder verschwinden.

Achte darauf das auch Jumper an der Seite gesetzt ist. Da wo LED steht.

von Test (Gast)


Lesenswert?

ok das kommt hin, aber es kommt auch kein Muster(kenne es vom normalem 
Display). Der Jumper sitzt, LED auf der Rückseite leuchtet.

von Test Tester (Gast)


Lesenswert?

Test schrieb:
> Was kann ich noch testen oder ist da etwas defekt?

- Stromversorgung angeschlossen?
- TWI Pins am Arduino verwendet?
- SCLK und SDATA vertauscht?

Nachdem wir weder Schaltplan noch Aufbau sehen: es müssen
4 Leitungen an den I2C-Display-Controller angeschlossen sein!

von Test Tester (Gast)


Lesenswert?

Test schrieb:
> Was kann ich noch testen oder ist da etwas defekt?

- Richtiger Arduino in der IDE eingestellt?
- Richtiger COM Port für den Arduino eingestellt?
- Download ohne Fehlermeldungen?

von Test (Gast)


Lesenswert?

passt soweit alles und wenn der I2C Scanner die Adresse auslesen kann, 
denke ich, das alles richtig verbunden ist soweit. Denke schon mehr 
daran das der Controller bzw. das Display defekt sind. Da beim 
Kontrastregeln keine Sonderzeichen(oder was das sein soll) angezeigt 
werden.

von Test Tester (Gast)


Lesenswert?

Test schrieb:
> passt soweit alles und wenn der I2C Scanner die Adresse auslesen kann,
> denke ich, das alles richtig verbunden ist soweit. Denke schon mehr
> daran das der Controller bzw. das Display defekt sind.

Ja immer sind die anderen Schuld.
Vor dem Bildschirm kann der Fehler ja nicht sitzen.

Zeige deinen Aufbau.

von bastler (Gast)


Lesenswert?

Es gibt viele unterschiedliche Adapter, gerade bei den Steuerleitungen 
macht jeder gerne mal was anderes. Wenn Deine Lib nicht für die 
verwendete Hardware ist, geht es nicht, oder Lib anpassen.

Teste einfach mal, ob die Hintergrundbeleuchtung sich schalten lässt, 
wenn nicht, muss die Lib auf die Hardware angepasst werden, oder eine 
andere Lib nehmen.

Wenn der I2C Scanner was findet, 0x27 sieht gut aus, dann sollte der IC2 
Teil passen.

von Frank G. (frank_g53)


Lesenswert?

Test schrieb:
> Was kann ich noch testen

Ein Testprogramm auf den Arduino aufspielen, welches die Onboard-LED im 
Sekundentakt blinken lässt.
Damit lässt sich der eingestellte Systemtakt prüfen.

Test schrieb:
> wenn der I2C Scanner die Adresse auslesen kann,
> denke ich, das alles richtig verbunden ist

Ist das ein Scanner-Programm, welches auf dem Arduino läuft und über den 
Terminal die Adresse anzeigt?

von Test (Gast)


Lesenswert?

Die Hintergrundbeleuchtung läßt sich schalten

von Sebastian W. (wangnick)


Lesenswert?

Es gibt anscheinend verschiedene LiquidCrystal_I2C Bibliotheken, die das 
Display leicht unterschiedlich ansteuern. Benutzt du genau die von 
deinem Lieferanten empfohlene?

LG, Sebastian

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Sebastian W. schrieb:
> Es gibt anscheinend verschiedene LiquidCrystal_I2C Bibliotheken, die das
> Display leicht unterschiedlich ansteuern. Benutzt du genau die von
> deinem Lieferanten empfohlene?

Womit wir wieder zum Anfang zurück kommen.

Ich würde auch empfehlen hier nicht weiter über die Hardware (Poti, etc) 
zu diskutieren, solange nicht klar is welche Hardware und Software unser 
Fragesteller hat. Weil das Erfahrungsgemäß in sinnlose Kontroversen 
ausartet, oft auch in Streit.

von Test (Gast)


Lesenswert?

Guten Morgen,

die Bibliothek habe ich aus der IDE installiert, "LiqidCrystal I2C" von 
Frank de Brabander.
Das Display, 
https://www.christians-shop.de/Set-LCD-2004-I2C-Module-20x4-Figures-Illumination-Blue-I2C-Modulee-for-Arduino
Ist an einem Arduino Mini pro angeschlossen.

von Stefan F. (Gast)


Lesenswert?

Bin ich blind oder gibt es in dem Shop keinerlei Datenblatt zu dem 
Display? Wer kauft so etwas?

Und bei der Bibliothek fehlt ebenfalls die Doku, zu welchem Display sie 
kompatibel ist 
(https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library).

Das ist doch Scheiße

von A. N. (bastelmaniac)


Lesenswert?

Der TE möge sich den Unterschied zwischen 3,3V und 5V Logik zu Gemüte 
führen.

Diese I2C zu HD44780 Konverter haben meistens ICs die 3,3V Logik können, 
aber die HD44780 Displays können es nur selten. Da muss man die 
Spannungsversorgung zwischen Konverter und Display auftrennen.

Mach ich auch so und es funktioniert sehr gut.

von Klugscheißer (Gast)


Lesenswert?

Nur wenn die I2C Adresse erfolgreich ermittelt wird, heißt es nicht 
umbedingt dass auch das Display in der fertigen Anwendung auch was 
anzeigt.
Die Lib ist der entscheidene Faktor !
Viele I2C Adappter mit PCFxxx sind unterschiedlich designt,d.h. die
Lib muss passen sonst wird nichts angezeigt.
Dein i2C scanner zeigt Dir nur die vom PCFxxx an !
Ich habe auch verschiedene LCD die nur mit einer speziellen Lib "laufen" 
-
also nicht zwangsläufig defekt sind.
Wenn möglich diese Display über 4 Bit parallel mit der Standard Lib 
testen
um so die grundsätzliche Funktion zu überprüfen.
In manchen Lib,s kannst Du auch die Zuordnung LCD zu PCFxxx einstellen.
ich selbst nehme nur nach I2C adappter die mit meiner "Standard Lib"
kompatibel sind.
Bestes beispiel: ich hatte in der Bucht überflüssige LCD mit I2C 
verkauft,
der Käufer meinte die sind defekt.
Ich hatte dann die Lib geschickt mit der ich diese vor Verkauf getestet 
habe
und siehe da alles ist prima - LCD,s sind nicht defekt.
Also wieder die falsche Lib verwendet - der Käufer wollte aber erst 
einmal sein Geld zurück und war Anfangs sehr beratungsresistent.

von Test (Gast)


Lesenswert?

Habe den Shop Mal angemalt das ich die Bibliothek und Rat benötige. Mal 
sehen

von Karl B. (gustav)


Lesenswert?

Hi,
Habe auch ein Sain Smart 2004.
https://www.christians-shop.de/Set-LCD-2004-I2C-Module-20x4-Figures-Illumination-Blue-I2C-Modulee-for-Arduino

Das ist vom Display selbst her ein stinknormals HD44780-er, und mit 
entsprechender Initialisierungsroutine problemlos ansteuerbar.
Nur noch Huckepack der Portadapter hinten drauf.
Aber afaik zumindest zwei Versionen im Umlauf:
Frage:
Was steht auf dem Portexpander IC drauf?
mit oder ohne A.
Die Adressen sind dann unterschiedlich.

PCF8574->0x40...4E;
PCF8574A->0x70...7E

ciao
gustav

von Axel R. (axlr)


Lesenswert?

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/examples/HelloWorld/HelloWorld.ino
Ich denke auch, dass die Bibliothek mit 20x4 das LCD nicht ordnungsgemäß 
initialisiert.
Ist jetzt aus der ferne eher schlecht zu prüfen.
Das Beispiel ist ja, in der Tat, wirklich einfach. Geb' ich gern zu, 
dass man da garnicht auf die Idee kommt, mal in die *.cpp reinzusehen, 
was da exakt veranstaltet wird.
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/LiquidCrystal_I2C.cpp
Denke, dass mit der Initialisierung was nicht ganz stimmt...
probier doch mal das Display mit 16x2 Zeichen zu initialisieren

In der cpp wird auch auf ein Datenblatt referenziert. Leider steht nicht 
hierzu, welches genau. Aber eben einzeilig oder zweizeilig.

Nochmal edit:
lass mal SetCursor weg und schreib mal einfach "hello world"

: Bearbeitet durch User
von Axel R. (axlr)


Lesenswert?

1
void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
2
  int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
3
  if (row > _rows) {
4
    row = _rows-1;    // we count rows starting w/0
5
  }
6
  command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
7
}

Vielleicht stimmen auch hier die Offsets der Zeilenanfänge nicht.
Wir hatten doch letztens erst auch so ein Problem, wo nur die ersten 8 
Zeichen angezeigt wurden.

von Karl B. (gustav)


Lesenswert?

Hi,
bin der Meinung, dass eventuell die Adressen nicht von 7-Bit- auf 8-Bit- 
Format angepasst wurden. Dann müssen am Anfang noch A0 bis A2 auf High 
stehen.
Das addiert man zur Portadapteradresse.
Beispiel:
;TWI/I2C-PortB PB7=SCL; PB5=SDA
; LCD: 4x20 SainSmart2004; HD44780 compatible
; P7  P6  P5  P4  P3  P2  P1  P0
; D7  D6  D5  D4  LED ENA R|W RS
; A0,A1,A2 -> left open e.g =H  -> 3F
to be added to portdaptor's address
e.g.
PCF8574->0x40...4E;
PCF8574A->0x70...7E

Die Steuerbits, Enable und RS sind im Achtbitformat gekapselt zu senden.
R/W ist standardmäßig auf Low. Denn eine "Rückwärtsübertragung" ist beim 
Portadater nicht vorgesehen, also entfällt die Busybitabfrage von vorn 
herein. Einbahnstraße. Ausschließlich Vierbitmodus.
Eine Extrawurst für 4 x 20 brauchte es nicht. (Wie ein 16x2-er 
initialisierbar)
Aber zur Info: Adressen für Zeilenanfänge 1...4:
Hex80
HexC0
Hex94
HexD4

Viel Spaß

ciao
gustav

von Johannes S. (Gast)


Lesenswert?

der TO schrieb doch schon das die Hintergrundbeleuchtung an ist. Wenn 
die durch lcd.backlight(); eingeschaltet wurde, dann muss die Adresse 
richtig sein.
Um sicher zu gehen das die nicht per default an ist, kann man die Zeile 
auskommentieren, dann muss die aus sein. Oder noch besser im 
Sekundentakt umschalten.

Hier ist auch eine gute Beschreibung zu Display und I2C Adapter:
https://lastminuteengineers.com/i2c-lcd-arduino-tutorial/

von Spess53 (Gast)


Lesenswert?

Hi

>Wir hatten doch letztens erst auch so ein Problem, wo nur die ersten 8
>Zeichen angezeigt wurden.

Das ist die ganz normale Zeilenbelegung für ein 4x20 Display. Siehe 
Tabelle S.5 in

https://www.lcd-module.de/produkte/dotmatrix/tabellen.html#c2368

MfG Spess

von Spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Bitte Anhang verwenden.

MfG Spess

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> der TO schrieb doch schon das die Hintergrundbeleuchtung an ist.

Das ist der Standard, hatte gestern auch noch eines von den Dingern in 
den Fingern.

> Um sicher zu gehen das die nicht per default an ist, kann man die Zeile
> auskommentieren, dann muss die aus sein.

Nöö. Ist dann wegen "Default an" immer noch an :-)

> Oder noch besser im Sekundentakt umschalten.

Jepp, genau so.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Frank M. schrieb:
> Das ist der Standard, hatte gestern auch noch eines von den Dingern in
> den Fingern.

Hi,
den Jumper ziehen, dann ist sie aus.
(BTW: Da hab ich eine Dimmung mit Transistor angeschlossen.)
Spess53 schrieb:
> Bitte Anhang verwenden.
Ok. Danke für Tipp.
Aber das "Sain Smart" ist etwas simpler gestrickt.
Wie gesagt:
Adresse des Portadapters... ?
Zeilenanfangsadressen:
Hex80
HexC0
Hex94
HexD4

ciao
gustav

P.S.:
Hab bei einem den Portadapter abgelötet und wie ein "normales" HD44780 
zum Laufen bekommen. Dann schenke ich mir die TWI/I2C-Einrichtung.
Und schauen, ob da bei A0 bis A2 bereits Lötbrücken gesetzt sind. Hier 
nicht.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Ich habe die Nacht nochmal darüber nachgedacht. Die einzige Möglichkeit 
wieso das nicht funktioniert ist, das das Display ZU VIEL Strom bekommt. 
Oder der Blaue China-Regler defekt ist.

Ich glaube 100 % NICHT an einen Softwarefehler. Wie bereits oben 
erwähnt, zeigt die Hardware/Das Display ein Matrixmuster je Buchstabe 
an, wenn es LEICHT über steuert ist. Dies kann man testen, ohne das es 
irgendwelche Software braucht.

Und bei 1.10 Euro für den Adapter... . Ich bestelle bei China-Teilen die 
unter 2 Euro kosten, meist immer 1 Ersatzteil gleich mit. Ist halt 
billigste Fertigung. Da muss man mit Fehlern rechnen.

Den Shop muss ich mal in Schutz nehmen. Der hat vernünftige Preise, und 
erledigt dafür die Arbeit das Zeug in China zu beschaffen. Das selbe was 
ich bisher (und auch noch immer) über Ebay mache.  Allerdings wird der 
Shop demnächst mehr Aufträge von mir bekommen. Wegen den 1.7.2021. :;(

Datenblatt braucht man nicht. Es gibt für das Display genügend Blogs 
u.s. wo man sieht wie es angeschlossen wird. Einzig für den FESTEN 
Zeichensatz ist ein Datenblatt vielleicht von nutzen, wenn man wissen 
will wie man üäöü ansteuert. Das ist aufwendig. Ich lasse es meist.

von Stefan F. (Gast)


Lesenswert?

Schlaumaier schrieb:
> Datenblatt braucht man nicht.

Doch. Das sehen wir an diesem Thread sehr deutlich.

Der Händler sollte angeben, welcher Display-Controller verwendet wurde, 
welcher Chips für den I²C Adapter verwendet wurde und wie diese beiden 
miteinander verbunden sind. Außerdem sollte er die Stromaufnahme mit und 
ohne Hintergrund-Beleuchtung angeben.

Du kaufst da eine Katze im Sack. Selbst auf die Fotos kann man sich 
typischerweise nicht verlassen, da sich die Händler kleine Änderungen 
vorbehalten.

von Test (Gast)


Lesenswert?

Hallo Schlaumaier, 8ch schrieb ja bereits das ich kein 
Übersteuerrungsmuster sehe, selbst wenn ich es nur an 5V lege und 
Versuche zu regeln. Ich kenne es auch wie du 3s beschrieben hast von 
anderen Displays .
Die Displayhintergrundbeleuchtung läst sich per Code an und ausschalten. 
Mit einer Init mit 16x2 kann ich es gerne nochmal ausprobieren.

von Schlaumaier (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Der Händler sollte angeben, welcher Display-Controller verwendet wurde,
> welcher Chips für den I²C Adapter verwendet wurde

Lies mal die Beschreibung.

https://www.christians-shop.de/LCD-2004-20x4-Zeichen-Beleuchtung-Blau-kompatibel-mit-HD44780

Mir reicht es wenn da HD44780 steht und der beigelegte Adapter passt.

Jedenfalls habe ich mit diesen Sshlüsselwort noch nie Probleme gehabt.

Was den Adapter angeht.
1. gibt es da Beschreibungen wie Sand am Meer.
2. Reicht es völlig aus, wenn man mal die Augen aufmacht und sich den 
Chip ansieht.
3. hat der der Chinese wo ich meine 5 Displays (1602) + Adapter gekauft 
hat auch nicht gemacht.


Allerdings habe ich 10 Zahnstocher unter den Adapter gelegt als ich ihn 
eingelötet habe. ;) Der neigt (im wahrsten Sinne des Wortes) zum Neigen 
und das führt zu Problemen.

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Die Displayhintergrundbeleuchtung läst sich per Code an und ausschalten.
> Mit einer Init mit 16x2 kann ich es gerne nochmal ausprobieren.

Aber wie schon erwähnt, ein 1.20 Euro Adapter kann auch mal kaputt sein.

Man sollte wenn man diese Displays dauernd  verwendet immer 1-2 auf 
Reserve habe.

Was den Adapter selbst angeht. Den kannst du auch Problemlos nachbauen. 
Nimm ein PCF8574 und regele die Display-Helligkeit via Poti. Was anderes 
macht die Schaltung auch nicht.

Sie ist bloß einfacher und kostet weniger als es selbst zu machen.

Hier ein Schaltplan via Fritzing. 
https://www.hackster.io/dzerycz/character-lcd-over-i2c-ba8ee9  <- Ist 
zwar in English aber ich bin zu faul den Deutschen Text zu suchen.

von Test (Gast)


Lesenswert?

Sobald ich die Entlötlitze da habe, werde ich den Adapter anlöten und 
beides separat testen. Meine Vermutung ist auch das der Adapter defekt 
ist, da alles andere ja doch irgendwie funktioniert. Welche Bibliothek 
verwendest du denn Schlaumaier, kann diese ja auch nochmal ausprobieren?

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Welche Bibliothek
> verwendest du denn Schlaumaier, kann diese ja auch nochmal ausprobieren?

Jein ;)

Ich hatte mal mit einer Libs für das Display probleme mit der 
Positionierung und Ärger mit der IDE-Version.  Was heißt : Schreib in 
den Header welche IDE -Version für den Code ist. Seit dem schreibe ich 
in b4r.

Falls du es aber willst.
www.b4x.com . Da das b4r runter ziehen.


Sub Process_Globals
  'These global variables will be declared once when the application 
starts.
  'Public variables can be accessed from all modules.
  Public Serial1 As Serial
  Public lcd As LiquidCrystal_I2C
End Sub

Private Sub AppStart
  Serial1.Initialize(115200)


  lcd.Initialize(0x27, 20, 4) 'Adresse, Zeichen, Zeilen
  lcd.Backlight = True


  lcd.SetCursor(0,1)
  lcd.Write("Temperatur:")

End Sub


Das ist der Code. Ich muss nur die Biblothek LiquidCrystal_I2C anhaken. 
Das ist alles.

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Test schrieb:
> Mit folgendem Skatch:

Ich vermisse:
1
#include <Wire.h>

Unvollständig und falsch, eher so:
1
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Dann fehlt noch init:
1
void setup() 
2
lcd.begin(20,4);  // initialize the lcd

Im Anhang ein Bastelsketch, der hier klaglos spielt - Adresse und 
Displaygröße anpassen und mal probieren.

Dazu meine Lib, hier liegt sie in:

Verwende die Bibliothek LiquidCrystal im Ordner: 
[Laufwerk]\Arduino_IDE\portable\sketchbook\libraries\LiquidCrystal 
(legacy)

und die IDE fischt sich dort die I2C-Teile raus.

Ich sehe gerade, dass ich auch eine abweichende wire verwende:

Verwende die Bibliothek Wire im Ordner: 
[Laufwerk]\Arduino_IDE\portable\sketchbook\libraries\Wire

Bitte zuerst nur "Display_bespielen.ino" testen und erst, wenn das nicht 
tut, die anderen libs reinspielen. Vorher Sicherung machen, falls das 
andere Dinge verbiegt!

Stefan ⛄ F. schrieb:
> Bin ich blind oder gibt es in dem Shop keinerlei Datenblatt zu dem
> Display? Wer kauft so etwas?

Das ist unter (uns) Arduinos so üblich, irgendwas kaufen und hoffen. 
Meine 1602 und 2004 vom Ali habe ich klaglos in Gang bekommen.

Und immerhin bietet der Händler auf Anfrage eine A*-Lib an, hoffen wir 
mal, dass er die bekommt.

Klugscheißer schrieb:
> Viele I2C Adappter mit PCFxxx sind unterschiedlich designt,d.h. die
> Lib muss passen sonst wird nichts angezeigt.
> Dein i2C scanner zeigt Dir nur die vom PCFxxx an!

Ausnahmsweise mal richtig gesch****, ich habe auch eine Weile gesucht, 
Bilder verglichen und die zugehörigen Beispiele ausprobiert.

von Schlaumaier (Gast)


Lesenswert?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// LED Steuerung mit 8574

// Verbindungen zum Uno
// GND > D4
// Data > D5
// Input > D6
// VCC > D7


LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);

  lcd.init();         // LCD-Ini
  lcd.clear();        // LCD-löschen
  lcd.backlight();    // LCD AN

  lcd_text("Prg gestartet", 0);

}

Das der Code den ich damals benutzt habe.

Ich glaube die Libs war sogar bei der Installation dabei.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag : Schau dir mal die Beispiele an.

Bei mir ist da z.b. eine i2c-Ansteuerung mit einer Adafruit-Libs drin.

von Peter D. (peda)


Lesenswert?

Ist das LCD nicht initialisiert und stimmt die Kontrastspanung, zeigt 
jede 2. Zeile schwarze Kästchen, die nach dem Init verschwinden.
Es gibt viele verschiedene LCD-Verschaltungen, d.h. die 2. Zeile kann 
auch die 2. Hälfte sein.

Ich finds schon naiv, wie man ein beliebiges LCD mit einer beliebigen 
Lib zusammen pappen kann und dann erwartet, daß es funktioniert.

In der Regel haben Libs eine Liste an unterstützten LCDs und 
entsprechende Defines, die man richtig setzen muß.

von Karl B. (gustav)


Lesenswert?

Peter D. schrieb:
> Ich finds schon naiv, wie man ein beliebiges LCD mit einer beliebigen
> Lib zusammen pappen kann und dann erwartet, daß es funktioniert.

Hi,
Hardware und Halbleiterbestückung kann auch variieren.
Evtl. sind Lötbrücken (A0, A1, A2) gesetzt. Das verlangt jeweils nach 
anderen Adressen.
Und wie gesagt mit "A" oder ohne "A" des PCF8574  ergibt auch 
unterschiedliche Adressen.
Der im Bild oben braucht: 7E
https://www.mikrocontroller.net/attachment/516696/SainSmart2004_Pinout.jpg

ciao
gustav

von au weia (Gast)


Lesenswert?

Karl B. schrieb:
> Und wie gesagt mit "A" oder ohne "A" des PCF8574  ergibt auch
> unterschiedliche Adressen.

Labertasche!
Muss man jetzt jeden einzelnen Ignoranten darauf hinweisen dass
der TO mit einem Adress-Scanner bereits eine richtige,
funktionierende Adresse herausgefunden hat?

von Johannes S. (Gast)


Lesenswert?

Und auch die Hintergrundbeleuchtung konnte laut TO geschaltet werden.

Ich würde die Platinen mal auf schlechte Lötstellen/Brücken 
kontrollieren, das ist da auch nicht so selten.

von Axel R. (axlr)


Lesenswert?

Johannes S. schrieb:
> Und auch die Hintergrundbeleuchtung konnte laut TO geschaltet werden.

schon das allein erübrigt eine Prüfung der I2C Adresse. Der Portexpander 
läuft also. Liegt dann "nur" noch am Display.
Seine LCD-Lib zieht die "wire.h" und macht auch die initilaisierung des 
LCD, inklusive clear() und home().
Einfach mal reingucken:
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/LiquidCrystal_I2C.cpp

von Karl B. (gustav)


Lesenswert?

Test schrieb:
> Was kann ich noch testen oder ist da etwas defekt?

Hi,
zeig mal Fotos von Display-Vorderseite und Rückseite.
Wir reden sonst womöglich aneinander vorbei.
Tipps hat TO ja nun schon genug bekommen.

ciao
gustav

von au weia (Gast)


Lesenswert?

Karl B. schrieb:
> Tipps hat TO ja nun schon genug bekommen.

Vor allem deine "wertvollen" Tipps waren sehr hilfreich.

Karl B. schrieb:
> Wir reden sonst womöglich aneinander vorbei.

Nein, du redest am TO vorbei.

von Karl B. (gustav)


Lesenswert?

au weia schrieb:
> Nein, du redest am TO vorbei.

Bild?

ciao
gustav

von Schlaumaier (Gast)


Lesenswert?

Karl B. schrieb:
> Hi,
> zeig mal Fotos von Display-Vorderseite und Rückseite.
> Wir reden sonst womöglich aneinander vorbei.

Ich denke immer noch das das ein Hardware-Problem auf der Adapterplatine 
ist. Genauere gesagt habe ich das Poti im Verdacht, und zwar das das 
nicht reagiert.

Der TO kann sich ja mal den Spaß machen das Poti zu messen. Oder wenn er 
zur verfügung hat, mal eben den Fritzing-Schaltplan nachbauen. Dann weiß 
er ob der Adapter/Poti Schrott ist.

Kleiner Tipp an den TO. Der PCF8574 /75 ist einer der Wichtigsten 
Bausteine die du für den Arduino brauchst. Mein Tipp: Besorge dir ein 
paar (gibts auch mit Beinchen) das ist nie verkehrt.

Ansonsten brauchst du i.d.R. für jede LED (die nicht stripped ist) ein 
eigenen Port und das wird mächtig eng.

Fast alle meine Schaltungen habe 2-3 von den Chips drauf.  1 für das 
Display + 1 für LED  Taster  Tastatur Auswertung, Anzeige.

von Test (Gast)


Lesenswert?

Hallo zusammen,

nachdem ich den Controller anlöten konnte, habe ich beides testen 
können. Display ist ok, Controller lief mit einem zweiten Display auch 
nicht. Habe neue Controller bestellt die heute eingetroffen sind und es 
lag am Controller.

Jetzt eine andere Frage. Da die Controller alle die selbe Adresse haben, 
kann man diese umprogrammieren?

Gruß

von Falk B. (falk)


Lesenswert?

Test schrieb:
> Jetzt eine andere Frage. Da die Controller alle die selbe Adresse haben,
> kann man diese umprogrammieren?

Die haben Lötbrücken zur Einstellung der I2C-Adresse.

von Test (Gast)


Lesenswert?

A0-A2 denke ich mal, da sonstnichts zu sehen ist?

Noch etwas anderes, gerade wollte ich ein Sketch schreiben wenn ich 
versuche beide Bibliotheken einzubinden, tritt beim kompilieren ein 
Fehler auf, wenn ich sie einzeln einbinde nicht.

#include <LiquidCrystal_I2C.h>
#include <TinyWireS.h>

am Speicher liegt es nicht, da beide nicht groß sind. Was kann man da 
machen?
Im Sketch stehen nur diese zwei Zeilen inkl. Setup und Loop ohne Inhalt

von Stefan F. (Gast)


Lesenswert?

Test schrieb:
> tritt beim kompilieren ein Fehler auf

Sollen wir die Fehlermeldung erraten?

von Joachim B. (jar)


Lesenswert?

Test schrieb:
> Da die Controller

selbst die Controller trotz kompatibel haben unterschiedliche Chips und 
Initroutinen KS0066 vs. HD44780
Beitrag "LCD (Ks0066) initialisieren"
1
http://www.peterfleury.epizy.com/avr-software.html

was alles so als SPAM gedacht wird!

von Test (Gast)


Lesenswert?

Folgender Fehler wird angezeigt.

libraries\Wire\USI_TWI_Slave\USI_TWI_Slave.c.o (symbol from plugin): In 
function `Flush_TWI_Buffers':

(.text+0x0): multiple definition of `__vector_13'

libraries\TinyWire-master\twi.cpp.o (symbol from plugin):(.text+0x0): 
first defined here

libraries\Wire\USI_TWI_Slave\USI_TWI_Slave.c.o (symbol from plugin): In 
function `Flush_TWI_Buffers':

(.text+0x0): multiple definition of `__vector_14'

libraries\TinyWire-master\twi.cpp.o (symbol from plugin):(.text+0x0): 
first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Fehler beim Kompilieren für das Board ATtiny25/45/85 (No bootloader).


mit TinyWireM kommt kein Kompilierungsfehler

von Johannes S. (Gast)


Lesenswert?

‚Es kann nur einen geben‘, dieses berühmte Zitat gilt auch hier.
Es wird versucht die ISR doppelt zu definieren, die ist IMO aber schon 
im Core drin. Oder beide Libs wollen die anlegen.

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Habe neue Controller bestellt die heute eingetroffen sind und es
> lag am Controller.

Schön das ich Recht hatte ;)

Was dein anderes Problem angeht.
Nimm die Tinywire raus, und die normale Wire rein. Die ist bei der IDE 
dabei.

Leg mal Testweise ein neues Projekt an, dann lade aus den Beispielen 
"Hello Word i2c". Ist zwar die Adafruit-Libs aber egal. Hauptsache 
läuft.

Das selbe Projekt läuft auch wenn du ERSATZWEISE die LiquidCrystal_I2C.h 
lädst(Include).

von Test (Gast)


Lesenswert?

Kann ich die Wire Bibliothek überhaupt auf den Attiny85 nutzen? Denke 
doch nicht, da sie ja deshalb umgeschrieben wurde von so einigen Leute.

von Test (Gast)


Lesenswert?

Habe es Mal ausprobiert. Wire rein , Läuft einmal gut, danach wird mir 
im Display immer mehr nach und nach nur Hieroglyphen angezeigt.

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> Habe es Mal ausprobiert. Wire rein , Läuft einmal gut, danach wird mir
> im Display immer mehr nach und nach nur Hieroglyphen angezeigt.

Lässt auf eine schlechte i2c Verbindung schließen.

Sende öfters man ein CLEAR Befehl, der reinigt die Anzeige.

von Test (Gast)


Lesenswert?

OK, Steckbrett ;) aber komisch dennoch. Mit TinyWire läuft es 
problemlos.
Danke für deine Tipps! Hast ne HP wo man Tipps und Anregungen findet?

von Stefan F. (Gast)


Lesenswert?

Test schrieb:
> Mit TinyWire läuft es problemlos.

Anstatt jetzt lange zu raten, woran es liegt, würde ich lieber mal mit 
einem Oszilloskop nachmessen. Ein Blick auf die Signal-Flanken reicht 
meist.

von Test (Gast)


Lesenswert?

Hehe, ja klar, muss es nur aus.meiner Schublade kramen ;)

von c-hater (Gast)


Lesenswert?

Test schrieb:
> Hehe, ja klar, muss es nur aus.meiner Schublade kramen ;)

Naja, wenn du da nix findest: Es gibt tatsächlich Leute, die haben so 
viele von den Dingern, dass de sich nicht anders zu helfen wissen, als 
sie zu verkaufen...

von Schlaumaier (Gast)


Lesenswert?

Test schrieb:
> OK, Steckbrett ;) aber komisch dennoch. Mit TinyWire läuft es
> problemlos.

Es kann sein, das die Libs ein Fehler hat, den Zeichensatz zu erkennen 
/Steuern. Aber grundsätzlich lassen Seltsame Zeichen auf 
Datenübertragungsfehler schließen.

ABER !!! Es gibt eine Ausnahme dieser Aussage.
Und zwar alles was "Deutsch" ist = "äöüÄÖÜß". Die werden fast immer auch 
bei perfekter Verbindung falsch angezeigt. Zeichen des norm-Acsii-Satz = 
32-127 Code sind i.d.R. kein Problem.

Um das richtig zu stellen, muss du dir die Zeichensatztabelle ansehen, 
und dann das Zeichen via CODE senden ans Display. Ist mir aber zu 
aufwendig. Deshalb suche ich Ersatzworte oder benutze Abkürzungen.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Test schrieb:
> Läuft einmal gut, danach wird mir
> im Display immer mehr nach und nach nur Hieroglyphen angezeigt.

Hi,
ist da eine Systematik zu erkennen, oder reiner Zufall.
Im oberen Teildes Bildes ist "reiner Zufall" durch falsche 
Initialisiierung schon gleich zu Beginn.
Im unteren Teil ist zwar richtig initialisiert worden,
"nur" falsch geswappt worden beim Vierbit-Modus.
Das Character ROM holt sich dann die gespiegelte Nibblefolge.
Und das sind dann die "Sonderzeichen", oder Zeichen aus dem japanischen 
Kana-Satz.


ciao
gustav

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

Hi,
nur, falls sich jemand an dem Wort "gespiegelt" stören sollte:
Highnibble- und Lownibblevertauschung ist gemeint.

ciao
gustav

von Spess53 (Gast)


Lesenswert?

Hi

>nur, falls sich jemand an dem Wort "gespiegelt" stören sollte:
>Highnibble- und Lownibblevertauschung ist gemeint.

Wie bekommst du dann das Display vernünftig initialisiert?

MfG Spess

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Spess53 schrieb:
> Wie bekommst du dann das Display vernünftig initialisiert?

Ist es ja nicht. Deswegen die Bilder.
bis zum Achtbitmodus läuft die Routine ja klaglos durch.
Dann sind die "schwarzen Balken" schon mal weg.
Und die restlichen Ausgaberoutinen haben dann den Dreher drin.
Ab da läuft es falsch.
Zitat ISBN:9783486587906

ciao
gustav

: Bearbeitet durch User
von noiasca (Gast)


Lesenswert?

Schlaumaier schrieb:
> Um das richtig zu stellen, muss du dir die Zeichensatztabelle ansehen,
> und dann das Zeichen via CODE senden ans Display.

Für den Support von UTF8 Zeichen könnte man eine library verwenden die 
UTF8 Zeichen in den jeweiligen Zeichensatz konviertieren kann:
https://werner.rothschopf.net/202009_arduino_liquid_crystal_intro.htm

für HD44780, ST7070, SPLC780D1 003A, SPLC780D1 003A, SPLC780D1 002, 
AIP31068L Treiber ICs - und bald auch für die Zeichensätze im OLED 
LEC1621.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.