class: center, middle ![img33r](pinguinlehrer1.webp) ###Grundlagen Elektro- und Digitaltechnik und C/C++ ##LCD mit Raspberry Pi ansteuern ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Hat alte Elektronikbauteile wiedergefunden... --- ### LCD und Chip ![img33r](LCD-foto.webp) Das LCD Modul (Pollin) **C0802-04**, wurde vor über 10 Jahren verkauft und lag einige Zeit herum :-) Heute ist es in der Form nicht mehr kaufbar, aber der **HD44780-Chip** zur Ansteuerung wird weiterhin (teilweise als Nachbau) immer noch verwendet. * Zwei Zeilen * Jeweils 8 Zeichen * Controller HD44780 für Dot-Matrix-LCD-Module ⇒ https://de.wikipedia.org/wiki/HD44780 * Hält die gesetzen Zeichen * Mischung aus ASCII, japanische Zeichen, Umlauten und Sonderzeichen * 4 Datenleitungen für 8-Bit-Zeichen Video *"LCD Modul Pollin C0802-04 Umbau auf Breadboard"* ⇒ https://www.youtube.com/watch?v=WXQko8EgjTs --- ### Grundlagen: Spannungen ![img33r](pinguinlehrer2.webp) * Über die schaltbaren Anschlüsse (**GPIO**) können beim Raspberry Pi **3,3V ausgegeben** oder **entgegengenommen** (z.B. Taster) werden. * Über vorher definierte **Spannungen** (hier 0 und 3,3V) werden die **logischen** Bit-Zustände **elektrisch** abgebildet: * aus/false/0 = **0V** * an/true/1 = **3,3V** * Der **Raspberry Pi** stellt nutzbare **Dauerspannungen** (z.B. zur Versorgung von Bauteilen) zur Verfügung: * 3,3V * 5V --- ### Zwischenspannungen ![img33l](Einfacher-unbelasteter-Spannungsteiler.png) Beispiel: An der Eingangsspannung ***U*** liegen **5V** an und an ***U
2
*** sollen **4V** anliegen. * ***U
1
*** soll **1V** (5V - 4V) sein * ***R
1
*** wird auf **1000Ω** festgesetzt * ***R
2
*** = (4V / 1V) \* 1000Ω = **4000Ω** Das funktioniert aber nur, wenn nicht viel Leistung bei ***U
2
*** abgegriffen wird, der Spannungsteiler somit unbelastet ist. Sonst wird es komplizierter mit der Berechnung. Mehr dazu: * https://de.wikipedia.org/wiki/Spannungsteiler * https://www.electronicsplanet.ch/Spannungsteiler/spannungsteiler-berechnen-online.htm * https://www.electronicsplanet.ch/Spannungsteiler/spannungsteiler-belastet-berechnen.php --- ### Variable Spannungen ![img33r](pinguinlehrer5.webp) Statt einer **starren Schaltung** kann auch ein **Drehwiderstand/Potentiometer** verwendet werden, um die Spannung zu regeln.
Mehr dazu: * https://de.wikipedia.org/wiki/Potentiometer --- ### Bits ![img33r](pinguinlehrer3.webp) Die kleinste Informationseinheit ist ein Bit mit den **Zuständen 0** und **1**. Mit genügend Nullen und Einsen können große Zahlen und (interpretierbare) Daten aller Art gespeichert werden.
Dezimal
(0-9: Basis 10)
Hexadezimal
(0-F: Basis 16)
Binär
(0-1: Basis 2)
Binär zu Dezimal
1
1
10000000
2^0(tes Bit) ⇒ 1
2
2
01000000
2^1(tes Bit) ⇒ 2
4
4
00100000
2^2(tes Bit) ⇒ 4
8
8
00010000
2^3(tes Bit) ⇒ 8
16
10
00001000
2^4(tes Bit) ⇒ 16
21
15
10101000
2^0(tes Bit) ⇒ 1 + 2^2(tes Bit) ⇒ 4 + 2^4(tes Bit) ⇒ 16 = 21
Ein **"A"** kann z.B. nach **
ASCII
** als 65 (dezimal), 41 (hexadezimal) oder 10000010 (binär) gespeichert werden. --- ### Welches Bit ist gesetzt? ![img33r](pinguinlehrer4.webp) Durch Anwendung des ***UND***-Bit-Operators **&** werden zwei Eingabewerte verknüpft und in der Ausgabe nur die Bits auf 1 gesetzt, die in beiden Eingabewerten auf 1 stehen.
Dezimal
(0-9: Basis 10)
Hexadezimal
(0-F: Basis 16)
Binär
(0-1: Basis 2)
Eingabewert 1
21
15
10101000
&
Eingabewert 2
1
1
10000000
=
Ausgabewert
1
1
10000000
Mehr dazu: * https://de.wikipedia.org/wiki/Bitweiser_Operator --- ### Anschlüsse und Verkabelung Je nach Raspberry-Pi-Version besitzt diese mehr oder weniger frei programmierbare GPIO-Anschlüsse, die eine physikalische RasPi-Pin-Nummer/-Position und eine softwarabhängige Bezeichnung (z.B. **
GPIO
** oder **
WiringPi
**) besitzen. ![img95u](verkabelungstabelle.png) --- ### ![img100full](aufbau+text.webp) --- ### Programmierung ![img33r](pinguinlehrer6.webp) Mein C/C++-Programm ***
displaytest.cpp
*** basiert auf einem Python-Skript von ***schnatterente.net***, welches nur noch per
web.archive.org
abgerufen werden kann. Zum ausführbaren Programm kompiliert Ihr es mit: ```bash g++ displaytest.cpp -o displaytest -lwiringPi ``` Hierbei wird gegen
WiringPi
gelinkt. Starten könnt Ihr das Programm mit: ```bash ./displaytest
``` --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de