LCD 16x2 mit I2C

Gibt es eine Bibliothek, mit der man das Standard LCD (16x2) mit I2C an Pin C18 (SDA) und Pin 19 (SCL) und der Adresse 0x27 ansteuern kann?

1 „Gefällt mir“

Ich arbeite gerade daran. Aber sage mir bitte, in welcher Dokumentation du die Adresse 0x27 gefunden hat? Die LCD 16x2 Module haben die Adresse 0x3E.

Ich habe allerdings ein ‚Grove-LCD RGB Backlight V4.0‘. Das zeigt keinen Text an. Mit der 0x27 auch nicht. Dort bekomme ich nur das Hintergrundlicht an.

Die Version ‚Grove-LCD RGB Backlight V5.0‘ funktioniert auch mit 0x3E. Genau wie alle Module ohne RGB.

Zusammengefasst bedeutet das, für die Anzeige von Text haben alle die 0x3E.

2 „Gefällt mir“

Es handelt sich dabei um die Standard LCD Module (1602) mit I2C Ansteuerung ohne Grove Anschluss.
Auszug aus dem Datenblatt:
Note that most piggy-back modules are centered around PCF8574T (SO16 package of PCF8574 in DIP16 package) with a default slave address of 0x27
I2C Address
PCF8574: 39 = 0x27

1 „Gefällt mir“

Ich habe hier mein Projekt bereit gestellt:

Es ist für Calliope 2.x eingestellt.

Du kannst in den Blöcken verschiedene i2c Adressen auswählen und im Code auch noch welche in die enum eADDR_LCD eintragen. Den Code findest du in der JavaScript Ansicht, links Explorer aufklappen und dann ist die Datei lcd16x2rgb.ts von mir. Die kann jeder bearbeiten.

Wenn du LCD Module findest, die mit anderen Adressen funktionieren, teile mir das bitte mit. Hilfreich wären dazu Links z.B. zu Datenblättern oder wo man die Module bestellen kann.

Mich würde auch noch eins mit mehr als 2 Zeilen interessieren.

FG Lutz

2 „Gefällt mir“

Hallo Lutz,

ich gehe davon aus, dass das Grove LCD1602 die i2c-Adresse 0x3E (dezimal 62) hat. So steht es jedenfalls in allen Beschreibungen und so funktioniert das Grove LCD1602 bei mir auch. Weiter steht in den Beschreibungen, dass das „LCD1602-RGB v5“ für die Text-Übermittlung ebenfalls die i2c-Adresse 0x3E verwendet und für die RGB-Ansteuerung die i2c-Adresse 0x30. Die aktuellen Grove Displays LCD1602 brauchen erfreulicherweise nur 3,3 V, sowohl die Display ohne RGB wie auch das Display v5 mit RGB.

Hast du bei deinen Forschungen für deine MakeCode-Erweiterung herausfinden können, ob man die i2c-Adresse beim Grove LCD1602 ändern kann? Wenn man die i2c-Adresse nicht ändern kann, kann jedes Experiment mit dem Calliope nur eines dieser Grove Displays enthalten.
https://wiki.seeedstudio.com/Grove-LCD_RGB_Backlight/

Beim „SparkFun 16x2 SerLCD - RGB Text (Qwiic)“ lassen sich softwaremäßig wohl mehrere i2c-Adressen einstellen. Bisher habe ich aber kein solches und kann nur von den Beschreibungen ausgehen. Die Displays von Sparkfun sind allerdings wesentlich teurer.
https://learn.sparkfun.com/tutorials/avr-based-serial-enabled-lcds-hookup-guide

Ein weiteres Display ist das „Waveshare LCD1602 RGB Module“, das ebenfalls mit 3,3 V auskommt. Für dieses Display habe ich allerdings keine MakeCode-Extension gefunden.
https://www.waveshare.com/wiki/LCD1602_RGB_Module

Ich habe mir auch die i2c-Adapter-Platine angeschaut, mit der man ein Display ohne i2c an den i2c-Bus anpassen kann. Man muss die Adapterplatine unter das Display löten. Bei dieser Adapterplatine ist aber alles anders als bei Grove und deine MakeCode-Extension wird nicht funktionieren. Außerdem braucht die Adapterplatine zusammen mit dem Display 5V.
https://www.makershop.de/download/I2C-LCD-interface.pdf

Ralf

1 „Gefällt mir“

Hallo Lutz,
du kannst einen iic Multiplexer verwenden, damit kannst du mehrere Geräte mit gleicher iic-Adresse betreiben. Habe ich allerdings selbst noch nicht gemacht.
z.B. hier

2 „Gefällt mir“

Hallo Michael,
danke für diese Multiplexer-Idee!

Bei Seeed habe ich gesehen, dass es dort einen „Grove - 8 Channel I2C Multiplexer/I2C Hub (TCA9548A)“ gibt. Damit lassen sich alle elektrischen Verbindungen sehr einfach im Grove-System zusammenstecken. Bei den programmtechnischen Strukturen bezweifle ich allerdings, dass man mit MakeCode eine einfache Lösung für die Schule finden kann.
https://wiki.seeedstudio.com/Grove-8-Channel-I2C-Multiplexer-I2C-Hub-TCA9548A/

Ein LCD-Display mit zwei oder mehr einstellbaren i2c-Adressen wäre deswegen eine schicke Sache für die Schule. Laut Beschreibung findet man genau diese Funktionalität bei den SerLCD-Displays mit RGB von Sparkfun. Die i2c-Adresse (standard 0x72, dezimal 114) kann mit dem Firmware-Befehl 0x19 (dezimal 25) auf einen beliebigen Wert zwischen 0 und 255 gesetzt werden. Ich stelle mir vor, dass man die LCD-Displays einmal händisch auf die verschiedenen i2c-Adressen programmiert und mit Aufklebern markiert. Für die Verbindung mit dem Grove-System gibt es ein entsprechendes Adapterkabel von Qwiic auf Grove.
https://learn.sparkfun.com/tutorials/avr-based-serial-enabled-lcds-hookup-guide/firmware-overview

Die Ansteuerung ist aus meiner Sicht mit der MakeCode-Erweiterung für das LCD2004 von Lutz möglich, da die Befehle bei Sparkfun für die SerLCD1602 und das SerLCD2004 identisch zu sein scheinen.
https://github.com/calliope-net/lcd-20x4

Beste Grüße
Ralf

1 „Gefällt mir“

Hallo Ralf,

warum willst du mehrere Displays an einen Calliope anschließen? Für mehr Text gibt es doch Displays mit mehr Zeichen z.B. LCD 20x4 oder OLED.

Lange her, dass ich mich damit beschäftigt habe. Es gibt zwei Erweiterungen:
calliope-net/lcd-16x2 für Grove
calliope-net/lcd-20x4 für sparkfun Qwiic
Die letzte habe ich auch mit Qwiic 16x2 getestet und hat funktioniert. Ich habe die 20x4 Blöcke aber nicht an 16x2 angepasst.

Was damals funktioniert hat und was nicht, steht hier:
lcd-16x2 | Calliope i2c Erweiterung für ‘Grove - 16x2 LCD’ und ‘Grove - LCD RGB Backlight V5.0’.

Die Dokumentation der Grove Module war lückenhaft und bei der Bestellung des RGB Moduls weiß man nicht, ob man v4 v5 oder sonst was bekommt. Und die funktionieren ja unterschiedlich oder v4 gar nicht.

Jedenfalls kannst du in die aktuellen Erweiterungen jede beliebige I²C Adresse beim Start rein schreiben und selber testen.

Später habe ich auch den I²C Scan gemacht, der sucht den Calliope Bus nach I²C Adressen ab.
calliope-net/i2c: Calliope Blöcke zur Programmierung beliebiger i2c Module ohne JavaScript. Typ ‚Buffer‘ mit Blöcken verwenden.

Da geht das Problem aber schon los. Das Grove LCD 16x2 Modul ist das einzige (von fast 20 von mir getesteten Modulen), welches sich am I²C Bus anders verhält. Schon der Scan hängt sich bei dem Modul auf. Ich glaube ich habe einen Workaround programmiert.

Das Grove 16x2 mit RGB Backlight Modul v5 habe ich inzwischen aufgegeben. Das Licht flackert nur und sieht auch überhaupt nicht schön aus. Die Displays ohne RGB mit den 3 Farbkombinationen funktionieren unter Umständen, wenn man kein weiteres I²C Modul anschließt. Mit zusätzlich Motor und Wattmeter oder Tastatur oder Speicherkarte ist das Display die Ursache, dass sich der I²C Bus aufhängt.

Als ein Problem habe ich erkannt, dass die Spannung von 3.3V natürlich nie erreicht wird. Die Module, die eigentlich für 5V sind und bei 3.3V noch funktionieren sollen, funktionieren natürlich nicht bei 3.0V oder 2.7V was die Realität ist. Beim Calliope v3 habe ich gemessen, dass am Grove Anschluss mit der selben Batterie weniger raus kommt als bei den älteren Typen.

Die Grove LCD 16x2 Module kann ich alle nicht empfehlen.

Bei sparkfun Qwiic ist der Unterschied, dass es ausschließlich 3.3V Logik gibt. Die sind wahrscheinlich toleranter bei Unterspannung. Allerdings habe ich davon nur je ein 20x4 und 16x2 und nicht lange getestet. Auch dort habe ich mich entschieden, das RGB Hintergrundlicht aus geschaltet zu lassen, weil das schrecklich aussieht. Ich glaube man kann dort den Kontrast vom schwarz einstellen.

I²C Adressen ändern habe ich bisher nur bei Modulen mit kratzen auf der Leiterplatte gemacht (Qwiic GPIO und Motor).
Software geänderte I²C Adressen funktionieren oft nicht wie erwartet. Beim Qwiic Relay ist beim anschalten immer die Original Adresse aktiv und ändert sich erst später. Inzwischen hat es den Bus blockiert. Beim Qwiic Ultraschallsensor wird die geänderte Adresse beim Ausschalten vergessen.

Einen Qwiic Multiplexer habe ich hier liegen, aber noch nichts damit gemacht. Es war einfach nicht nötig.

Bei den aktuellen fischertechnik Robotern, die ich mit der Leiterplatte fernsteuere, brauche ich kein Display mehr. Ich nutze die 25 roten LED und zeige damit jeden Status an. Und nun gibt es ja 3 RGB Leds on board. 2 Motoren und Servo werden direkt angeschlossen und an I²C benutze ich nur den Qwiic Ultraschallsensor.

2 „Gefällt mir“

Hallo Lutz,
danke für die umfangreiche Antwort auf meine Frage zu den LCD-Displays mit i2c-Anschluss.

Natürlich reicht für die meisten konkreten Anwendungen ein einzelnes Display. Für Lernaufgaben finde ich die Displays interessant, weil Lernende dort schnell erkennen können, ob ihre Programmierung Texte richtig zusammensetzt und ordentlich platziert. Mit zwei Displays lässt sich feststellen, ob die entwickelten Programmroutinen tatsächlich die beiden Displays unabhängig von einander ansteuern.

Bisher fand ich das einfache Grove LCD-Display 16x2 ohne RGB ganz brauchbar. Natürlich ist es ärgerlich, wenn in einem umfangreichen Experiment nicht alle Komponenten am i2c-Bus ordentlich bedient werden, wo doch dieser i2c-Bus gerade für eine zuverlässige Kommunikation sorgen soll.

Beste Grüße
Ralf

1 „Gefällt mir“