1.1l 🚧 LCD Anzeige
LCD-Ausgabe via I2C an SturmBoard (Baseshield V1.2)?
Lösung mit Drahtbrücken
Das I2C-LCD-Display ist an PA11 (SCL) und PA12 (SDA) angeschlossen. Beim Assembler und bei MBED hat Herr Sturm eine Software I2C-Lösung zur Anbindung verwendet, d.h. es wird nicht die I2C-Hardware des Controllers genutzt, sondern die Schnittstelle ist per Software realisiert.
Die Arduino I2C-Library Wire benutzt standardmässig D15 = PB8 (SCL) und D14 = PB9 (SDA). Meine einfache Lösung sind zwei Drahtbrücken:
- Serial Clock SCL: D15 = PB8 -> PA11
- Serial Data SDA: D14 = PB9 -> PA12
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd (0x27); // LCD-Adresse auf 0x27 für 16 Zeichen und 2 Zeilen ein
void setup() {
lcd.begin(16, 2); // initialize the lcd
lcd.clear();
lcd.setBacklight(255);
lcd.setCursor(0,0); // erstes Zeichen, erste Zeile
lcd.print("MezMedia.de");
}
void loop() {
delay(1000);
lcd.setBacklight(255);
lcd.setCursor(0,1); // erstes Zeichen, zweite Zeile
lcd.print("Viel Erfolg!");
delay(1000);
for (int i= 255;i>=0;i--){
lcd.setBacklight(i);
lcd.setCursor(0, 1);
lcd.printf("Backlight: %d ",i);
delay(50);
}
}
Mit dem Testprogramm erkannt: Die Hintergrundbeleuchtung geht nur an und aus. 😕
Beim STM32L152RE gibt es zwei I2C Schnittstellen, die über eine interne Verdrahtungsmatrix auf unterschiedliche Ports geschaltet werden können. Im Datenblatt ab Seite 47 sind die möglichen Anschluss-Pins für I2C zu finden.
PA11 und PA12 sind leider nicht dabei. 😭
Nach der API-Beschreibung kann die zweite Schnittstelle recht leicht eingerichtet werden, auch dort könnte das LCD-Display mit Drahtbrücken von PB10 und PB11 angeschlossen werden. Leider wird dies mit der BlueTooth Schnittstelle kollidieren.


Pin | I2C |
---|---|
PB5 (D4) | I2C1_SMBA |
PB6 (D10) | I2C1_SCL |
PB7 | I2C1_SDC |
PB8 (D15) | I2C1_SCL |
PB9 (D14) | I2C1_SDA |
PB10 (D6) | I2C2_SCL |
PB11 | I2C2_SDA |
PB12 | I2C2_SMBA |

Software Lösung
Ein Kollege hat eine Softwarelösung entwickelt, die ohne Drahtbrücken auskommt: https://github.com/schreger/LiquidCrystal_PCF8574_SoftWire/tree/main
Dazu muss eine Bibliothek eingefügt werden, Perplexity:
Arduino Bibliothek hinzufügen: Schritt-für-Schritt-Anleitung
Es gibt zwei Hauptmethoden, um eine Bibliothek zur Arduino IDE hinzuzufügen:
1. Über den Bibliotheksmanager (empfohlen)
- Öffne die Arduino IDE.
- Gehe zu Sketch > Bibliothek einbinden > Bibliotheken verwalten….
- Im Bibliotheksmanager kannst du nach dem Namen der gewünschten Bibliothek suchen.
- Wähle die gewünschte Bibliothek aus und klicke auf Installieren.
- Die IDE lädt die Bibliothek automatisch herunter und installiert sie.
😔 Geht nicht, weil Bibliothek nicht auftaucht.
2. Manuelle Installation einer ZIP-Bibliothek
- Lade die gewünschte Bibliothek als ZIP-Datei (z.B. von GitHub) herunter.
- Öffne die Arduino IDE.
- Gehe zu Sketch > Bibliothek einbinden > .ZIP-Bibliothek hinzufügen….
- Wähle die heruntergeladene ZIP-Datei aus und bestätige mit Öffnen.
- Die Bibliothek wird installiert und steht anschließend zur Verfügung.
😉 Geht nicht, weil die JSON-Dateien fehlen.


👋 Manuelles Hinzufügen zum Sketch
1. Sketch erstellen:
#include <Arduino.h>
#include <SoftWire.h>
#include <LiquidCrystal_PCF8574_SoftWire.h>
SoftWire wire(PA12, PA11);
LiquidCrystal_PCF8574_SoftWire lcd(0x27); // set the LCD address to 0x27
void setup() {
wire.begin();
wire.setClock(100000); // I2C speed 100kHz
lcd.begin(16, 2,wire); // initialize the lcd for a 16 chars and 2 line
lcd.clear();
lcd.setBacklight(255);
lcd.setCursor(0,0); // erstes Zeichen, erste Zeile
lcd.print("MezMedia.de");
}
void loop() {
delay(1000);
lcd.setBacklight(255);
lcd.setCursor(0,1); // erstes Zeichen, zweite Zeile
lcd.print("Viel Erfolg!");
delay(1000);
for (int i= 255;i>=0;i--){
lcd.setBacklight(i);
lcd.setCursor(0, 1);
lcd.printf("Backlight: %d ",i);
delay(50);
}
}
2. Library laden und entpacken
https://github.com/schreger/LiquidCrystal_PCF8574_SoftWire/tree/main
3. Mit Copy & Paste zum Sketch hinzufügen
Taucht dann im Sketch auf und wird mit kompiliert.
