Forum: Mikrocontroller und Digitale Elektronik Liquid Crystal


von Entwicklung einer LCD Library .Tutorial gesucht (Gast)


Lesenswert?

Hallo

ich würde mich als fortgeschrittenen Einsteiger in der µC Programmierung 
bezeichnen und habe schon einige Grundkenntnisse in C und Anwendung bei 
den 8 Bit AVR (ATtiny, ATMega).
Trotzdem bin ich letztendlich den Arduino Weg gegangen (was ja eine 
Mischung zwischen C und C++ ist) und habe mich in der auch dort 
möglichen Hardwarenahmen Programmierung eingearbeitet.
Das ist dank vieler guter Tutorials und auch guter Bücher und teilweiser 
Zuhilfenahme anderer Quellen die sich nicht direkt auf µC oder Arduino 
beziehen sehr gut möglich.
Ein wichtiger Punkt ist aber das diese Tutorials und Bücher in deutscher 
Sprache sind.

Nun bin ich bei den LCD Displays (mit HD44780 Controller) angelangt.
Deren Nutzung mit fertigen Librarys ist sehr Komfortabel und Einfach 
möglich.
Aber ich möchte mehr, ich möchte verstehen wie eine entsprechende 
Library von Grund auf entwickelt wird.
Leider ist es so das die Beispiele die zu Librays finden sind (Arduino, 
aber nicht nur da) immer anhand relativ einfacher Probleme gegeben 
werden (Blinkschaltungen, elektronische Würfel usw.)
Ich suche also ein, vorzugsweise deutschsprachiges, Tutorial bei den von 
Grund auf gezeigt wird wie eine LCD Library(HD44780 Controller) im 
Arduinosystem (C++) entwickelt wird.
Unwichtig (im Sinne muss erklärt werden) ist aber wie eine Library 
generell aufgebaut ist, was diese ist und anderer absolutes 
Grundlagenwissen zu Sprache C und C++.
Und nein - die schon bestehende Library selbständig zu analysieren ist 
kein  Tutorial - Ein Tutorial soll in verständlichen und noch wichtiger 
tief gehenden Erklärungen, einen bei der Hand nehmen und zeigen wie  und 
warum es so gemacht wird (werden kann) und was für eventuell "Seltsame 
und ungewöhnliche, so nie erlernte" Fomulierungen in fertigen Librays 
verwende werden.

Es geht mit letztendlich darum, später einmal selbst Librarys für andere 
LCD Controller oder auch irgendwelche Bus Systeme (i2C-Bus) und auchganz 
andere herausfordernde Sachen nur mithilfe von Datenblättern und 
Application Notes zu entwickeln oder wenigstens schon fertige Librarys 
100% zu verstehen.

Falls wichtig: Die Hardware ist kein (selten ein) Problem für mich, ich 
kenne mich mit Analogtechnik recht gut aus, sogar gut wenn man bei 
Amateur Ansprüchen bleib ;-), auch Digitaltechnik ist mir selbst auf 
Logicgatterebene bekannt.

Wahrscheinlich könnte ich mit sehr viel Aufwand und umfangreichen Suchen 
es auch selbst schaffen eine bestehende LCD Library zu verstehen.
Aber ein gutes und fertiges Tutorial von jemanden von einen "Profi" der 
100% weis was und dementsprechend schon viel vorher erfolgreich 
entwickelt hat ist natürlich viel besser.
Es geht hier das erlernen für den Hobbybereich, nicht(!) für das 
Berufliche oder Schulische / Universitäre Umfeld.

Liquid Crystal

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Entwicklung einer LCD Library .Tutorial gesucht schrieb im Beitrag 
#4919748:
> Ich suche also ein, vorzugsweise deutschsprachiges, Tutorial bei den von
> Grund auf gezeigt wird wie eine LCD Library(HD44780 Controller) im
> Arduinosystem (C++) entwickelt wird.
Den ersten Teil deines Wunsches (Ansteuerung eines HD44780) erfüllt das 
AVR-Tutorial: LCD.
Und den zweiten Teil (Programmieren in C) dürftest du selber 
hinbekommen.

Es ist übrigens generell kein schlechter Weg, über das 
Reverse-Engineering eines bestehenden guten Quellcodes zu lernen. Man 
lernt dabei die Sprache, die man verwenden will durchaus besser kennen. 
Indbesondere, weil man sieht, wie ein Anderer sie "spricht". Da fällt 
einem so mancher eigener "Sprachfehler" auf...

BTW: "LCD Display" ist doppelt gemoppelt, denn das D im LCD kommt von 
"Display"...

von Harald W. (wilhelms)


Lesenswert?

Lothar M. schrieb:

> Es ist übrigens generell kein schlechter Weg, über das
> Reverse-Engineering eines bestehenden guten Quellcodes zu lernen.

...und wo findet man "guten Quellcode"? :-)

von Ralph S. (jjflash)


Lesenswert?

Entwicklung einer LCD Library .Tutorial gesucht schrieb im Beitrag 
#4919748:
> rotzdem bin ich letztendlich den Arduino Weg gegangen (was ja eine
> Mischung zwischen C und C++ ist)

... es ist C++ !!! Nur weil C++ Syntaxelemente als Untermenge verwendet 
ist es dennoch C++ und KEIN C .

Entwicklung einer LCD Library .Tutorial gesucht schrieb im Beitrag 
#4919748:
> Unwichtig (im Sinne muss erklärt werden) ist aber wie eine Library
> generell aufgebaut ist, was diese ist und anderer absolutes
> Grundlagenwissen zu Sprache C und C++.

Genau DAS ist eben NICHT unwichtig, denn wer das kann, kann auch aus 
Datenblättern heraus eine Bibliothek entwickeln.

Im Falle von Arduino muß man hier fast nur Wissen, dass es eine Klasse 
im Stile von:

SOFTI2C::SOFTI2C(uint8_t sda, uint8_t scl)

gibt und jede weitere Bibliotheksfunktion ein Member von SOFTI2C ist.

Bsp::
1
//  in der Bibliothek, bspw. softi2c.cpp
2
3
SOFTI2C::SOFTI2C(uint8_t sda, uint8_t scl)
4
{
5
  // fuer jedes Mitglied von SOFTI2C ist my_sda und my_scl verfuegbar
6
7
  my_sda = sda;
8
  my_scl = scl;
9
10
  // hier folgt Initialisierungscode... 
11
  // Anschluesse VORERST als Eingang setzen
12
13
  pinMode(m_scl, INPUT);
14
  pinMode(m_sda,INPUT);
15
  digitalWrite(m_scl, LOW);
16
  digitalWrite(m_sda, LOW);
17
18
}
19
20
SOFTI2C::start(void)
21
{
22
  // bla bla
23
}
24
25
// im Hauptprogramm, hier wäre es dann mysofti2c.ino
26
27
28
// Digitalpin 2 und 3 werden zur Kommunikation verwendet
29
30
SOFTI2C my_baustein(2, 3);

In C (und somit dann für NICHT-Arduino siehts dann etwas anderst aus, 
weil es dort eben keine Klassen gibt).

Prinzipiell solltest du dich wirklich damit auseinandersetzen, was 
Bibliotheken (oder wie ich es lieber formuliere: "Softwaremodule") sind 
und wie sie aufgebaut sind.

Schreibe also erst einmal ein Softwaremodul für Arduino, das ganz 
absichtlich KEINE Hardware anspricht (schön mit Klasse und Methode).

Wenn du das kannst, beschäftige dich mit Hardware (und dann nur mit 
Hardware, ohne Bibliothek).... und wenn du beides kannst verheirate dein 
Wissen zu einem Softwaremodul (von mir aus kann das auch Bibliothek 
genannt sein).

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

"Wahrscheinlich könnte ich mit sehr viel Aufwand und umfangreichen 
Suchen es auch selbst schaffen eine bestehende LCD Library zu 
verstehen."


Genau!
Du könntest einen vorgegeben funktionierenden Code Zeile für Zeile 
untersuchen, um heraus zu finden, was mit den Bits und Bytes gemacht 
wird, bis sie zum LCD gelangen. Ebenso bietet sich die Möglichkeit an, 
in einem Debugger schrittweise die Befehle abzuarbeiten und dabei zu 
schauen, was in den Registern passiert.

Mit freundlichem Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Harald W. schrieb:
> ...und wo findet man "guten Quellcode"? :-)
Man muss viel davon ansehen. Und irgendwann hat man "ein Auge" dafür...

Ralph S. schrieb:
> ... es ist C++ !!!
Es ist sicher kein C++, sondern es verwendet ein überschaubares 
Subset der simpelsten C++ Komponenten.

Und bei Wikipedia wird als Sprache deshalb auch C genannt:
https://de.wikipedia.org/wiki/Arduino_(Plattform)

von Theor (Gast)


Lesenswert?

Eine "gute" Library unterscheidet sich von einem "guten" Programm nur 
dadurch, dass sie keinen "Einsprungpunkt" hat; ich meine keine 
main-Funktion hat.

Du kannst also Dein Problem sinngemäss insofern vereinfachen, dass Du 
nach Tutorials über Programmstruktur, Programmier-Paradigmen und 
Verwendung und Entwurf von Datentypen suchst. In der Regel fängt man so 
an, dass man sich einmal die Texte über grundlegende Algorithmen 
anschaut. Das Buch "Algorithmen in C" ist da ein guter Einstieg (und 
sogar auf Deutsch erhältlich).
Ein wesentlicher Faktor ist allerdings, dass Du die Themen auch konkret 
in kleine Programme umsetzt. Soweit möglich in Abwandlungen für eigene 
kleine Projekte auf dem PC. Erst so bekommst Du ein "Gefühl" (ja, das 
ist in der Informatik genauso hilfreich wie beim Tischlern) für die 
Sache und das Thema insgesamt.

Ein echtes Problem ist, auf lange Sicht, der Wunsch nach solchen 
Tutorials in deutscher Sprache. Die "Lingua franka" (die allen 
gemeinsame Sprache) der Informatik ist nun einmal Englisch (und wird 
vermutlich irgendwann Chinesisch). Ich kann Dir aber dazu sagen, dass 
ich bei meinen stundenlangen Aufenthalten bei einem Elektronik-Händler 
mit umfangreichem Buchangebot (den gibt es nicht mehr; war am 
Nollendorfplatz) mehr Englisch gelernt habe, als in meinen bis dahin 
rund 4 Jahren Englisch-Unterricht (wenn ich auch zugeben muss, dass der 
Unterricht geholfen hat :-) ). Das ist also, für einen fähigen Kopf, 
kein grundsätzliches Hindernis; nur ein zeitliches.

Viel Erfolg.

von Ralph S. (jjflash)


Lesenswert?

Lothar M. schrieb:
> Es ist sicher kein C++, sondern es verwendet ein überschaubares
> Subset der simpelsten C++ Komponenten.

Smile, ich mag mich darüber ganz sicher NICHT streiten, da ich selbst 
keine Arduino Software verwende.

Aber ist es nicht so, dass ich selbst für den simpelsten Subset von C++ 
eben doch einen C++ Compiler benötige (und es eben deshalb doch C++ 
ist)?

Wie dem auch sei: Man sollte schon wissen wie eine Bibliothek aufgebaut 
ist (und im Falle von Arduino ist das wirklich sehr sehr 
"übersichtlich").

Der Threadersteller sollte sich zuvorderst Gedanken darüber machen, was 
Register sind (ich meine hiermit nicht die Prozessorregister).

Jede Hardware (egal ob intern oder extern) verwendet zur Steuerung und 
zum Funktionieren Register (das war bspw. schon bei einem uralten 82C55 
I/O Baustein so). Ein Register bestimmt, wie ein Baustein betrieben 
werden soll, das Hardwareinterface bestimmt, wie ich Zugriff auf 
Register bekomme. Sei es per UART, SPI, I2C, CAN oder eben auch 
parallel.

Wenn ich also begriffen habe, wie ich ein bestimmtes Register einer 
bestimmten Funktionseinheit beschreiben kann und ich dann auch noch weiß 
was dieses Register bestimmt... ist es ein kleiner Schritt zu einer 
Bibliothek. Egal ob das jetzt C oder C++ (oder welche Sprache auch 
immer) ist

von Pandur S. (jetztnicht)


Lesenswert?

Mit nur Deutsch bist du bei dieser Technologie ganz falsch. Bei einer 
konsequenten Weigerung sich in das Englische einzuarbeiten sehe ich 
keinen laengeren Weg mehr.
Es mag Berufe geben, wo man ohne Englisch durchkommt. zB Foerster, 
Metzger, Zuhaelter, usw. Aber eher keine mit moderner Elektronik 
Technologie.

Auf der anderen Seite, sei froh ist diese Technologie in Englisch. In 
nicht allzu ferner Zeit koennten neue Technologien in chinesisch sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.