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.
:
Bearbeitet durch User
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 | int main() |
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
:
Bearbeitet durch User
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 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.
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.
Beitrag #6405277 wurde von einem Moderator gelöscht.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.