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.

I2C Drahtbrücken für LCD bei SturmBoard
I2C Drahtbrücken für LCD bei SturmBoard
I2C Drahtbrücken für LCD bei SturmBoard
I2C Drahtbrücken für LCD bei SturmBoard
PinI2C
PB5 (D4)I2C1_SMBA
PB6 (D10)I2C1_SCL
PB7I2C1_SDC
PB8 (D15)I2C1_SCL
PB9 (D14)I2C1_SDA
PB10 (D6)I2C2_SCL
PB11I2C2_SDA
PB12I2C2_SMBA
Mögliche Pins für I2C
Verkabelung bei externem LCD
Verkabelung bei externem LCD

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.

.ZIP-Bibliothek hinzufügen...
.ZIP-Bibliothek hinzufügen…
.ZIP-Bibliothek Fehler
.ZIP-Bibliothek Fehler

👋 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.

Manuell hinzufügen: Copy & Paste
Manuell hinzufügen: Copy & Paste