Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller lernen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ali B. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wollte anfangen mich mit Mikrocontrollern zu beschäftigen und weiß 
nicht genau wie ich mich am besten rantasten sollte.

Ich habe schon ein bisschen Grundkenntnisse mit den Sprachen Java und C 
gesammelt und frage mich wie der Unterschied in der Umsetzung aussieht, 
wenn man Mikrocontroller programmiert.

Ich hatte mir jetzt etwas voreilig einen Arduino geholt und schon mal 
ein bisschen mit den LEDs gespielt. Bin aber ein bisschen verwirrt, ob 
bei jeder Mikrocontroller Programmierung nur die Funktionen setup() und 
loop() wie in der Arduino IDE verwendet werden.

Außerdem bin ich jetzt öfters bei der Suche zum Thema Mikrocontroller 
auf AVR Mikrocontroller Programmierung gestoßen und anderen 
Microcontroller und frage mich, welchen Unterschied es macht mit einem 
Arduino die Grundlagen zu lernen oder quasi "nackt" nur mit dem 
Mikrocontroller.
Insbesondere auch für das Verständnis. Da ich auch besser nachvollziehen 
will, was sich im Hintergrund abspielt und wie ich bei der 
Programmierung Einfluss darauf haben werde.

Was dann zu meinem nächsten Punkt kommt. In Sachen Elektrotechnik kenne 
ich im Grunde nur das Ohmsche Gesetz, den Maschensatz und den 
Knotensatz. Also nicht gerade viel Hintergrundwissen in Sachen 
Elektrotechnik.
Mit welchen Themen der Theorie sollte ich mich vertraut machen und vor 
allem in welcher Hierarchie sollte ich diese Themen abarbeiten und 
erlernen?

Ich hoffe auch, dass ich den Beitrag in das passende Forum gepostet 
habe. Ich bin absolut neu hier und habe noch nicht den Durchblick. Wenn 
ich den Beitrag verschieben oder löschen muss, bitte Bescheid geben.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Bewertung
1 lesenswert
nicht lesenswert
Ali B. schrieb:
> ob
> bei jeder Mikrocontroller Programmierung nur die Funktionen setup() und
> loop() wie in der Arduino IDE verwendet werden.

Nee, das ist eine Eigenart der Arduino IDE. Allerdings haben alle MC 
Programme schliesslich eine Endlosschleife als Hauptschleife, weil sie 
ja nicht auf eine andere Ebene zurückkehren, sondern in ihrem 
Programmspeicher gefangen sind.
Du kannst so einen Arduino auch ohne die IDE programmieren, aber als 
Anfang ist das schon ganz brauchbar. Mache erstmal mit den LEDs weiter, 
z.B. ein Lauflicht oder Zufallsgeblinke. Dann kannst du z.B. einen 
kleinen Lautsprecher mit Verstärker ansteuern und Gepiepse produzieren, 
oder auch Relais schalten usw.
Je nach Gusto hilft es, anderen Programmierern über dis Schulter zu 
schauen, bzw. deren Programme zu verstehen.

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Bewertung
2 lesenswert
nicht lesenswert
Ali B. schrieb:
> Bin aber ein bisschen verwirrt, ob
> bei jeder Mikrocontroller Programmierung nur die Funktionen setup() und
> loop() wie in der Arduino IDE verwendet werden.

Das ist Arduino spezifisch, aber ein ziemlich nahelegendes Pattern, denn 
Mikrocontroller-Programme laufen fast immer in Endlos-Schleifen.

Das steckt ungefähr dies hinter:
int main()
{
    setup();
    while (1)
    {
        loop();
    }
}

> welchen Unterschied es macht mit einem Arduino die Grundlagen zu lernen
> oder quasi "nackt" nur mit dem Mikrocontroller.

Arduino ist C++. Das Framework stellt fertige Klassen für viele häufig 
verwendeten Funktionen der unterstützten Mikrocontroller bereit. Es 
abstrahiert den Zugriff auf die Hardware über eine standardisierte API 
(z.B. digitalWrite(Pin,Pegel)), was wiederum die Entwicklung von 
zusätzlichen Bibliotheken für häufig verwendete Module/Mikrochips 
begünstigt.

Gleichzeitig schränkt es aber auch ein, insbesondere was die Performance 
angeht. Jemand berichtete mal, dass digitalWrite(Pin,Pegel) ganze 70 CPU 
Takte dauert, während ein direkter Port-Zugriff nur 2 Takte braucht.

Guck Dir mal das an: 
http://stefanfrings.de/mikrocontroller_buch/index.html

von Werner S. (wernertrp)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mit dem 8008 angefangen im Jahre 1972.
Da lieferte Intel in seinem Handbuch alles mit zum Selberlernen.
Fange mit einem 8-Bitter an. Aber bitte nicht mit dem 8008.
Auch falls der noch bei ebay zu horrenden Einzelstückzahlpreisen 
lieferbar sein sollte. Humormodus aus.
viel Glück.

von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Allerdings haben alle MC
> Programme schliesslich eine Endlosschleife,

Auch nicht automatisch. Aber du tust gut daran, eine zu implementieren.

leo

von Egonwalter M. (heiner1234)


Bewertung
1 lesenswert
nicht lesenswert
Hallo Ali B.

Ich habe mit dem AVRStudio4.18 begonnen, die AVR (ATMega8, ATMega168 
etc) zu programmieren und mir im Dezember 2020 einen Arduino UNO geholt, 
weil er billig war und mich diese Arduino Sache mal interessiert hat.
Naja, ist ganz nett, aber letzendlich bleibe ich doch bei meiner 
gewohnten AVRStudio Umgebung.

Wenn Du "echte hardwarenahe" Programmierung machen willst (also lernen, 
wie man die PINs manipulieren kann, eigene TIMER funktioen schreiben 
etc), dann ist das Arduino-Gedöns nicht das richtige imho, denn da gibt 
es vorgefertigte Libraries - allerdings ist dadurch der Einstieg 
einfacher.

Kurz gesagt - mit Arduino ist es leichter, aber Du lernst vom 
Mikrocontroller auch wesentlicher weniger.
Herausfordernder ist es mit dem AVRStudio bzw der jetzt aktuellen 
Version 7.

Wie Du Dich auch entscheidest - viel Spaß!

mfg

: Bearbeitet durch User
von M.A. S. (mse2)


Bewertung
0 lesenswert
nicht lesenswert
Ali B. schrieb:
> Was dann zu meinem nächsten Punkt kommt. In Sachen Elektrotechnik kenne
> ich im Grunde nur das Ohmsche Gesetz, den Maschensatz und den
> Knotensatz. Also nicht gerade viel Hintergrundwissen in Sachen
> Elektrotechnik.
> Mit welchen Themen der Theorie sollte ich mich vertraut machen und vor
> allem in welcher Hierarchie sollte ich diese Themen abarbeiten und
> erlernen?

Zu den anderen Punkten ist alles wesentliche gesagt. Zu Deiner 
obenstehenden Frage:

kommt darauf an. Wo Du hinwillst und wie genau Du verstehen möchtest, 
was physikalisch vor sich geht, wenn Dein Mikrocontroller arbeitet.

Wenn Du verstehen willst, wie ein Mikrocontroller grundsätzlich 
funktioniert, dann musst Du Dich mit Digitaltechnik befassen (Gatter, 
Flipflops, Schaltnetze, Schaltwerke).

Wenn Du wissen möchtest, wie Gatter und Flipflops funktionieren: 
Halbleiterbauelemente (vor allem Transistoren und davon vor allem 
MOSFETs).

Irgendwann willst Du um Deinen Controller herum eine Schaltung bauen (Du 
möchstest ja, dass er mit der Umwelt interagiert, etwas misst, etwas 
steuert, etwas anzeigt oder Du ihm etwas per Knopfdruck mitteilen 
kannst), dazu benötigst Du die Grundlagen sowieso. (Wenn Du nicht 
vollständig in der Arduinowelt bleiben willst und nur fertige 
Aufsteckmodule verwenden möchtest. Aber selbst dann kann es ja sein, 
dass Du wissen willst, wie diese arbeiten...)

Man kann jedes dieser Themem mit beliebigem Tiefgang behandeln:
von komplett ignorieren bis studieren.

von M.A. S. (mse2)


Bewertung
0 lesenswert
nicht lesenswert
Ergänzung:

was dem meisten Leuten, die in Richtung Digitaltechnik/Mikrocontroller 
wollen, nicht so richtig liegt, sind so physikalische Grundlagen die mit 
Kapazitäten, Induktivitäten, Feldern etc. zu tun haben.

Grundlagen aus diesem Bereich sind aber auch sehr zu empfehlen bzw. 
werden unverzichtbar, wenn man
- schnellere Digitalsachen bauen möchte, die
- funktionieren,
- keine allzugroße Störstahlung absondern,
- sich möglichst wenig stören lassen.

Zu diesem Themenbereich gehört dann auch noch ESD/Überspannungsschutz...

von Klaus A. (Gast)


Bewertung
-6 lesenswert
nicht lesenswert
Vergiss den Arduino. Ist so richtig was für Anfänger. Sobald du etwas 
mehr machen willst ist das Ding zu klein. Du bist immer an die IDE von 
dem Ding gebunden.Nimm das AVR Studio 7 und mach was über ISP. Ist 
klrinr und billige Boards mit toller Hilfe und vielen Beispielen.

von Stefan ⛄ F. (stefanus)


Bewertung
4 lesenswert
nicht lesenswert
Klaus A. schrieb:
> Vergiss den Arduino. Ist so richtig was für Anfänger.

Er ist ein Anfänger!

>  Sobald du etwas mehr machen willst ist das Ding zu klein.

Es gibt kleine und große Arduino Module.

> Du bist immer an die IDE von dem Ding gebunden

Nein, das ist völlig falsch.

> Nimm das AVR Studio 7 und mach was über ISP. Ist  kleiner

Ganz sicher nicht. Das Atmel Studio sieben ist mehrere Gigabytes groß.

ISP ist nicht mehr aktuell, das passt nur noch auf die klassischen AVR, 
mit denen Arduino groß wurde.

> und billige Boards mit toller Hilfe und vielen Beispielen.

Das Atmel Studio liefert keine billigen Boards. IMHO findet man billige 
kompakte Boards am ehesten im Arduino Umfeld. Man muss sie aber nicht 
mit dem Arduino Framework programmieren.

: Bearbeitet durch User
von Baendiger (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Arduino ist ein guter Anfang! Damit kann man viele grundlegende Konzepte 
von eingebetteten Systemen lernen ohne sich mit dem Prozessor 
auseinandersetzen zu müssen. Desweiteren gibt es unzählige Tutorials. 
Später kannst du mit 
https://www.mikrocontroller.net/articles/Umstieg_von_Arduino_auf_AVR den 
Schritt vom Framework weg machen.

Stefan ⛄ F. schrieb:
> Du bist immer an die IDE von dem Ding gebunden

Falsch! Nimm die Arduino IDE zum kompilieren und Flaschen (weil das 
halbwegs stabil out of the box funktioniert). Stelle in den 
Einstellungen einen externen Editor ein, da die Arduino IDE weder 
ordentliches code hghlighing noch Auto completetion hat.

Aber auch Arduino schützt dich nicht davor dich früher oder später mit 
den schon genannten Themen zu beschäftigen:

M.A. S. schrieb:
> physikalische Grundlagen die mit Kapazitäten, Induktivitäten, Feldern
> etc. zu tun haben

M.A. S. schrieb:
> Gatter, Flipflops, Schaltnetze, Schaltwerke

M.A. S. schrieb:
> Halbleiterbauelemente

Gerade wenn du noch keine Elektronik Vorkenntnisse hast solltest du 
erstmal bei fertigen Boards (wie Arduino) bleiben.

von Markus (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Ali B. (bigsleep)
>Hallo,

Um die Funktion eines Mikrocontrollers wirklich zu verstehen, kannst du 
mit diesem Simulator anfangen:
https://www.edsim51.com/

von Peter D. (peda)


Bewertung
1 lesenswert
nicht lesenswert
Ali B. schrieb:
> Ich hatte mir jetzt etwas voreilig einen Arduino geholt und schon mal
> ein bisschen mit den LEDs gespielt. Bin aber ein bisschen verwirrt, ob
> bei jeder Mikrocontroller Programmierung nur die Funktionen setup() und
> loop() wie in der Arduino IDE verwendet werden.

So voreilig ist das nicht, der Arduino ist schon sehr gut für den 
Einstieg geeignet.
Der große Vorteil ist, man programmiert in C, was quasi die 
Universalsprache für Mikrocontroller ist, d.h. man kann einmal 
geschriebenen Code leicht auf andere MC-Familien übernehmen.

Das Hauptproblem ist aber, das Programmieren zu lernen, d.h. in Abläufen 
zu denken und die Aufgaben in einzelne Bausteine zu zerlegen.
Anfäger machen gerne den Fehler, nicht systematisch vorzugehen, sondern 
alles als einen riesen monolithischen Block zu erstellen. Solche 
Programme werden schnell unübersichtlich und man sieht irgendwann selber 
nicht mehr durch, d.h. baut Fehler ein.
Je kleiner die Module, umso übersichtlicher wird es und umso 
universeller sind die Module. Es ist nicht verboten, Funktionen zu 
schreiben, die nur 1..2 Codezeilen beinhalten.

Bei MCs hat man oft auch kein OS, d.h. um mehrere Tasks gleichzeitig 
auszuführen, muß man die einzelnen Module nicht blockierend schreiben. 
Muß irgendwo gewartet werden, geht die Ausführung zur Mainloop zurück. 
Das Modul merkt sich für den nächsten Aufruf, wo auf ein Ereignis 
gewartet wurde und macht dort weiter.


Auch muß man beachten, daß jede Codeausführung Zeit kostet, z.B. eine 
float Division wird man möglichst sparsam einsetzen und besonders 
ungerne in Interrupts.
Auch LCD-Ausgaben kosten Zeit und sollte man nicht viel schneller 
machen, als der Mensch sie ablesen kann. Ständiges Geflacker ist 
unergonomisch. Optimal ist eine Anzeigerate von 2..5 Werten/s.

von Arduino Fanboy D. (ufuf)


Bewertung
-1 lesenswert
nicht lesenswert
Peter D. schrieb:
> Der große Vorteil ist, man programmiert in C,

Ich stimme dir in allem zu. (bis auf diesen einen Punkt)
Die Arduino Haus und Hofsprache ist C++.
Auch wenn viel des Core/Framework in C und etwas in ASM geschrieben ist, 
ist doch die Seite mit der man als erstes in Berührung kommt, C++.
Auch der Großteil der Libraries ist in C++.

Peter D. schrieb:
> was quasi die Universalsprache für Mikrocontroller ist,
Arduino deckt C++, C und ASM ab.
Damit hat man wohl die wichtigsten erwischt.

von Manfred (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Es ist nicht verboten, Funktionen zu
> schreiben, die nur 1..2 Codezeilen beinhalten.

Nicht nur das, man kann damit Platz sparen, wenn es eng wird.

Beitrag #6405277 wurde von einem Moderator gelöscht.
von Peter F. (toto)


Bewertung
0 lesenswert
nicht lesenswert
Am besten soll man ja spielerisch lernen.
Youtube-Video "Minecraft - Programmable 8-bit Computer"

Arduino und Co. sind so Appetihäppchen dazu. Kommt darauf an, ob man es 
wirklich verstehn will, oder nur schnelle Erfolge.

von W.S. (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Christof E. schrieb im Beitrag #6405277:
> Hier mein Kursskript für den AVR ATMega328p

Ich würd's an deiner Stelle überarbeiten. Ist viel zu schwafelig und hat 
viel zu viele eigentlich nichtssagende Bilder.
Zitat:
"Klassische CPUs, wie der 8Bit MOS 6502,
Z80A , haben ein reduziertes Innenleben.
Die Peripherie Komponenten sind externe
Bausteine."

Ein reduziertes Innenleben? Wohl nicht (weil wovon reduziert?), denn 
du solltest eher den Unterschied herausarbeiten zwischen Mikroprozessor 
und Mikrocontroller. Ich würde mit dem eigentlichen Funktionsprinzip 
beginnen, also wie ein Digitalrechner ausfgebaut ist: CPU, Bus, 
Speicher, Peripherien, Befehlsablauf (holen, dekodieren, ausführen, 
Programmzeiger, Akku, Flags usw.). Aber nicht breit treten, sondern 
sondern zwar ausführlich, aber gestrafft. Und fang erst garnicht von 
"Mikrocode" an.

Auch sowas ist ausgesprochen grenzwertig:
Zitat:
"ISP ist eine entschieden stabilere und bessere Lösung als mit einem 
Bootloader. (Bootloader sind begrenzt, brauchen Platz und sind schnell 
mal tot=überschrieben, gehen also nur, wenn alles in Ordnung ist)."

Vielleicht wäre es besser, drauf hinzuweisen, daß die AVR keinen eigenen 
Bootlader haben, sondern daß man diesen als eine Art Rumpf-Programm in 
den Anwendungs-Flash schreiben muß, wo sie Platz wegnehmen und selbst 
löschbar sind. Im Gegensatz dazu haben viele ARM-Controller einen echten 
Bootlader, der in einem speziellen ROM steht und nicht kaputtzukriegen 
ist.

Nun ja, dein PDF ist nett anzuschauen, hat auch sicherlich viel Arbeit 
beim Anfertigen gemacht. Also Gratulation dafür. Aber mir ist recht 
unklar, für welche Sorte von Leuten es tatsächlich ein zum Lernen 
geeignetes Dokument ist. Ich sag's mal so:

Mikrocontroller sind Bauteile, die zusammen mit anderen Bauteilen auf 
eine Leiterplatte gehören, um dort die gewünschte Funktionalität zu 
bieten. Deshalb steht an allererster Stelle bei Mikrocontrollern die 
schiere Schaltungstechnik. Natürlich muß man auch einschätzen können, 
was so ein konkreter µC zu leisten in der Lage ist und ob er den 
vorgesehenen Job tun kann, also kommt an zweiter Stelle das Verständnis 
der inneren Funktionalität des Contollers, was sie kann und was nicht 
und wie sie funktioniert. Erst viel später kommt dann alles Andere.

W.S.

von Maschinenstürmer (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Christof E. schrieb im Beitrag #6405277:
> Hier mein Kursskript für den AVR ATMega328p ( Arduino Uno) in
> Ansi-C
>
> 
https://homepages.uni-regensburg.de/~erc24492/PDFs/Mikrocontroller_Crash_Kurs_CE.pdf

Hallo Christoff,

Super gemacht! Ich verstehe wirklich nicht warum dafür zwei Minuspunkte 
geerntet wurden. Für den Anfänger ist es eine wirklich sehr 
verständliche und schmackhafte und manchmal humorvolle Einführung in die 
Welt der Mikrocontroller.

Kritiker: Kommt mal von Eurem hohen Ross runter - Sonst sieht ihr nicht 
recht die Bananenschalen am Boden auf die ihr sonst möglicherweise 
ausrutscht;-)

Anfänger: Lasst Euch nicht beirren und verdaut mal die Thematik in dem 
besagten Werk. Auch die Einführungen von Stefan F. Sind lehrreich. Die 
alten uC Hasen hier wissen durchaus Bescheid. Man kann sich auf deren 
Ratschläge meist verlassen.

OK. Jetzt dürft ihr mich verhauen, wenn ihr mich einfangen könnt;-)

Gruß vom Maschinenstürmer

von Jack V. (jackv)


Bewertung
4 lesenswert
nicht lesenswert
Maschinenstürmer schrieb:
> Ich verstehe wirklich nicht warum dafür zwei Minuspunkte
> geerntet wurden.

Nachdem einer von mir ist: weil er mindestens fünf tote, kalte Threads 
ausgegraben hat, um den Link dort hineinzuspammen – egal, ob’s passt, 
oder nicht. Und nachdem ich da mal reingeschaut habe, würde ich gerne 
auch einen zweiten Minuspunkt vergeben können – wenn’s schon so 
penetrant aufgedrängt wird, sollte es wenigstens exzellente Qualität 
haben. Und das hat’s nicht im Ansatz.

von Harald W. (wilhelms)


Bewertung
0 lesenswert
nicht lesenswert
Werner S. schrieb:

> Ich habe mit dem 8008 angefangen im Jahre 1972.
> Da lieferte Intel in seinem Handbuch alles mit zum Selberlernen.
> Fange mit einem 8-Bitter an. Aber bitte nicht mit dem 8008.

Für den 6502 gibt es ähnlich viel Literatur. Und mit dem kann man
schon etwas mehr anfangen.

von Erwin D. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
leo schrieb:
> Matthias S. schrieb:
>> Allerdings haben alle MC
>> Programme schliesslich eine Endlosschleife,
>
> Auch nicht automatisch. Aber du tust gut daran, eine zu implementieren.
>
> leo

Du schreibst "auch nicht automatisch"
Was meinst du damit? Gibt es Anwendungsfälle, wo ein Programm auf dem µC 
linear durchläuft? Und was passiert, wenn der letzte Befehl des 
Programmes erreicht ist? Was hat der µC für eine Alternative (außer 
abzustürzen)?
Meiner Meinung nach ist eine Schleife unvermeidlich...

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Erwin D. schrieb:
> Meiner Meinung nach ist eine Schleife unvermeidlich...

Ein Programm könnte auch mit einem Halt-Befehl enden, falls vorhanden. 
oder mit einem Sleep der bis zum Reset andauert.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.