Bastelei: ein LCD Adapter für lange Leitungen (keine Frage, nur Bilder + Text)

Kurz:
Ich habe mal was gebastelt.

Ein LCD Adapter Board für die serielle Schnittstelle.
Es soll die herkömmlichen I2C PCF8574 Adapter Boards ersetzen um eine abgesetzte Montage des LCDs zu ermöglichen ohne an die Grenzen von Kabellängen zu kommen. Dazu wird statt I2C ein RS485 Bus verwendet. Hier gibts mal aktuell ein paar Bilder als Teaser, später dann auch den Schaltplan, Bauanleitung, Sketche und Libraries.

Lang:
Die üblichen I2C LCD Adapter Boards arbeiten mit einem PCF8574.

Da I2C nicht für lange Kabelwege konzipiert wurde, habe ich mich entschieden die Kommunikation mit dem Display über eine Serielle Schnittstelle zu senden. Ausschlaggebend für RS485 - waren folgende Gründe:

  • Es ermöglicht noch längere Leitungen als RS232
  • Es ist ein Bus für mehrere Teilnehmer, man kann daher auch mehrere Displays am gleichen Bus betreiben.
  • Mit MODBUS steht ein spezifiziertes Protokoll zur Verfügung und ermöglicht so die Integration eines LC Displays in einen bestehnden Bus.

Wenn man sich ansieht wie so ein I2C Adapter angewandt wird schaut das ca so aus:

Ein MAX485 kann natürlich noch kein LCD ansteuern, daher verwende ich auf der Empfängerseite nicht nur einen MAX485 sondern auch einen Arduino Nano der direkt mit dem LCD verbunden ist und im 4bit Modus das LCD ansteuert.

Vorstellen muss man sich das gesamte System wie folgt: Links der "Sender" rechts der
Empfänger:
Zu den Farben:
blau ist der Usersketch
türkis sind Libraries
grün ist Hardware

Für den Anwender tritt die Low-Level Kommunikation über RS485 in den Hintergrund.
Im Usersketch verwendet man weiterhin die Funktionen aus der offiziellen LCD API 1.0. Beispielsweise wird mit

lcd.print(F(„Hello World“)); 

der Text über die serielle Schnittstelle gesandt oder

lcd.clear();

löscht den Displayinhalt.

Hardware: Überlegungen zur Platine
Die Platine hat die gleiche Größe wie ein LCD 1602 und kann das LCD direct aufnehmen.
Auf der Platine sind 5 Taster ähnlich auf einem LCD Keypad Shield.
Freie Arduino Pins sind auf Header herausgeführt. Für einige habe ich Pullup bzw. Pulldown Widerstände vorgesehen. Z.B. könnte man damit einen DS18B20 verbauen oder einen I2C Sensor anschließen. Der MAX485 kann entweder auf 0/1 (HW Serial) oder 2/3 (Soft-Serial) gejumpert werden. Ja und offensicht: da ich nicht mehr der Jüngste bin und eh nie der wirkliche Löter war, alles in THT. PCB produziert von JLCPCB geliefert in gerade mal 11 Tagen.

Das ganze wird knapp 3cm dick:

Schaltplan ist ein Mix aus dem LCD Keypad Shield, einem I2C Adapter board und meinem SPI Adapter...

Software
Softwareseitig werde ich zwei Protokolle zeigen:
a) Von Sureeno gibt es ein „Serial LCD“ (TTL-Seriell). Für dieses Serielle LCD habe ich vor einiger Zeit bereits einen „Sender“ geschrieben, daher lag es nahe, auch einen entsprechenden „Empfänger“ zu schreiben. Das Protokoll ist gut beschrieben, hat zwar etwas Overhead, aber ein I2C LCD ist ja auch nicht besonders schnell.
Beispielsketche für Sender und Empfänger sind in meiner LCD Library
https://werner.rothschopf.net/202003_arduino_liquid_crystal_umlaute.htm

b) Implementierung mit MODBUS. Dazu verwende ich auf der Sender Seite (auch Master oder Client genannt) die Modbus Master von DocWalker und auf der Empfänger Seite (auch Slave oder Server genannt) Seite meine Noiasca Modbus Server Simple.

Im Schaubild für Modbus kommt einfach eine weitere Schicht - für das Protokoll hinzu:

Aktueller Entwicklungsstand (bzw. Todos)

  • Hardwareseitig muss ich noch mal die Widerstandswerte verbessern. Ich wollte zum LCD Keypad-Shield "kompatibel" sein. Da habe ich a) noch ein paar Abweichungen, b) sind es noch zu viele verschiedene Widerstände und c) möchte ich Widerstands-Werte die vieleicht jeder „zu hause hat“.
  • Der Serial Sender muss noch lernen, Custom Chars zu senden. Das passt mir momentan noch nicht so recht in meine Library (bzw. will ich deswegen nicht noch eine weitere virtual function).
  • Der Modbus Client / Modbus Server läuft, den muss ich aber ein wenig verbessern und der braucht auch einiges an Dokumentation.

Und hier abschließend noch ein Bild mit 3 passiven Empfänger (Sender Mega ist nicht im Bild):

oben ein Arduino UNO mit LCD Keypad Shield und einem externen RS485 Adapter, darunter zwei Platinen von mir mit Arduino NANO im Huckepack.

Übrigens, wenn wer so ein Platinchen braucht, und der spätere Schaltplan für ihn in Ordnung ist, der kann mir eine PM senden. Bei der Bestellung wars ja fast wurst ob man 5, 10 oder 20 bestellte.

4 Likes

(reserviert für mich)

Sehr schön, aber warum packst du das nicht in "geile Projekte" ?
Da wäre es doch passend aufgehoben.

Ach und da das Modul "nur" ein I2C Display treiben soll, hätte doch auch ein ESP8266-01 gereicht. :wink:

Ok, halt nur über den I2C Umweg.

Bisserl später wenn die Software steht und nur Bilder, weniger blabla :wink:

Ich frage mich gerade warum so kompliziert, wen man das mit 2 IC + 6 Widerstände auch machen kann

"kompliziert" finde ich meins nicht. Und bauteilemäßig ist es übersichtlich:
Das ist in der Minimalbestückung eine Platine auf der Empfänger Seite, 1 Nano, 1 IC, 1 Kondensator, 1 Transe, 1 Widerstand.
Auf der Senderseite nimmst so ein längliches MAX485 Modul.
Und von mir aus am Ende vom Bus noch ein Abschlusswiderstand.

Du kannst ja deine Lösung vorstellen - aber ich ersuche dich - dies in deinem separaten Thread zu machen.

Klasse Projekt! :+1:

Eine schöne Ergänzung für dem "Modbus-Zoo" :grin:

1 Like

Unter kompliziert verstehe ich den aufwand, ist aber auch egal.
Das es wird funktionieren das bin ich mir sicher.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.