Register schreiben auf LCD 2004A Display am ESP8266 mit I2C

Ich habe ein LCD 2004A Display am ESP8266, das mit <LiquidCrystal_I2C.h> angesteuert wird. Ich möchte die Helligkeit des Displays softwaremäßig streuern.
Der Befehl: lcd.setBacklight(i); funktioniert aber nicht.
Im datasheet sind aber die einzelnen Register aufgeführt:

Wie kann ich das Register für die Helligkeit beschreiben? I2C-Adresse ist: 0x27

Bitte verwenden Sie in den englischen Bereichen des Forums die englische Sprache. Ihr Thema wurde in den deutschen Bereich des Forums verschoben.

Schau mal hier: [solved] lcd i2c backlight - #6 by 6v6gt

der PCF8574 auf einem LCD Backpack und die LiquidCrystal_I2C.h können das Backlight nur ein- oder ausschalten. Und zwar mit lcd.backlight() bzw. lcd.noBacklight()

Ein Dimmen geht mit dieser Kombination nicht (ohne weiteren Hardware-Hack).

Die Tabelle passt also nicht zu dem was du willst.
Wenn das Display direkt eine I2C Schnittstelle hat und du keinen PCF8574 verwendest, dann wird die Library nicht passen (z.B. bei einem BC2004AIBNHEH$ mit I2C/SPI/Serieller Schnittstelle).

Ist also besser, du postest welches Display du genau hast - evtl. den Verkaufslink, ein echtes Bild und das RICHTIGE Datasheet.

Die Library funktioniert prima. Zeichen werden dargestellt und das Backlight kann man ein- und ausschalten.
Ich war mir ja nicht bewusst, dass es da verschiedene Ausführungen gibt. Ich habs einfach bei Eb.y gekauft. Hier sind die Bilder:


Jedenfalls sehen die "LCD2004A" Displays alle sehr gleich aus. Controller ist immer der HD44780. Die Versionsnummer ist immer V1.3 Auf den zugehörigen I2C-Adaptern sitzt auch immer der PCF8574. Ich kann da weder bei der Bestückung noch bei der Leiterbahnführung Unterschiede erkennen.
Das datasheet trägt auch die Bezeichnung LCD2004A. Allerdings habe ich inzwischen auch abweichende Beschreibungen gefunden. Das zitierte datasheet ist tatsächlich für einen BC2004AIBNHEH$ VER.02.
Wie bekomme ich denn nun heraus was ich hier für ein Modell erwischt habe? Auf der Leiterbahnseite unten rechts steht noch: 2022/11/25A. Daneben sind 2 Leiterbahn-Jumper die man durch Löten kurzschließen kann. Es gibt auch 4 Anschüsse, die mit SCL, SDA, VCC und GND beschriftet sind. Offenbar braucht man da gar keinen I2C-Adapter - oder?

Nur, wenn die Displayplatine komplett bestückt wäre.
Aber der I2C-Wandler inkl. ein paar Bauteile fehlt da drauf.

Und noch eine Info am Rande:
Wenn du deinen ESP8266 noch etwas länger nutzen möchtest, solltest du zwingend einen Levelshifter im I2C-Bus zwischen dem ESP und dem Display schalten. Dein Display-Adapter liefert 5 Volt auf den I2C-Datenpins an den ESP und das verträgt der nicht auf Dauer.

Oooops... Vielen Dank für den Hinweis!

Nein.
zuerst mal gibt es den HD44780 in verschiedenen Ausführungen ( mit verschiedenen Zeichensätzen Buchstaben über 128, UA00 Japanischen Zeichensatz; UA02 Europäischen Zeichensatz, UBxx Custom Zeichensatz.
Dann gibt es noch weitere Controller anderer Hersteller zB Sunplus SPLC780A1, Sitronix ST7066, Epson SED1278 oder Samsung KS0066 die kompatibel sind.
Was genau auf Deiner Platine montiert ist kann ich Dir nicht sagen da das Chip der Controller und der zusätzlichen Treibern direkt auf die Platine geklebt ist, mit feine Drähten verbunden sind ( gebondet) und mit der schwarzen Vergußmasse (schwarzer Klecks) .

Keiner der genannten Controller hat I2C.
Grüße Uwe

Okay und danke!
Die Displayhelligkeit ist aber so hell, dass sie nachts das gesamte Wohnzimmer ausleuchtet. Wen man die also softwareseitig nicht regeln kann (außer ausschalten) dann vielleicht hardwaremäßig? Ich habe gelesen, man könnte einen Transistor an Pin A des Displays anschließen, der von einem PWR-Pin des ESP8266 angesteuert wird.
Im Versuchsaufbau habe ich einen 2N2222 wie folgt verbaut:
Kollektor am Anoden-Pin (A) der Hintergrundbeleuchtung des LCDs.
Emitter an Masse (GND).
Basis: Verbunden mit GPIO0 (D3) dem PWM-Pin des ESP8266 über einen 1 kΩ Widerstand.
Den PWR-Pin steuere ich mit 0 - 255. Das funktioniert so etwa... Das Display lässt sich regeln, aber nur ca. bis zur Hälfte der Helligkeit. Wenn ich Emitter und Kollektor kurz schließe leuchtet es natürlich in alter Helligkeit. Braucht es da vlt. noch einen zusätzlichen pullup-Widerstand an der Basis o.ä.?
Vielleicht sollte man den Transistor auch woanders einbauen, z.B. Statt des Jumpers für die Background-Beleuchtung?
Hat das schon mal jemend realisiert?

a)
Reichts eventuell wenn du dee PCF und LCD mit 3.3 V Versorgst statt mit 5V?

b)
ich habs nur mal Testweise mit einem Arduino PWM Pin über die Schaltung am PCF8574 Adapter gemacht.

Siehe hier: Adjusting the light intensity with lcd.backlight () function - Other Hardware / Displays - Arduino Forum

Ausgang vom Arduino ging dann an den "oberen" Pin wo aktuell der Jumper gesetzt ist.
Mit einem ESP hab ich es nicht getestet.

Du meinst die Anode der Hintergrundbeleuchtung?

Nein, ist falsch.

Schau Dir mal das Schaltbild des Adapters an:


Hoffe es ist halbwegs das richtige;
Habs von hier:

Am einfachsten wäre Du unterbrichst die Verbindung zwischen dem Basiswiderstand des S8050 Transistor und dem Ausgang P3 des PCF8574 und gibst auf den Basiswiderstand das PWM-Signals .

Alternativ den Jumper abziehen und einen NPN Transistor oder N-MOSFET zwischen Pin 2 des Jumpers und Masse schalten (Emitter bzw Source auf Masse) und den Transistor mit PWM ansteuern (bei NPN braucht es einen Basiswiderstand)

Grüße Uwe

Nein, Schade! bei meinem Adapter geht ein Pin vom Jumper nach A, nicht nach K. :smiling_face_with_tear:

Dann hast du noch eine Adapterplatiene, bei der die Helligkeit nicht steuerbar ist. Da habe ich auch welche von. Du kannst statt des Jumper mal Widerstände probieren. Da wird die Hintergrundbeleuchtung zumindest dunkel. Und wenn der Jumper die Plusspannung an die Hintergrundbeleuchtung legt, brauchst du einen PNP Transistor um die Helligkeit per Software zu steuern.

Ich hab mal gemessen: K geht direkt an den Transistor.
Ein Anschluss des Transistors geht an VCC.
Da würde dieser Schaltplan vlt besser passen:


(kommt von github)

Vielen Dank!
Das mit den Widerständen hatte ich auch schon mal ausprobiert. Vielleicht die einfachste Möglichkeit. Mein Widerstandssortiment ist allerdings begrenzt...

Das stimmt nicht zusammen.
Die Kathode muß über den Transistor auf Masse geschaltet werden, nicht auf +5V.

Dieses Schaltbild hab ich auch mehrfach gefunden.

In diesem Schaltbild fehlt der Basiswiderstand, der bei NPN/PNP Transistoren unbedingt notwendig ist. Darum glaube ich ist das Schaltbild entweder falsch weil der Basiswiderstand fehlt oder der Transistor ist ein N-MOSFET.

Grüße Uwe

Okay - war ein Versuch...
Aber devinitiv: K geht direkt an den Transistor.
Ein Anschluss des Transistors geht an VCC.
Ich habe mal den Vorschlag:

Am einfachsten wäre Du unterbrichst die Verbindung zwischen dem Basiswiderstand des S8050 Transistor und dem Ausgang P3 des PCF8574 und gibst auf den Basiswiderstand das PWM-Signals .

ausprobiert. Habe den SMD-Vorwiderstand entfernt und die Basis des J3Y (S8050 NPN) über einen 4.7K (gleicher Wert) an den PWM-Pin gelegt. Das Display war konstant maximal hell, egal welcher Wert auf den PWM-Pin geschrieben wird.

Kannst du denn auch sagen, an welche Anschlüsse des Transistors die Leiterbahnen gehen ?
Wenn einer davon auf VCC geht, dann sieht das eher nach PNP aus, oder der ist einfach falsch angeschlossen. Und das mit K auf den Transistor sieht mir dann auch falsch aus.

Daher mein Tipp:
Baue eine eigene Schaltung mit Transistor auf und schließe den an einen Pin der Jumperbrücke an. Jumper entfernen.

Und wenn deine Schaltung von oben stimmt, gibt es keinen Vorwiderstand, sondern einen Pullup. Und die Basis liegt weiterhin am PCF8574.

Ich habe mich jetzt nicht an den Schaltplänen orientiert. Ich kann die Leiterbahn vom P3 (BL)-Pin zum Widerstand (4.7K) und zur Basis vom J3Y durch verfolgen.
Seltsam ist, dass keine Reaktion des Display erfolgt, wenn ich das PWM-Signal an die Basis des J3Y lege. Da stimmt wahrscheinlich was mit dem Vorwiderstand nicht. Was wäre, wenn der Vorwiderstand auf 5V ausgelegt ist und der ESP8266 maximal 3.3V liefert?

Und genau das ist falsch.
Man sollte sich schon nach den Schaltplänen richten. Alles andere ist "stochern im Nebel".
Und wir wissen nicht was du machst.

Nee, das ist nicht seltsam sondern rumwurschteln ohne System.
Warum das vermutlich so ist, habe ich dir in Post # 19 geschrieben.
Und nochmal, das ist kein Vorwiderstand und du hast geschrieben, das du ihn entfernt hast.

Nachtrag:
Du hast einen solchen Transistor auf der Adapterplatine.
An welche Pins geht da was ran. Bitte mal genau beschreiben. Das was du in Post #18 geschrieben hast, ist unverständlich, bzw. kann nicht stimmen.
Und was genau steht auf dem Transistor.
Evtl. mal so fotografieren, dass man es lesen kann.