LCD an IIC ohne Funktion

'nabend :slight_smile:

ich hab eine LCD bekommen "LMK84RA19C2E", nach Recherchen im www habe ich das Datenblatt gefunden und auch das der Controller 44780 kompatibel ist. Nun habe ich ein I²C-LCD-Board hergenommen, den Beispielscetch aus der IDE auf I²C umgeschrieben und hochgeladen, alles ohne Probleme aber die LCD zeigt meist nix an oder blinkenden Cursor, der zusehends blasser wird und dann irgendein Zeichen aus dem Zeichensatz anzeigt. Das "Hello world..." ist nichtmal im Ansatz zu sehen.

Hier der Scetch:

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

LiquidCrystal_I2C lcd(0x27, 16, 2); //Adresse, Zeichen und Zeilen

void setup() {

Wire.begin();
lcd.begin(16, 2);
lcd.print("Hello world!");

}

Daß die LCD bis zur Ausmusterung funktionierte, habe ich also selbst noch sehen können, da wurde sie allerdings von einem HC12 angesteuert. Die Adresse 0x27 habe ich mir mit dem I²C-Scanner vom Arduino geholt.
Wo könnte der Fehler liegen?

Hallo, der Klassiker sind fehlende PullUp-Widerstände für den I2C-Bus. Wie sieht es damit aus?

Es gibt verschiedene I2C LCD Libs die anscheinend nicht alle mit allen Displays gehen.

https://arduino-info.wikispaces.com/LCD-Blue-I2C
http://www.dfrobot.com/image/data/DFR0154/LiquidCrystal_I2Cv1-1.rar

Der Fehler ist aber seltsam. Normalerweise scheitert es schon an der Initialisierung.

Ist die Library aktuell?

Ok, da war Serenifly schneller.

Danke Euch für die schnellen Antworten! @agmue, genau, der Klassiker...die Pullups fehlen :confused:
daran habe ich gar nicht gedacht. Und @Serenifly...in dem einen Link steht ein guter Ansatz, die Festlegung, welche Pins zugeordnet werden sollen, das werde ich auch mal probieren aber ich kenne von meinem Job her einen Kollegen, der sich damit beschäftigt, der hat diese Einstellung nie vorgenommen. Nun gut, heute ist schon spät, da mache ich eh nix mehr.
Danke nochmal und Grüße

Steffen

P.S. die Library sollte aktuell sein, stammt aus der letzten IDE 1.6.5

Input_de:
Hier der Scetch:
...
LiquidCrystal_I2C lcd(0x27, 16, 2); //Adresse, Zeichen und Zeilen
...

Muss man nicht noch angeben, an welchen Pins die Datenleitungen des Displays angeschlossen sind? Guck Dir mal das „Hello World“-Beispiel zur LiquidCrystal-Bibliothek an.

Fehlende Pull-ups waren erst kürzlich der Grund, warum ich nachts um drei bei einer Zigarette auf dem Balkon saß und dachte, dass ich wahrscheinlich der erste bin, der die in diesem Zusammenhang benutzte Bibliothek benutzt. Und ICH bin der Erste, der entdeckt, dass die Bibliothek einen Fehler hat! Eigentlich hätte ich dafür ins Fernsehen gehört.

Puh ...

Gregor

Input_de:
aber ich kenne von meinem Job her einen Kollegen, der sich damit beschäftigt, der hat diese Einstellung nie vorgenommen.

gregorss:
Muss man nicht noch angeben, an welchen Pins die Datenleitungen des Displays angeschlossen sind?

Das hängt von der Lib ab. Bei der verwendeten Library und bei der aus dem zweiten Link von mir braucht man das nicht.

Hi,

also, beidem I²C-board muß man das nicht angeben, abgesehen davon sind die Ausgänge entsprechend bedruckt, also schon vorgegeben...ich hab versucht, die Zeile mit den PIN-Eingaben zu nutzen, es gab immer eine Fehlermeldung beim Compilieren.
Was soll ich sagen? Die Pullups waren es tatsächlich!!! 2x2k eingelötet und schon ging es...übrigens kann man ja im Arduino schon Pullups programmieren :wink: Mir ist das eben nicht weiter aufgefallen, da eine DS3231RTC, sowie ein Feuchte und ein Drucksensor ohne Probleme auch ohne diese auskamen und die Kabellängen unter 10cm liegen...eine Fehleinschätzung meinerseits. :slight_smile:
Nun, da dieses Problem geklärt wurde, hier noch eine Frage: Kann ich prinzipiell alle LCD's mit so einem Board über I²C ansteuern, sofern es für den verwendeten LCD-Controller eine Library gibt oder braucht es, wie hier, eine für I²C vorbereitete LIB?
Ich würde nämlich gern auch noch andere LCD's und VFD's über diese Boards betreiben, es gab sie bei eBay für 1€ incl. Versand, da hab ich mir gleich fünf geholt :wink:

Danke für Eure Antworten
Gruß Steffen

Input_de:
also, beidem I²C-board muß man das nicht angeben, abgesehen davon sind die Ausgänge entsprechend bedruckt, also schon vorgegeben...ich hab versucht, die Zeile mit den PIN-Eingaben zu nutzen, es gab immer eine Fehlermeldung beim Compilieren.

Das ist natürlich von der Library abhängig. Du kannst nicht Code programmieren der von der Lib nicht unterstützt wird.

übrigens kann man ja im Arduino schon Pullups programmieren

Die sind aber sehr hochohmig. I2C braucht eher relativ niedrige Pullups. Wobei die auch abnehmen je mehr Module du parallel schaltest (da die Module i.d.R. Pullups integriert haben). Was aber wegen der zunehmenden Kapazität wiederum nicht unbedingt schlecht ist.

Input_de:
Nun, da dieses Problem geklärt wurde, hier noch eine Frage: Kann ich prinzipiell alle LCD's mit so einem Board über I²C ansteuern, sofern es für den verwendeten LCD-Controller eine Library gibt oder braucht es, wie hier, eine für I²C vorbereitete LIB?

Ein großer Teil kann mit den i2c-Adaptern zum Laufen gebracht werden. Aber es ist vorab schwierig zu sagen, welches LCD damit läuft. Wenn die selben Controller (HD44780) auf dem LCD sind wird es funktionieren. Ich habe einig ältere LCD schon damit zum Laufen gebracht, aber das ist wirklich ein Ausprobieren. Grafik-LCDs laufen nicht damit.

übrigens kann man ja im Arduino schon Pullups programmieren

Diese Pullups sind wie Serenifly schon schreibt, nicht geeignet, außerdem werden diese nur bei Eingängen im Arduino aktiv, nicht bei I2C.

Nun, für die Pullup's fand ich Werte zwischen 1,8k und 100k...wer keine schnelle Kommunikation braucht, kann ihn höher wählen. Da war aber noch was mit diesen 3mA aus der Festlegeung von Philips für ihren Bus. Insgesamt sind die Werte aber nicht hochkritisch, solange man die Leitungslängen bzw. dern Kapazität im Auge behält. Da habe ich allerdings erfolgreich schon entsprechende Leitungstreiber eingesetzt, der Typ fällt mir grad nicht ein, muß nochmal schauen, aber damit sind locker 2,5m Leitungslänge und mehr drin.

Mir ist schon klar, daß ich Code nicht programmieren kann, der in der Lib nicht drin ist. Aber wie ist das mit dem I²C...eigentlich fasse ich die Daten und Instruktionen, die ich sonst parallel sende, auf den seriellen Bus zusammen und "entpacke" sie wieder mit dem Expander(nichts Anderes ist ja dieses Board) an die entsprechenden Pins der LCD.

Da habe ich allerdings erfolgreich schon entsprechende Leitungstreiber eingesetzt, der Typ fällt mir grad nicht ein, muß nochmal schauen, aber damit sind locker 2,5m Leitungslänge und mehr drin.

Das sind evtl. die P82B715, da gehen locker 30 m und mehr. In Versuchen hat man schon 150 M. geschafft. Aber leider lassen sich nicht alle davon begeistern. :wink: :wink:

HotSystems:
Ein großer Teil kann mit den i2c-Adaptern zum Laufen gebracht werden. Aber es ist vorab schwierig zu sagen, welches LCD damit läuft. Wenn die selben Controller (HD44780) auf dem LCD sind wird es funktionieren. Ich habe einig ältere LCD schon damit zum Laufen gebracht, aber das ist wirklich ein Ausprobieren. Grafik-LCDs laufen nicht damit.

Kommt auf das Grafik-LCD an...ich hab eins, dafür existieren auch einige Lib's...parallel bekomme ich das zum Laufen nur I²C will nicht. Alle LCD's und VFD's, für deren Controller eine Lib existiert, habe ich bis jetzt parallel zum Laufen bekommen...nur mit dem I²C nicht, da gibts dann immer Probleme mit dem Compilieren, weil irgendwas fehlt oder nicht korrekt ist.

HotSystems:
Das sind evtl. die P82B715, da gehen locker 30 m und mehr. In Versuchen hat man schon 150 M. geschafft. Aber leider lassen sich nicht alle davon begeistern. :wink: :wink:

Richtig :), die sind das...sind schon genial :slight_smile:

Input_de:
Kommt auf das Grafik-LCD an...ich hab eins, dafür existieren auch einige Lib's...parallel bekomme ich das zum Laufen nur I²C will nicht. Alle LCD's und VFD's, für deren Controller eine Lib existiert, habe ich bis jetzt parallel zum Laufen bekommen...nur mit dem I²C nicht, da gibts dann immer Probleme mit dem Compilieren, weil irgendwas fehlt oder nicht korrekt ist.

Da fehlt dann die so wichtige i2c-lib.

Input_de:
Mir ist das eben nicht weiter aufgefallen, da eine DS3231RTC, sowie ein Feuchte und ein Drucksensor ohne Probleme auch ohne diese auskamen und die Kabellängen unter 10cm liegen...eine Fehleinschätzung meinerseits. :slight_smile:

Noch eine Anmerkung zu den Pullups: Manche I2C-Boards haben schon Pullup-Widerstände eingebaut, da braucht man keine zusätzlichen, weshalb man das "Fehlen" nicht bemerkt. Der Arduino Mega2560 hat beispielsweise je 10k, auch DS3231RTC könnte Pullups haben.

HotSystems:
Da fehlt dann die so wichtige i2c-lib.

Was kann man da tun? Eine Bibliothek schreiben kann ich nicht und worin genau besteht da der Unterschied?

agmue:
Noch eine Anmerkung zu den Pullups: Manche I2C-Boards haben schon Pullup-Widerstände eingebaut, da braucht man keine zusätzlichen, weshalb man das "Fehlen" nicht bemerkt. Der Arduino Mega2560 hat beispielsweise je 10k, auch DS3231RTC könnte Pullups haben.

Ja aber mit dem Mega2560 lief es gerade nicht ;), erst nach dem nachträglich einlöten von 2x2k auf einem Protoshield.

Input_de:
Ja aber mit dem Mega2560 lief es gerade nicht ;), erst nach dem nachträglich einlöten von 2x2k auf einem Protoshield.

Entweder hat der Chinese die eingespart oder die 10k sind zu groß. Gut zu wissen!

Input_de:
Was kann man da tun? Eine Bibliothek schreiben kann ich nicht und worin genau besteht da der Unterschied?

Der Unterschied ist die Auslegung der Steuerpins. Die Lib sollte immer vom Hersteller der Hardware kommen. Dann kann man fast sicher sein, dass es funktioniert.