Frage von Gena221, 31

Microcontroller paar fragen?

Hallo, ich kann etwas C++ und NASM Assembler, ich bin eher der low-level programierer. Ich dachte mir ich fange jetzt mit Microcontroller an, dann wurde mir aber schnell klar das es in Internet zu viele Begriffe und Namen gibt.

Frage 1: Kann mir jemand sagen wie man die Microcontroller unterteilt ?(PIC, AVR, ATMEGA, Atmel ??? sind das nur Marken oder Contoller Typen???)

Frage 2: Für Arduino braucht man kein Programmer der den Quellcode ladet (ja oder nein ?) und für die anderen braucht man so ein Programmer ?

Frage 3: Welche einstigssprache C oder Assembler oder C++ ? also C++ bei Arduino sieht einfach aus digitalWrite(led, HIGH); / C geht auch PORTD = 0b00010000 / wie es bei Assembler aussiht das weis ich noch nicht was lohnt sich am meisten ?

Frage 4: Als einstig Arduino ok ?

Frage 5: Kann man alles mit C++ machen also kann man auch Klassen Methoden usw. benutzen und erstellen ?

Ansonsten Danke und wenn ihr Tipps habt bin ich gespannt.

Antwort
von TeeTier, 11

Frage 1: Kann mir jemand sagen wie man die Microcontroller unterteilt
?(PIC, AVR, ATMEGA, Atmel ??? sind das nur Marken oder Contoller
Typen???)

Es gibt zwei Platzhirsche auf dem Gebiet, die beide sehr beliebte Microcontroller herstellen. Die eine Firma heißt "Microchip" und stellt die PIC-Reihe her. Je nach Pinzahl und Ausführung haben diese "PICs" dann unterschiedliche Typenbezeichungen, und es gibt sie als 8-, 16- und 32-Bit Modelle mit allen möglichen Kombinationen an Zusatzfeatures.

Die zweite Firma heißt "Atmel" und die stellen die "AVRs" her. Diese gibt es ebenfalls in allen möglichen Baugrößen und mit stark unterschiedlichem Funktionsumfang.

Vor kurzem hat "Microchip" übrigens "Atmel" gekauft, und somit gibt es nur noch einen richtig großen Anbieter auf diesem bei Bastlern sehr beliebten Gebiet.

Frage 2: Für Arduino braucht man kein Programmer der den Quellcode ladet (ja oder nein ?) und für die anderen braucht man so ein Programmer ?

Arduino ist eine "Plattform", d. h. du bekommst einen Microcontroller (in diesem Falle ein AVR) fertig auf einer Platine aufgelötet und dazu eine kleine Software, in der du Programmieren, Kompilieren und die Hardware flashen kannst, also so eine Art IDE (wobei die zugegebenermaßen extrem primitiv ist).

Arduino richtet sich an absolute Anfänger, und man kann eigentlich sofort loslegen, ohne erst auf einem Breadboard eine Basisschaltung aus Quarz, Widerständen, oder Kondensatoren aufbauen zu müssen. Außerdem muss man sich nicht selbst in weitere Software einarbeiten, da alles schon "vorverpackt" ist. Allerdings hat man auch DEUTLICH weniger Kontrolle über den Build-Prozess, die Tool-Chain und am wichtigsten: die Hardware selbst.

Für "richtige" Anwendungen (also auch kommerzielles Zeug) ist ein Arduino viel zu aufgeblasen und gleiczeitig zu primitiv.

Wenn du mit Microcontrollern anfangen willst, kauf dir ein Evaluation-Board möglichst direkt vom Hersteller für 50€ bis 150€. Die dazugehörigen Entwicklungsumgebungen (die WESENTLICH besser sind, als der Kinderkram von Arduino) laufen out-of-the-box mit den besagten Boards und sind gerade für Anfänger sehr zu empfehlen.

Wenn du dich als Anfänger nicht leicht abschrecken lässt, experimentierfreudig bist, und dich auch mal gerne durch harte Nüsse durchbeißt, dann kauf dir einfach einen China-ICP (In-Circuit-Programmer) von Amazon für 2€ bis 5€ und ein Steckbrett mit einer Hand voll Standard-Bauelemente. Diese ICPs arbeiten auch meistens out-of-the-box mit den IDEs von Microchip und Atmel zusammen und wenn nicht, gibt es praktische Schritt-für-Schritt Anleitungen im Internet.

Als dritte Möglichkeit könntest du dir eine gebrauchtes Multiprogrammiergerät kaufen, um das ROM-Image in die Controller zu laden. Gebrauchte Galeps sind zwar immer noch sehr teuer, allerdings kann man damit wirklich sehr viel machen, und nicht nur Microcontroller, sondern auch Eproms usw. "brennen".

Frage 3: Welche einstigssprache C oder Assembler oder C++ ? also C++ bei
Arduino sieht einfach aus digitalWrite(led, HIGH); / C geht auch PORTD =
0b00010000 / wie es bei Assembler aussiht das weis ich noch nicht was
lohnt sich am meisten ?

Normalerweise benutzt man C. Assembler kommt bei mir auch oft zum Einsatz, und ich denke, man sollte wirklich beides beherrschen, auch wenn man fast nur mit C arbeiten möchte, da man teilweise Optimierungen vornehmen, oder das Disassemblat auf auf Fehler überprüfen möchte.

C++ geht zwar auch, aber nur sehr mäßig. C++ hat einfach viel zu viel Overhead, und bringt nur bei größeren Controllern etwas. Wenn du nur 512 Byte Programmspeicher zur Verfügung hast, dann wirst du dir zwei drittel davon nicht auch noch durch unnützes Exception-Handling auffressen lassen. :)

Es gibt auch grafische Programme, die dir einen C oder Assembler Code erstellen, ohne dass du programmieren musst. Dazu wird der Programmablauf grafisch dargestellt ... das funktioniert zwar für primitivste Aufgaben ganz gut, ist aber ein Knickei. Wenn schon, dann lerne lieber gleich C.

Arduinos werden mit einer "Art C" programmiert, die nicht vollständig kompatibel ist. Ich empfinde auch das als ein Knickei, aber Arduino-Fans werden mir für diese Aussage den Kopf abreißen. ><

Wie gesagt, sollte man BEIDES können: C UND Assember. Dazu folgende Buchempfehlungen, bei denen am Anfang in Assembler programmiert wird, solange bis die Grundlagen sitzen, und danach auf C umgesattelt wird:

Für PICs: http://www.amazon.de/Picmicrocontroller-Programmierung-Assembler-Schaltungen-Anwendungsbeispiele/dp/348659706X/

Für AVRs: http://www.amazon.de/Mikrocomputertechnik-Controllern-Atmel-Avrriscfamilie-Programmierung/dp/3486589881/

Frage 4: Als einstig Arduino ok ?

Kommt drauf an, was du machen willst. :)

Arduino richtet sich vor allem auch an "Künstler" ohne technische Erfahrung, und entsprechend einfach ist die Anwendung, aber ebenso eingeschränkt sind die Möglichkeiten. Sei dir dessen bewusst.

Wenn du irgendwann mal "richtige" Geräte entwickeln willst, wirst du alles noch mal neu lernen müssen, weil das Arduino-Ökosystem so speziell und oberflächlich ist, dass man da fast keine Erkenntnisse mit in andere Gebiete mitnehmen kann.

Trotzdem wirst du mit Arduino am schnellsten Erfolge erziehlen. Eine LED rhythmisch blinken zu lassen dürfte selbst einem Anfänger mit Null Vorahnung nach spätestens 10 Minuten gelingen. Bei PICs dauert dieser Vorgang u. U. mehr als eine Woche, bis der erlösende Aha-Effekt auftritt!

Frage 5: Kann man alles mit C++ machen also kann man auch Klassen Methoden usw. benutzen und erstellen ?

Jein! Theoretisch ja, aber praktisch wirst du sehr schnell an Speicher- und Performance-Grenzen stoßen. Bei etwas größeren Embedded-Systemen sieht es zwar anders aus, aber Mikrocontroller sind wirklich im wahrsten Sinne des Wortes "Mikro", und da will man keine Virtuellen-Funktionen, wilde Klassenhierarchien, Ausnahmebehandlungen, Template-Bloat, usw. haben.

Dennoch: Es ist möglich, und bei Mikrokontrollern jenseits einiger KB Speicher und kleinem Programmumfang sehr wohl machbar. Ob das dann noch schön ist, ist Ansichtssache.

Trotzdem wirst du - wenn du mindestens eines der obigen beiden Bücher durch gearbeitet hast - vermutlich nicht mehr mit C++ arbeiten wollen, und stattdessen C bevorzugen.

C und C++ sind beides Werkzeuge, also wähle immer das, was am besten geeignet ist! Sich auf ein spezielles Lieblingswerkzeug zu versteifen, ist meist kontraproduktiv! Aber das nur am Rande ...

Falls du aber partout auf C++ bestehst, und dir Hard- und Software-Bloat nichts ausmachen, dann ist evtl. auch ein Raspberry-Pi etwas für dich. Das ist ein winzig kleiner "richtiger" Computer, mit USB-Anschlüssen, Netzwerk, HDMI, und zich Pins, die man frei programmieren kann. So ein Ding kannst du dann in C++ und sogar in Python oder gar Java programmieren, und damit LEDs blinken lassen oder die Selbstschussanlage an deiner Wohnungstür steuern. :)

Buchtipp RasPi: www.amazon.de/Raspberry-umfassende-Handbuch-Schnittstellen-Schaltungsaufbau/dp/3836237954/

Sowohl Arduino als auch RasPi richten sich beide mehr an Laien, als an Profis, obwohl auch erfahrene Anwender schicke Sachen damit bauen können.

Merk dir einfach: Je professioneller die Zielgruppe, desto effizienter, schneller, kleiner und billiger wird es werden. Aber zugleich auch komplizierter, frustrierender und zeitfressender.

Dennoch: Hat man sich daran gewöhnt, ist es immer angenehmer, mit Profi-Werkzeugen zu arbeiten.

Ich hoffe, dass ich keine Frage übersehen habe. Ansonsten noch eine Link-Emfpehlung:

http://www.mikrocontroller.net/forum

Schnupper dort ruhig auch mal in die anderen Kategorien, wie z. B. FPGA rein. Sehr interessant, und dort wird dir schneller und besser geholfen als hier auf GF!

Schönen Tag noch! ;)

Keine passende Antwort gefunden?

Fragen Sie die Community