Hallo
Ich muss demnächst eine kleine Steuerung auf Mikrocontrollerbasis
entwickeln.
Meine Erfahrung mit Mikrocontroller sind eher dürftig. Schaltung und
Layout bekomme ich hin, bei der Programmierung habe ich noch wenig
Erfahrung.
Die Frage ist jetzt ob ich mich in einen Atmega oder Pic einarbeiten
soll oder doch gleich einen STM32 nehme, der vom Peis ja ähnlich liegt
aber deutlich mehr Leistung bietet. So wie es aussieht komme ich
leistungsmässig auch mit einem normalen 8bit Controller hin aber wer
weiss was zukünftig kommt und wenn ich mich schon in die Eigenheiten
eines Controllers einarbeiten muss warum dann nicht gleich in einen bei
dem ich weiß dass er auch bei zukünftigen Aufgaben genug Performance
bietet....
Was sagt ihr dazu, ist es für einen Neuling schwerer sich mit einem
STM32 zurechtzufinden als mit einem 8bit AVR? Oder unterscheiden sich
die Controller bei der Programmierung gar nicht so wesentlich?
Falls ihr es für sinnvoll haltet gleich mit einem STM32 zu starten wäre
ich auch für Literaturempfehlungen dankbar.
Danke für eure Antworten.
Fang lieber klein an. Für AVR gibts hier auf der Seite ein nettes
übersichtliches Tutorial. Für STM32 wirst du Vergleichbares wohl
vergeblich suchen.
Wer sich zum ersten Mal auf ein Zweirad setzt, der sollte auch nicht
gleich am dicken Ende der Motorrad-Skala anfangen, sondern es mit einem
Fahrrad probieren.
Ich halte es für genauso unsinnig, für ganz einfache Aufgaben einen
STM32 einzusetzen, wie es unmöglich ist, für komplexe und
hochperformante Aufgaben einen ATtiny oder einen kleinen PIC zu
verwenden.
Am besten du findest erst einmal heraus, welche Anforderungen genau
vorhanden sind und wählst auf dieser Grundlage die entsprechende
Mikrocontroller-Architektur!
Wenns dir allein ums Thema geht, wenn du ein oder zwei erste Gehversuche
mit einem Mikrocontroller machen willst, dann ist das Tutorial, das dir
A. K. schon empfohlen hast, ausgezeichnet.
http://www.mikrocontroller.net/articles/AVR-Tutorial
Wirklich gut lernst du einen Mikrocontroller übrigens nur in Assembler
kennen. Genau darauf setzt auch das Tutorial.
Als Einstiegs-Mikrocontroller reicht so ein billiger ATtiny13. Wenn du
den verstanden hast, kannst du auf jeden anderen wechseln, auch auf eine
andere Architektur, wie z.B. PIC. Die Prinzipien sind immer wieder die
gleichen.
Markus W. schrieb:> Als Einstiegs-Mikrocontroller reicht so ein billiger ATtiny13.
Ich halte es auch für sinnvoller mit einem AVR zu beginnen. Allerdings
würde ich dir doch zu einem etwas größerem Controller als dem Tiny13
raten. Ansonsten wunderst du dich beim durcharbeiten des Tutorials
irgendwann wiso der UART nicht wie im Tutorial beschrieben funktioniert.
Ich würd eher etwas in der Größe eines Atmega644 oder des guten ALTEN
Atmega8 verwenden, wenn du beabsichtigst das Tutorial hier
druchzuarbeiten.
lg much
Roland schrieb:> Was sagt ihr dazu, ist es für einen Neuling schwerer sich mit einem> STM32 zurechtzufinden als mit einem 8bit AVR? Oder unterscheiden sich> die Controller bei der Programmierung gar nicht so wesentlich?
Wenn Du in C programmieren willst, macht es kaum einen Unterschied. In
die µC-Spezifik musst Du Dich sowieso einarbeiten, egal ob AVR oder
STM32. Für AVR ist viel Literatur und Web auf deutsch verfügbar. Bei
STM32 solltest Du in Englisch fit sein. Für beide gibt es unzählige
EVA-Boards und Entwicklungssoftware, auch viele kostenlose Tools.
Letztlich bleibt es Deine Entscheidung.
Matthias K. schrieb:> Wenn Du in C programmieren willst, macht es kaum einen Unterschied.
Doch, in der Dicke vom Handbuch. Da ist der Unterschied gewaltig. Und
obwohl die Reference der STM32 viel dicker ist als das Datasheet eines
AVR, werden beim AVR nicht nur die Bits aufgelistet, sondern auch
teilweise der Umgang erklärt. Beim STM32 eher nicht.
Michael N. schrieb:> Ansonsten wunderst du dich beim durcharbeiten des Tutorials> irgendwann wiso der UART nicht wie im Tutorial beschrieben funktioniert.> Ich würd eher etwas in der Größe eines Atmega644 oder des guten ALTEN> Atmega8 verwenden, wenn du beabsichtigst das Tutorial hier> druchzuarbeiten.
Du hast Recht, das hatte ich nicht bedacht. Ich selber hab mit dem
ATtiny13 angefangen, aber das Tutorial nicht ganz durchgearbeitet. Dann
nimmt man wirklich am besten den alten ATmega8 oder einen größeren dazu
kompatiblen, z.B. den ATmega328.
Der ATmega644 hat mehr Speicherplatz, ist aber nicht pinkompatibel zum
ATmega8. Könnte zu ähnlicher Verwirrung kommen wie beim ATtiny13, wenn
man das Tutorial das erste Mal buchstäblich durcharbeitet.
Roland schrieb:> Was sagt ihr dazu, ist es für einen Neuling schwerer sich mit einem> STM32 zurechtzufinden als mit einem 8bit AVR? Oder unterscheiden sich> die Controller bei der Programmierung gar nicht so wesentlich?
Ich empfehle Dir den Einstieg mit einem PIC. Und zwar aus folgendem
Grund:
1. Breite Produktpalette
PICs gibts von ganz klein 8 Bit 6 Pin bis ziemlich groß 32 Bit 100 Pin
80 MHz. Alle aktuellen Bausteine kannst Du mit einer einzigen
Debugger-Hardware (PicKIT3 für 50€) programmieren und debuggen. Die
Entwicklungsumgebungen von Microchip (MPLAB 8 und MPLAB X, ich würde
erstmal noch die 8'er Version nehmen, die X ist noch sehr neu) sind für
alle Bausteine identisch, nur die Compiler (C18, C30 und C32 von
Microchip, die Lite-Versionen bekommst Du dort kostenlos) musst Du Dir
für 8 Bit, 16 Bit und 32 Bit jeweils separat nachinstallieren, je
nachdem, womit Du arbeiten willst.
Heißt also: mit einmal Einarbeitung hast Du viel mehr Möglichkeiten.
Die 8 Bitter (PIC18F...) sind leistungsmäßig etwa mit den AVRs
vergleichbar, die 16 Bitter sind durchschnittlich etwa Faktor 3-4
schneller (aber nicht teurer als entsprechende AVRs), und die PIC32 sind
in der gleichen Größenordnung wie die STM32.
2. Debugfähigkeit auch bei kleinen Prozessoren
Bei den AVRs kannst Du die kleinen Chips (z.B. Atmega8 oder Tiny2313)
nur programmieren (sprich den Code hineinladen), aber nicht debuggen
(sprich während des Betriebs in den Chip reinschauen, Einzelschritte
ausführen, Speicher und Register anschauen etc). Bei Microchip kannst Du
auch die kleinsten Chips per Zweidraht ICSP programmieren UND debuggen.
Das macht die Sache am Anfang sehr viel einfacher und spart später Zeit.
Andere Leute mögen hier anderer Meinung sein, aber ICH möchte darauf
nicht verzichten. Plus: Für den Debugger musst Du nur 2 Pins
reservieren. Bei AVR sinds 3 (ISP) oder 4 (JTAG), bei ARM mindestens 4
(JTAG) oder bei den Cortex-Dingern auch 2 (SWD). Bei kleinen Gehäusen
ist das schon praktisch.
3. Einheitliche Tools
Ich habe schon eine Menge Entwicklungsumgebungen und deutlich mehr als
ein Dutzend verschiedener Architekturen in den letzten 30 Jahren in den
Fingern gehabt. Ich denke, dass ein Anfänger mit den Microchip-Sachen
schneller Erfolgserlebnisse haben wird, weil eben alles aus einer Quelle
kommt und nahtlos ineinander greift. Woanders (z.B. bei ARM) hast Du
einen Chip vom Hersteller A, ein JTAG-Modul von Hersteller B, eine
Entwicklungsumgebung von C, Compiler von D und Bibliotheken (z.B. ein
TCP/IP-Stack) von Anbieter E und ein Evalboard von F. Wenn Du mit PIC
hantierst, ist A=B=C=D=E=F=Microchip, und Du hast nicht das Problem,
verschiedene Sachen von verschiedenen Herstellern unter einen Hut zu
bekommen. Mit etwas Erfahrung sind die meisten Probleme schnell zu
lösen, aber ohne Erfahrung stehst Du auf dem Schlauch.
4. Vielfältige Peripherie
Microchip hat etwas über 900 verschiedene Controller im Programm, d.h.
da findet sich fast immer etwas passendes, egal ob Du CAN, LIN, USB oder
Ethernet oder einen LCD- oder TFT-Controller brauchst. Und: Microchip
hat bislang noch nichts abgekündigt, Du kannst selbst die alten
OTP-Typen von 1981 (PIC16C54, damals noch von General Instruments) noch
kaufen.
Ich würde mit einem PIC24 anfangen, der ist einfach und billig und
trotzdem für die meisten Sachen mehr als ausreichend. Wenn Du Papierware
brauchst:
http://www.amazon.de/Programming-16-Bit-PIC-Microcontrollers-Learning/dp/1856178706
bzw für PIC32http://www.amazon.de/Programming-32-Bit-Microcontrollers-Exploring-Technology/dp/0750687096
Die Bücher sind durchaus brauchbar.
fchk
Ich habe mich diese Woche um einige Boards mit LPC1768/9 und STM32
gekümmert die ich so aus Neugier gesammelt hatte. Die 32 Bitter reizen
natürlich wg. deutlich mehr Power und Speicher. Klar, es gibt die AVR
auch mit viel Speicher, vielen Ports und viel Takt, aber dann sind die
Chips auch teuer und oft teurer als 32 Bitter.
Aber AVR und ARM sind eben wie Apfel und Birne, wenn du wissen willst
wie Birne schmeckt brauchst du keinen Apfel zu probieren... Irgendwie
sind µCs ähnlich, aber du wirst deine Zeit an kleinen Details verbraten,
und die Fehler und Fallstricke sind alle µC spezifisch: da nutzt es nix
wenn du AVR gut kennst und dann dein ARM sich nicht mehr flashen lässt
weil du die PLL strubbelig konfiguriert hast. Oder du bist ARM Profi
aber an deinem Mega32 funktioniert PortC nicht wie erwartet weil eine
Fuse falsch gesetzt ist.
Also wenn konkrete Aufgaben zu lösen sind würde ich für neue Projekte
auf Cortex M3 setzen und mit AVR nur anfangen wenn es wirklich einfache
Steuerungen sein sollen oder der letzte ct in der Produktion gespart
werden muss.
Die Frage ist, willst Du Deine Aufgabe schnell bewältigen oder ist das
Thema längerfristig von Interesse. Im Eingangsposting liest sich das
eher wie eine Pflichtaufgabe. Wie viele Jahre Erfahrung in
SW-Entwicklung liegen vor? Macht diese Tätigkeit Spaß?
Im ersten Falle ist man für die genannte Aufgabe mit AVR attiny/atmega
oder PIC vermutlich am besten bedient, da dort eher die Dinge aus einer
Hand kommen, Arduino ist auch eine Option. Ich würde mir aber nach dem
Abschluß des Projektes nochmals sehr genau überlegen wie es weitergeht.
Manche tun sich sehr schwer damit, später das Pferd zu wechseln.
Im anderen Falle würde ich sagen, es ist egal, welchen 32-Bitter Du
nimmst, Hauptsache Du programmierst diesen mit C++ und Deine "IDE" heißt
"make". Und im Falle von STM32 machst Du einen weiten Bogen um die
Library.
Meine "Lehrzeit" begann zeitgleich mit attiny/atmega/atxmega und
STM32F1. Beides hatte seine Tücken, unter dem Strich war es der gleiche
Aufwand. Den Rückstand beim "Compiler besorgen" hat der ARM bei den
"Fuses", "boot loader" und PROGMEM wieder eingeholt.
Was längerfristig bei AVR mit GCC nervt, ist das PROGMEM-Gebastel. Mal
kurz einen AVR GCC kompilieren geht auch nicht.
Bei ARM Cortex gibt es eine riesige Auswahl, die PIC32 gibt es auch in
DIP und mit Pinguino. Renesas RX ist auch OK, leider sind mir keine
günstigen Einstiegsmodule bekannt. Wenn man im beruflichen Umfeld mit TI
MSP430 zu tun haben wird, ist das auch eine Überlegung wert (auch wenn
"nur" 16-Bit). Lassen sich alle wunderbar mit dem freien GCC ohne
herstellerspezifische IDEs bedienen.
Hier der Artikel STM32
Mit den groben Infos und vielen Links, auch Bezugsquellen.
Uneingeschränkt empfehlen kann ich den jetzt nicht für einen
Neueinsteiger. Wenn jetzt noch Ethernet, USB und komplexe schnelle
Regelungen geplant sind, dann braucht es wohl einen STM32 (Cortex-M3
oder Cortex-M4).
Der große Vorteil vom STM32 ist die gute Möglichkeit für Upgrade auf
mehr Flash, mehr Geschwindigkeit und mehr Peripherie, da STM32F1xx
nahezu Pinkompatibel mit dem STM32F4xx ist.
Den STM32 programmiert man in der Regel nur in C. Geht zwar auch in
Assembler, ist aber nicht wirklich einfach. Daher sind Assembler
Kenntnisse die man mit einem AVR gewinnt nicht unbedingt wichtig.
Sollte das ganze beruflich genutzt werden, dann sollte man gleichen
einen STM32 nehmen. Hier gab es schon diverse Threads, in denen die
Verfügbarkeit von Atmel Prozessoren bemängelt wurden.
Roland schrieb:> Ich muss demnächst eine kleine Steuerung auf Mikrocontrollerbasis> entwickeln.
Ist das eine kommerzielle Entwicklung mit Stückzahlen und langer
Verfügbarkeit ?
Wird es weitere Entwicklungen geben ?
Ist es ein Einzelstück für den privaten Gebrauch , dann nimm dir einen 8
Bitter, egal ob AVR, PIC oder 8051.....
Das wird schneller und einfacher gehen.
Wird eine eine kommerzielle Entwicklung musst du sehen das du den
ausgesuchten Chip über die komplette Nutzungszeit der Schaltung
nachgeliefert bekommen kannst.
Also kein Bastlerchip, sondern einen aus den Industriellen, oder
Automotive Varianten aussuchen. Da wird die Luft bei den 8 Bittern schon
etwas dünner.
Wird es in Zukunft weitere Schaltungen geben, die eventuell einen
deutlich größeren Leistungsbedarf haben ?
Nimm direkt einen Cortex Mx. Hier bist du flexibler in der Auswahl der
Leistungsklasse (Preis), ohne für jede Schaltung dann eine neuen
Umgebung zu kaufen und wieder neu zu lernen wie der Chip funktioniert /
programmiert wird.
Außerdem lassen sich Softwarefunktionen leichter von einem Chip auf den
anderen übertragen da es die gleiche Architektur ist.
Einarbeitungsaufwand ist bei den Cortex etwas größer, weil diese einfach
mehr Möglichkeiten bieten. Steht aber später ein Umstieg an ( wegen
größeren Leistungsbedarf) macht es durchaus Sinn direkt mit Cortex
anzufangen und dieses Einarbeiten nicht 2 mal zu machen.