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
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"...
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"? :-)
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).
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ß
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)
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.
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
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.