Hallo, ich wollte Steuerungen entwickeln, die Sensordaten auswerten, mit Relais und PWM ansteuern, evtl. noch eine Netzwerkanbindung bieten. Erst wollte ich das mit dem ESP8266 bzw. ESP32 machen. Doch dann habe ich gelesen, dass der ATmega dafür besser geeignet wäre – schon alleine wg. dem Stromverbrauch. Dann fand ich irgendwann heraus, dass der Arduino auf dem ATmegas basiert. So stellt sich mir die Frage: Was ist besser? ATmega direkt programmieren, oder einen Arduino dafür nehmen. Von den I/Os wären beide gleich geeignet. Doch was sind die Vor- und Nachteile des ATmega oder Arduino? Welchen sollte man nehmen für meinen oben genannten Zweck? Programmieren würde ich gerne beide in C oder C++. Ich beherrsche beide Programmiersprachen, bin Informatiker. Zum ATmega habe ich folgendes rausgefunden: * Benötigt einen Programmierer. * Größere Auswahl an Chips als beim Arduino. Die Eigenschaften des Arduino sind: * Benötigt keinen Programmer. * Vielzahl an Bibliotheken, z.B. für Ansteuerung von Displays (vermutlich größere Auswahl an Bibliotheken, als für den ATmega). Meine Fragen wären: * Verbrauchen die ATmegas tendenziell weniger Strom als die Arduinos, wenn der gleiche Chip zu Grunde liegt? * Ist der Arduino langsamer als ein vergleichbarer ATmega? Vermutlich gibt es da noch mehr Fragen, die ich stellen könnte, wenn ich die entsprechende Erfahrung hätte. Daher möchte ich Euch darum bitten, mir hier kurz zu schreiben, was in dem Bezug wichtig wäre und worauf ich achten sollte. Ob ich den Arduino oder den ATmega nehmen sollte. Was die Vor- und Nachteile sind. Grüße Artur
Du kannst die Arduino-Bibliotheken auch auf dem atmega benutzen wenn mich nicht alles täuscht (vielleicht nur mit Arduino-Bootloader)
Kurz und knapp: den Prozessor direkt programmieren. Du lernst mehr und hast mehr Kontrolle über Geschwindigkeit und erzeugst keinen Overhead. Ausserdem - da du es richtig gelernt hast - kannst du auch schnell auf einen anderen Controller umsteigen. Arduino mag gut sein für Schüler, Hobbyisten die nicht tief einsteigen wollen und Bastelprojekte. Für alles andere macht man ein eigenes Board und programmiert den Controller direkt. Tutorials gibt es im Netz zu Hauft. Es gibt hier aber zwei Lager: Arduinoablehner und Befürworter.
Hardware: beim Arduino ist alles fertig auf einem Board. Das ist Vorteil und Nachteil zugleich. Schnell erste Version, aber weiter braucht’s dann zusätzliche Boards etc, mag ich persönlich nicht. Software: viel Libraries und Online Ressourcen, sehr schnell was zusammengefrickelt. Nachteil: zu gross, zu langsam, Bloatware, intransparent, mag ich nicht so sehr. Ich setze es immer nach Bedarf ein, mal ein schnelles Experiment Arduino und Software, mal nur das Board und aber direkt programmiert, mal alles selbst. Prototyp in Arduino zum Proof of Concept und dann nochmal neu stand-alone.
Nils N. schrieb: > Es gibt hier aber zwei Lager: Arduinoablehner und Befürworter. Und die Dritten, die sachlich nach Bedarf entscheiden :-)
Artur K. schrieb: > Meine Fragen wären: > > * Verbrauchen die ATmegas tendenziell weniger Strom als die Arduinos, > wenn der gleiche Chip zu Grunde liegt? Das hängt vom Board, also der Peripherie ab. Es gibt auch Arduino-kompatible Boards/Klone die für Low Power designed sind. Generell sind die meisten wohl nicht auf Low Power optimiert. Aber wenn Du selbst eine Platine machst braucht die Peripherie auch Strom. Nur wirst Du nur draufmachen was Du auch brauchst. Ein Arduino hat oft einiges an „Komfort“ drauf, dass Du vielleicht nicht brauchst. Und am Ende ist der Unterschied wahrscheinlich 20-40mA zwischen einem für den Zweck entwickeltem Board und 30-60 für ein Arduino Board, je nachdem was es für eines ist. Bei den meisten ist nicht so viel unnötiges drauf. > > * Ist der Arduino langsamer als ein vergleichbarer ATmega? Der Prozessor nicht, wobei es davon anhängt welches Quartz auf dem Board ist. Aber die Software ist tendenziell langsamer, weil das Ecosystem Arduino auf der Verfügbarkeit von vielen fertigen Libs basiert, die generell eher universell = aufwändiger gemacht sind. Beispiel Ansteuerung von Pins und PWM, da macht die Lib diverse Umschlüsselungen von Pinnummern usw, das macht es mindestens intransparent, wenn nicht weniger performant. Muss nicht immer so sein, ist aber Prinzipbedingt sehr wahrscheinlich, dass eine Lib langsamer ist als „direkt“.
Artur K. schrieb: > Doch was sind die Vor- und Nachteile des ATmega oder Arduino? Was sind die Vor- und Nachteile des i5 oder des Thinkpads? > Meine Fragen wären: > > * Verbrauchen die ATmegas tendenziell weniger Strom als die Arduinos, > wenn der gleiche Chip zu Grunde liegt? Ja, wenn du nur den Chip mit den ganzen Arduino vergleichst. Nein, wenn du die ganze Hardware, die auf dem Arduino schon drauf ist, mit einbeziehst. > * Ist der Arduino langsamer als ein vergleichbarer ATmega? Von der Hardware her: Nein. > Daher möchte ich Euch darum bitten, mir hier kurz zu schreiben, was in > dem Bezug wichtig wäre und worauf ich achten sollte. Ob ich den Arduino > oder den ATmega nehmen sollte. Was die Vor- und Nachteile sind. Du solltest unterscheiden zwischen der Arduino-Hardware (ATMega plus USB-Interface plus Spannungsregler plus Quarz und Kleinkram) und der Arduino-Programmierumgebung. Du kannst sowohl die Arduino-Hardware ohne die Arduino-Programmierumgebung programmieren (wie einen ganz normalen ATMega) als auch mit der Arduino-Programmierumgebung erstellte Programme auf einen nackten ATMega aufspielen. Ich bin kein großer Freund der Arduino-Programmierumgebung - sie ist IMHO (verglichen z.B. mit der avr-libc) relativ schlecht dokumentiert, und wenn man nach etwas konkretem sucht, was in der Doku nicht enthalten ist, findet man 1000 Blogs, die sowas ähnliches machen, aber die konkrete Frage nicht beantworten. Das hat wohl damit zu tun, dass die Umgebung sich an Anfänger richtet, die nicht mit bestimmten Informationen "belästigt" werden sollen (z.B. welchen Datentyp eine bestimmte Methode zurück gibt). Was die Arduino-Hardware angeht: Wenn du (ziemlich genau) das brauchst, was auf den Boards drauf ist, nimm sie. Wenn du eh Platinen machst, um den Arduino um zusätzliche Hardware zu erweitern, aber dann nichts von dem nutzt, was auf dem Arduino-Board mit drauf ist, dann kannst du auch gleich einen "nackten" ATMega einlöten. MfG, Arno
Arno schrieb: > Artur K. schrieb: > Ich bin kein großer Freund der Arduino-Programmierumgebung - sie ist > IMHO (verglichen z.B. mit der avr-libc) relativ schlecht dokumentiert, > und wenn man nach etwas konkretem sucht, was in der Doku nicht enthalten > ist, findet man 1000 Blogs, die sowas ähnliches machen, aber die > konkrete Frage nicht beantworten. Das hat wohl damit zu tun, dass die > Umgebung sich an Anfänger richtet, die nicht mit bestimmten > Informationen "belästigt" werden sollen (z.B. welchen Datentyp eine > bestimmte Methode zurück gibt). Da muss ich ziemlich zustimmen. Mit der Arduino Software, den Libs und Dokumentationen lernt man nicht ernsthaft programmieren. Den Einstieg erleichtern sie aber schon. Ich würde mich nach den ersten Experimenten dann mal um eine ernsthafte IDE kümmern. (IDE = integrated development environment)
Von meiner Sicht aus ein paar Hinweise: Für mich sind Pro-Minis die günstigste Bauform schlichthin. Wenn USB notwendig ist, ist der NANO natürlich auch von Interesse. Wenn Stromaufnahme ein Thema ist, löte ich beim Pro-Mini den Spannungsregler ab und den Vorwiderstand zum Power LED. Zusammen mit einen Optiboot Bootloader Ersatz für Watchdog Funktion verbraucht so eine Platine im Schlafzustand unter 1uA. Von den Arduino Libs verwende ich meist nur die EEPROM und UART Funktion. Alles andere mache ich direkt in herkömmlicher Register Konfigurierung Manier. Das ist ein guter Kompromiss weil diese Libraries für mich ausreichend gut funktionieren. So grottenschlecht ist das Arduino IDE auch wieder nicht. Wenn auch nicht mit professionellen Features ausgestattet erfüllt es den ihm zugestandenen Zweck durchaus. Für meine Zwecke reicht das meist aus. Für total von Arduino unabhängige Projekte nehme ich CodeVisionAVR der auch den Bootloader unterstützt. Unabhängiger AVR-GCC ist natürlich auch kein Thema. Die Pro-Mini Bords sind mir am liebsten weil sehr billig und immer auf Vorat im "Zehner Pack" erstehe. Ich achte immer darauf nur eine gewisse Version zu kaufen die noch einen TQFP uC hat und einen HC-49 Quarz besitzt den man dann für Spezialzwecke leicht gegen andere Frequenzen auswechseln kann und die A4-7 Pins immer an der selben Stelle liegen. Die Resonatoren auf den anderen Bords läßt sich viel zu schwer auswechseln. Auch hat man dann sehr viel mehr Auswahl in Qualität. Abgesehen davon ist es angenehm wenn die Anschlüsse für A4,5,6,7 immer an der gleichen Stelle liegen. Oft verwende ich diese Pro-Mini Bords als Einsteckmodule in einer Hauptplatine und da ist es angenehm wenn die Pin Zuordnungen konsistent sind. Für Projekte mit SD Card und FAT32 nehme ich lieber eine Eigenbauplatine mit dem ATMEGA1284P der dafür wegen der reicheren Ressourcen besser geignet ist. Beim 328 verbraucht das FAT schon viel Platz. Auch wäre der AT328PB eine viel bessere Lösung für viele Projekte weil der 4 mehr Pins hat und ein zweites UART, I2C und SPI hat. Ich verstehe wirklich nicht warum der 328PB und besser der ATMEGA1284P, immer noch nicht der uC "of Choice" für die Arduino Platform geworden ist. Soviel mehr kostet der 1284P auch nicht im Hobbybereich. LCDs betreibe ich grundsätzlich nur über I2C um kostbaren IO zu sparen. Auch verwende ich gerne IO-Expander um die Alternate Function Pins zu reservieren. Ein Nachteil der Normalen Pro-Minis ist, dass AVREF nicht gut zugänglich ist, da ich manchmal lieber meine eigenen Spannungsreferenzen anschliessen will. Falls von Interesse: Ich habe mir übrigens meine eigenen Pro-Minis mit dem 1284P und 328PB entwickelt mit 40 und 32 Pins. muß sie aber erst machen lassen. Ich habe dann noch eine Huckepack Platine mir RTC, UPS und uSD für Datenlogging Projekte entworfen. Für diese Familie von Bords habe ich noch eine Universell Anschlussplatine entwickelt die alle Pro-Mini, NANOS, und meine eigenen Versionen einstecken lassen. Drauf ist noch ein 5V/3A Schaltregler für 10-32VDC Eingangsspannung, I2C Port, ICSP Schnittstelle und Schraubanschlüsse für die IO Pins. Wenn alles in Ordnung ist und Interesse da wäre, stelle ich die Design Files hier herein sobald ich die Designs getestet habe. Auf dieser Hauptplatine kann man auch direkt mit einem Programmiergerät den Bootloader oder normal bequem Flashen.
Wenn wir schon bei konkreten Boards sind, ich nehme gerne die Pro Micro Klone von Sparkfun oder anderen. Sehr günstig, sehr kompakt, nur das nötigste drauf, per USB programmierbar (weil m32u4 Prozessor), aber auch über die Pins direkt, mach ich mal so, mal so. So klein, dass man ihn als Basis aufs Breadboard stecken kann und ein Funkmodul daneben. Siehe erstes Foto, Prototyp einer Funk-Heizungssteuerung. Aus Pro Micro, Funkmodul auf Breadboard-Adapter und Opamp. Am Pro Micro mein Programmieradapter, der ihn direkt programmiert, ohne USB. Hier war die Software auch mit den eigenen Libs in Eclipse gemacht, als Vorbereitung der finalen Version. Und ein Foto der dann später dafür erstellten Platine, die ist jetzt in Einsatz.
Arduino scheint dann für mich einen unnötigen Zwischenschritt darzustellen. Besser gleich direkt die AVRs programmieren. Warum ich auf Arduino kam, waren die verfügbaren Libs. Ich möchte z.B. das TFT Display mit dem ILI9340C Controller ansteuern. Libs finde ich nur für den Arduino. Gibt es keine Libs, die den ILI9340C Controller ansteuern, die für die Atmel AVRs entwickelt wurden? Das Diesplay wird über SPI mit dem Mikrocontroller angebunden.
Arno schrieb: > Das hat wohl damit zu tun, dass die > Umgebung sich an Anfänger richtet, die nicht mit bestimmten > Informationen "belästigt" werden sollen Ich kann nicht glauben, dass irgendjemand dich daran hindern würde, die Doku zu verbessern. Und sehe auch keine unterschlagenen Rückgabetypen. Arno schrieb: > sie ist > IMHO (verglichen z.B. mit der avr-libc) relativ schlecht dokumentiert, Die avr-libc steht vollständig unter Arduino zur Verfügung. Man kann sich auch durchaus darauf beschränken. Es besteht keinerlei Notwendigkeit die Arduino "Features" zu nutzen. Ansonsten gilt die C++ Sprachreferenz. Aktueller Stand C++11 (C++14 aktivierbar) Und natürlich die Datenblätter der Komponenten. Das sollte für den Anfang genug Lesestoff sein. Die meisten Libs kommen von Fremdanbietern. Deren Qualität/Doku muss man jeweils im konkreten Einzelfall betrachten. Das kann man nicht verallgemeinern.
Artur K. schrieb: > Arduino scheint dann für mich einen unnötigen Zwischenschritt > darzustellen. Oder, wie gesagt, als praktische Ergänzung. > Besser gleich direkt die AVRs programmieren. > > Warum ich auf Arduino kam, waren die verfügbaren Libs. Ja, kommt aber mit einem Preis. Viele Libs sind nicht so super. Ist oft wie bei den Lösungen im Raspberry Pi Ökosystem ziemlicher Frickelkram. > Ich möchte z.B. das TFT Display mit dem ILI9340C Controller ansteuern. > Libs finde ich nur für den Arduino. > > Gibt es keine Libs, die den ILI9340C Controller ansteuern, die für die > Atmel AVRs entwickelt wurden? Das Diesplay wird über SPI mit dem > Mikrocontroller angebunden. Man kann Arduino Libs auch auf neutral umbauen, wenn sie gut gemacht sind. Oder einfach als Doku für den eigenen Ansatz verwenden, wenn sie nicht so gefallen.
Einen ISP Programmieradapter würde ich mir ohnehin zulegen, denn die billigen Arduino Module aus China kommen manchmal ohne vorinstalliertem Bootloader. Und dann brauchst du den ISP Programmieradapter. Die kosten ja auch nicht viel. Ab 2 Euro ist man dabei, wenn es nicht stört, dass sie nur für 5V geeignet sind. Manche haben einen Jumper zum Umstellen auf 3V aber das betrifft nur die Versorgungsspannung, nicht die Signale - ist insofern Quatsch. Vielleicht werden sie deswegen fast verschenkt.
Stefan U. schrieb: > Einen ISP Programmieradapter würde ich mir ohnehin zulegen, denn die > billigen Arduino Module aus China kommen manchmal ohne vorinstalliertem > Bootloader. Und dann brauchst du den ISP Programmieradapter Ein zweiter Grund ist den Bootloader gegen einen Optiboot BL auszuwechseln damit der Watchdog mit dem BL wieder funktioniert. Die Pro-Minis mit dem Original BL die ich immer bestelle hängen sich beim WD Reset immer auf.
Conny G. (conny_g) >Da muss ich ziemlich zustimmen. Mit der Arduino Software, den Libs und >Dokumentationen lernt man nicht ernsthaft programmieren. Das sehe ich ein wenig anders: Man kann, wenn man's kann. Man kann nicht, wenn man's nicht kann. Ich habe schon für sehr viel Geld auf einem Arduino Software geschrieben, es hängt immer vom Anwendungsfall ab. Diese pauschale Aussgae "man kann damit nicht ernsthaft programmieren" ist Käse und eher ein Ausdruck von Mittelmäßigkeit. Und im Falle von Arthur würde ich sagen: spezifiziere mal Deine Anforderungen an Speicherverbrauch und Geschwindigkeit genauer. Dann kann man sehen, was der geeignete Weg ist.
Manfred schrieb: > Man kann, wenn man's kann. Man kann > nicht, wenn man's nicht kann. Wer will, findet Wege. Wer nicht will, findet Gründe.
Manfred schrieb: > Conny G. (conny_g) >>Da muss ich ziemlich zustimmen. Mit der Arduino Software, den Libs und >>Dokumentationen lernt man nicht ernsthaft programmieren. > > Das sehe ich ein wenig anders: Man kann, wenn man's kann. Man kann > nicht, wenn man's nicht kann. > > Ich habe schon für sehr viel Geld auf einem Arduino Software > geschrieben, es hängt immer vom Anwendungsfall ab. > > Diese pauschale Aussgae "man kann damit nicht ernsthaft programmieren" > ist Käse und eher ein Ausdruck von Mittelmäßigkeit. > > Und im Falle von Arthur würde ich sagen: spezifiziere mal Deine > Anforderungen an Speicherverbrauch und Geschwindigkeit genauer. Dann > kann man sehen, was der geeignete Weg ist. Ich sagte, damit lernt man es nicht (gut). Wenn man es kann, bekommt man mit dem Arduino auch gute Dinge hin. Das ist wie die Diskussion PHP (oder auch JavaScript) sei pauschal Schrott ggü Java, weil es keine konsistente stark typisierte etc Programmiersprache sei. Aber wenn ich guter Entwickler bin, kann ich mit PHP solide Dinge tun. Wenn ich es aber nicht kann, lerne ich nicht notwendigerweise guten Stil damit, weil es einiges nicht von Grund auf erzwingt. Genauso ist es mit Arduino IDE und Libs auch.
Arduino F. schrieb: > Arno schrieb: >> Das hat wohl damit zu tun, dass die >> Umgebung sich an Anfänger richtet, die nicht mit bestimmten >> Informationen "belästigt" werden sollen > > Ich kann nicht glauben, dass irgendjemand dich daran hindern würde, die > Doku zu verbessern. Und sehe auch keine unterschlagenen Rückgabetypen. Zum Beispiel hier: https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/ Sind HIGH und LOW magische Bezeichnungen für true und false? Für 0 und 1? Für 17 und 4? Oder - das Beispiel weist den Rückgabewert einem vermutlich 16bittigen Integer zu - für -32768 und 32767? Wenn ich den Zustand eines Pins speichern will wie es z.B. PeDa in seinen Entprell-Routinen macht, was brauche ich dann mindestens für einen Datentyp? Warum steht da nicht "bool digitalRead(uint8_t pinNumber)" oder meinetwegen "pinValue digitalRead(pinDesignation pinNumber)" mit Links, die zur Definition von pinValue und pinDesignation führen? Dann kann man sich den größten Teil des Textes auf der Seite sparen. Klar kann ich im Quelltext nachsehen, mir einen github-Account zulegen und die Doku anpassen. Ich kann es aber auch lassen und die Zeit für mein Projekt verwenden - oder damit, mich hier über Arduino zu ärgern ;) und andere zu informieren, wo ich die Schwachstellen sehe. > Arno schrieb: >> sie ist >> IMHO (verglichen z.B. mit der avr-libc) relativ schlecht dokumentiert, > Die avr-libc steht vollständig unter Arduino zur Verfügung. > Man kann sich auch durchaus darauf beschränken. Es besteht keinerlei > Notwendigkeit die Arduino "Features" zu nutzen. Klar, dann kann ich aber auch die ganze Arduino-Umgebung weglassen. MfG, Arno
> ich wollte Steuerungen entwickeln, die Sensordaten auswerten, mit Relais > und PWM ansteuern, evtl. noch eine Netzwerkanbindung bieten. Wenn ich für die .. Netzwerkanbindung mit der seriellen Schnittstelle auskomme so geht Arduino schon sehr gut. Sensordaten auswerten und Relais ansteuern wird nicht sehr schnell notwendig sein (10 ms ???) Arduino Vorteil -- man kommt schnell zu Ergebnissen. ... und der Quellcode ist nahezu Prozessorunabhängig wenn man die Bibliotheken verwendet.
Arno schrieb: > Sind HIGH und LOW magische Bezeichnungen für true und false? Für 0 und > 1? Für 17 und 4? Oder - das Beispiel weist den Rückgabewert einem > vermutlich 16bittigen Integer zu - für -32768 und 32767? Wenn ich den > Zustand eines Pins speichern will wie es z.B. PeDa in seinen > Entprell-Routinen macht, was brauche ich dann mindestens für einen > Datentyp? Wie gesagt... Ändere es, wenn es dir nicht passt. Und wie es geht, weißt du ja, wie ich sehe. HIGH und LOW sind übrigens in der Referenz aufgeführt https://www.arduino.cc/reference/en/ Genauer: https://www.arduino.cc/reference/en/language/variables/constants/constants/ Dort ist das Verhalten beschrieben. (aber soweit bist du beim lesen offensichtlich noch nicht gekommen) Arno schrieb: > oder damit, mich hier über Arduino zu ärgern ;) Wenn es dir Spaß macht.... Aber es darum anderen schlecht reden, naja. -- Irgend wie seltsam, dass du dich so von HIGH und LOW so dermaßen verwirren lässt.... Mein Tipp: Verwende bool als Datentype, wenn du Dinge verwendest die sich wie Boolean verhalten sollen.
Ihr könnt die Diskussion auch einfach sein lassen. Die Erfahrung zeigt, dass dogmatische Diskussionen zu keinem Ergebnis kommen. :-)
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.