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.
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.
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:
1
intmain()
2
{
3
setup();
4
while(1)
5
{
6
loop();
7
}
8
}
> 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
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.
Matthias S. schrieb:> Allerdings haben alle MC> Programme schliesslich eine Endlosschleife,
Auch nicht automatisch. Aber du tust gut daran, eine zu implementieren.
leo
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
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.
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...
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.
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.
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 habenM.A. S. schrieb:> Gatter, Flipflops, Schaltnetze, SchaltwerkeM.A. S. schrieb:> Halbleiterbauelemente
Gerade wenn du noch keine Elektronik Vorkenntnisse hast solltest du
erstmal bei fertigen Boards (wie Arduino) bleiben.
Ali B. (bigsleep)
>Hallo,
Um die Funktion eines Mikrocontrollers wirklich zu verstehen, kannst du
mit diesem Simulator anfangen:
https://www.edsim51.com/
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.
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.
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.
Am besten soll man ja spielerisch lernen.
https://www.youtube.com/watch?v=ydd6l3iYOZE
Arduino und Co. sind so Appetihäppchen dazu. Kommt darauf an, ob man es
wirklich verstehn will, oder nur schnelle Erfolge.
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.
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
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.
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.
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...
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.