Forum: Mikrocontroller und Digitale Elektronik Weiß jemand, was für ein Atmega-Board das ist?


von tim (Gast)


Lesenswert?

Hi,
habe hier ein Atmega-Board mit Atmega328P drauf (32 TQFP), außerdem 
Mikro-USB-Buchse und auf der Unterseite ein CH340G-Chip.
Dazu ein Reset-Taster, ein AMS1117 und ein bisschen Hühnerfutter.

Maße:
ca. 43mm x 12mm

Ich vermute, es ist ein Arduino-Klon. Wenn ja, weiß jemand, welcher?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arduino Nano

Mikro-USB, nicht Mini? Die Nano-Clones, die wir hier rumliegen haben, 
haben Mini-USB.

: Bearbeitet durch Moderator
von Jack V. (jackv)


Lesenswert?

Du hast leider das Bild vergessen.

Der Beschreibung nach kann’s ein simpler Nano(-Clon) sein.

von tim (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist das Bild.

Jörg W. schrieb:
> Mikro-USB, nicht Mini? Die Nano-Clones, die wir hier rumliegen haben,
> haben Mini-USB.

Stimmt, es ist Mini-USB!

von Jack V. (jackv)


Lesenswert?

Ja, das ist ein Nano-Clon. Hab damit noch keine Probleme gehabt. Wenn 
man sie unter/als Arduino nutzen will, muss man ggf. noch den Bootloader 
drauftun. Das Hex-File findet man unterhalb des 
Installationsverzeichnisses der IDE.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Auf unseren Clones ist der Bootloader drauf, aber man muss in der 
Arduino-IDE "old Bootloader" (oder so ähnlich) auswählen.

von tim (Gast)


Lesenswert?

Prima, Danke!
Wenn es sich nicht aktivieren lässt, melde ich mich hier noch mal.

von Einer K. (Gast)


Lesenswert?

Wenn man da schon dran muss, ans Bootloader brennen, dann:

Ich rate dazu, den Nano zum UNO umzuflashen.
Dann hat man etwas mehr Flash für Programme, als in der Nano 
Konfiguration.

von tim (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich rate dazu, den Nano zum UNO umzuflashen.
> Dann hat man etwas mehr Flash für Programme, als in der Nano
> Konfiguration.

Danke für den Tipp! :)

von Maxim B. (max182)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich rate dazu, den Nano zum UNO umzuflashen.

Noch besser 6-Pin-Stecker einlöten und einfach auf C. Dann hat man noch 
mehr Platz für Programm.

von Einer K. (Gast)


Lesenswert?

Maxim B. schrieb:
> Noch besser 6-Pin-Stecker einlöten ...
Natürlich hast du aus deinem Blickwinkel vermutlich recht wahr!

Allerdings, bedenke:
Um den Bootloader zu flashen, muss man den Stecker auch einlöten.
Es ist also kein irgendwie geartetes "besser", sondern in beiden Fällen 
eine Notwendigkeit.

Oder:
Ob es in Sachen Nano ein "besser" zwischen C und C++ gibt?
Abgesehen, von irgendwelchen individuellen Vorlieben....

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Ob es in Sachen Nano ein "besser" zwischen C und C++ gibt?

Zumal C vs. C++ sowieso völlig unabhängig davon ist, ob man nun den 
Bootloader benutzen will oder einen externen Programmer.

Was den Arduino-Code sicher ein Stück aufbläht ist nicht das C++, 
sondern die Abstraktionsschichten für die Hardware, also digitalWrite() 
und all sowas. Das ist halt der Preis für die einfache Portierbarkeit 
des Codes zwischen den diversen Hardware-Plattformen. Muss man ja aber 
nicht nehmen, wenn man nicht will - auch in C++ muss man das nicht. ;)

von Wolfgang (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Um den Bootloader zu flashen, muss man den Stecker auch einlöten.

Das ist doch Unfug. Wozu wurden Federkontaktstifte erfunden?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Das ist doch Unfug.

Könntest du ggf. in Zukunft eine freundlichere Wortwahl treffen?

"Das ließe sich mit Federkontaktstifen auch anders erreichen." hätte 
beispielsweise das gleiche ausgedrückt, nur viel freundlicher. (Davon 
abgesehen, dass nicht jeder sowas zur Hand hat.)

von Einer K. (Gast)


Lesenswert?

Wolfgang schrieb:
> Wozu wurden Federkontaktstifte erfunden?
Dann nimm sie...

von spess53 (Gast)


Lesenswert?

Hi

<Dann nimm sie...

Die einzig sinnvolle Anwendung ist das Recyling des AVRs. Wozu den ca. 
achtfach größeren Platz verschwenden. Für nichts.

MfG spess

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:
> Wozu den ca. achtfach größeren Platz verschwenden.

Wozu basteln sonst Leute gern mal schnell was auf Lochraster, wenn man 
doch die SMD-Bauteile auch gleich auf eine viel kleinere Platine setzen 
könnte?

Richtig: es geht einfacher für einen Prototypen.

Ist ja nun nicht so, dass Arduino(-Klone) die einzigen derartigen 
Breakout-Boards auf der Welt wären … auch für andere Hardware ist sowas 
zuweilen ganz praktisch.

(Der zweite Vorteil ist natürlich der Bootloader und die im Betrieb 
einfach angebundene serielle Schnittstelle über den CH340.)

von spess53 (Gast)


Lesenswert?

Hi

>Richtig: es geht einfacher für einen Prototypen.

Und bei wie vielen bleibt es dabei?

>Der zweite Vorteil ist natürlich der Bootloader

Wo ist da ein Vorteil? Ich mag die freie Wahl der Taktfrequenz.

MfG Spess

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich rate dazu, den Nano zum UNO umzuflashen.
> Dann hat man etwas mehr Flash für Programme, als in der Nano
> Konfiguration.

oder man erweitert die boards.txt und der nano bleibt nano.

Hast ja letztens was geschrieben, auch wie man das anstellt ohne die 
boards.txt zu ändern.
Mist ich habe den Link verlegt

Maxim B. schrieb:
> Noch besser 6-Pin-Stecker einlöten und einfach auf C. Dann hat man noch
> mehr Platz für Programm.

hatte ich früher auch gemacht, aber eine 6 Pin Stiftleiste mit Druck 
gehalten tuts auch, die 6 Pins braucht man ja nicht oft, aber sie nerven 
wenn sie eingelötet sind, also es geht auch ohne einlöten.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:

>>Richtig: es geht einfacher für einen Prototypen.
>
> Und bei wie vielen bleibt es dabei?

Selbst wenn: was ist schlimm daran?

Hatten wir doch gerade „nebenan“, beim Kinderspielzeug: es braucht nur 
jemand eine möglichst einfache Lösung. Er will weder ausgiebig 
Elektronik noch Mikrocontroller lernen, noch hat er irgendeinen Fundus 
in der Bastelkiste, aus dem er schöpfen kann. Aber einen 
Arduino-Nano-Clone konnte er auftreiben, die IDE dazu installieren, und 
man kann ihm ohne irgendwelche großen Aufwände schnell via Forum sein 
Problem lösen.

Nun kann er sich immer noch entscheiden, ob die Lösung so für ihn 
zufriedenstellend ist (Thema erledigt), oder ob er lieber einen 
separaten Controller nehmen will, denn man dann vielleicht noch 
aufgehübscht mit Sleep-Modes auf Energiesparen trimmen kann (mehr 
Aufwand, dafür kann das dauerhaft an der Batterie bleiben).

Ich sehe keinen Sinn darin, über Leute zu richten, denen eine solche 
schnelle Lösung mal das einfachste ist. Das sind Leute, die man ohne 
derart einfache, vorgefertigte Technik überhaupt nicht hätte dazu 
bringen können, eine Mikrocontroller-basierte Lösung in Betracht zu 
ziehen.

>>Der zweite Vorteil ist natürlich der Bootloader
>
> Wo ist da ein Vorteil?

Dass man sich eben nicht erst noch einen Programmer zulegen muss.

Und sei's nur, um auf diese Weise das Henne-und-Ei-Problem lösen zu 
können, und so'n Ding bspw. als „Ur-Programmer“ zu benutzen, um sich 
damit einen USBasp aufzubauen.

> Ich mag die freie Wahl der Taktfrequenz.

Anderen könnten halt andere Features wichtiger sein.

Davon abgesehen, bist du mit dem clock prescaler ja immer noch 
einigermaßen frei in der Wahl der Taktfrequenz, wenn die Firmware denn 
erstmal läuft. Nur beim Reset läuft er mit seiner Voreinstellung, danach 
steht dir alles frei zwischen 62,5 kHz und 16 MHz. Natürlich 
funktionieren dann die Timings der Arduino-Libs nicht mehr, aber es 
zwingt einen ja keiner, die zu benutzen.

: Bearbeitet durch Moderator
von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> Hast ja letztens was geschrieben, auch wie man das anstellt ohne die
> boards.txt zu ändern.
> Mist ich habe den Link verlegt
Ja, das habe ich getan!
Eine boards.local.txt anlegen
https://arduino.github.io/arduino-cli/platform-specification/

Wobei die Arduino IDE hier noch kein Thema war.
Und mir somit auch noch nicht klar ist, ob das der Weg sein wird.

spess53 schrieb:
> <Dann nimm sie...
>
> Die einzig sinnvolle Anwendung ist das Recyling des AVRs. Wozu den ca.
> achtfach größeren Platz verschwenden. Für nichts.
Deine Grätsche, macht klar, dass dir solche Boards nicht in den Kram 
passen.
Gut und schön... jedem das seine.
Aber mit dem TE hat das nichts zu tun, denn der hat ein solches liegen, 
und will es auch wohl zum Einsatz bringen.
Also: Deine Vorlieben sind in dem Punkt eher scheißegal.

Joachim B. schrieb:
> aber eine 6 Pin Stiftleiste mit Druck
> gehalten tuts auch,
Naja...
Fehlerhafte Daten (Kontaktprobleme) an der Stelle, können einem derbe 
ein Beinchen stellen.
Dann doch lieber die, schon genannten, Pogopins verwenden, oder eben 
einen Stecker einlöten. Ist beides erheblich zuverlässiger.


Jörg W. schrieb:
> Natürlich
> funktionieren dann die Timings der Arduino-Libs nicht mehr, aber es
> zwingt einen ja keiner, die zu benutzen.
Wie gerade schon gesagt...
Kann man über eigene Boarddefinitionen anpassen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Fehlerhafte Daten (Kontaktprobleme) an der Stelle, können einem derbe
> ein Beinchen stellen.

Das merkt man beim Verify in der Programmierung.

Ist trotzdem eine wackelige Angelegenheit, die in der Regel einige 
Versuche braucht, bis man erfolgreich war. Habe ich mal bei einem 
Bausatz gemacht, den wir auf öffentlichen Veranstaltungen aufbauen 
lassen haben. War ganz froh, dann irgendwann die Pogo-Pins zu haben, 
denn damit funktioniert's im ersten Anlauf.

von Einer K. (Gast)


Lesenswert?

Jörg W. schrieb:
> Das merkt man beim Verify in der Programmierung.
Wenn sichs ums Programm dreht, dann ja.

Wenn allerdings die Fuses plötzlich daneben stehen, wirds dann schon 
etwas fummeliger.
Das mag ein spess53 oder Joachim B. ja noch in den Griff bekommen.
Aber so mancher Anfänger wird wie ein Ochs vorm Berg stehen.

Ja, ich halte das auch für machbar, aber auch für ein 
unnötiges/vermeidbares Risiko.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Wenn allerdings die Fuses plötzlich daneben stehen, wirds dann schon
> etwas fummeliger.

Wenn man denn unbedingt an den Fuses rumfummeln muss mit so einer 
wackeligen Konstellation … das würde ich wohl eher nicht tun. ;-)

von Einer K. (Gast)


Lesenswert?

Jörg W. schrieb:
> das würde ich wohl eher nicht tun. ;-)
Ich auch nicht.
Aber beim Bootloader ändern/brennen, steht man genau vor der 
Entscheidung.

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Jörg W. schrieb:
>>>Richtig: es geht einfacher für einen Prototypen.
>> Und bei wie vielen bleibt es dabei?
> Selbst wenn: was ist schlimm daran?

Ersetze Prototyp durch Einzelstück:
Beitrag "Re: Leitungsschutzschalter kommt beim Abschalten"

Oben der Nano als Hirn, unten ein China-Schaltreglermodul und noch ein 
Stromsensormodul - besser komme ich nicht zu einem Gerät, Einzelstück

Natürlich kommen noch Abdeckkappen auf die Drehknöpfe und der Deckel auf 
das Gehäuse :-)

Oder der Ersatz einer mechanischen 14h-Schaltuhr, für die ich keinen 
Ersatz mehr bekomme. Die LR-Platte hat deren Außenmaße - soll ich dafür 
ein Layout entwickeln?

Ich sehe (und habe) viele Anwendungen für Nano und andere Module, und 
die landen nicht lose im Schuhkarton, sondern geben fertige Geräte.

von Georg M. (g_m)


Lesenswert?

Inzwischen gibt es schon USB-C.

Beitrag #6401115 wurde von einem Moderator gelöscht.
von Schlaumaier (Gast)


Lesenswert?

Ich weiß gar nicht was euer Problem ist.

So ähnlich wie in den Beitrag über mir mache ich es dauernd. Ich habe in 
Kicad den Footprint des Nano drin. Dann eine kleine Platine drumherum 
und das war's. Ich finde Leiterbahnen einfach einfacher als Drahtverhau.

Wenn es wirklich eng wird habe ich hier Atiny-85 mit Beinchen. Die biegt 
man um 90° auf Gerade. Daran die Kabel direkt angelötet und ab ins 
Modellauto ;)

Vorher kommt so ein Atiny einfach auf eine Steckboardschaltung um die 
Programmierung zu prüfen.

Ist alles eine Frage des Platzes und meiner offiziell von mir 
anerkannten Faulheit. Und ich halte Faulheit für eine Tugend.

Und wenn die Menschheit nicht so Tugendhaft wäre, würden sie immer noch 
zu Fuß laufen und hätte nie ein Auto erfunden. ;)

von Wolfgang (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Um den Bootloader zu flashen, muss man den Stecker auch einlöten.

Nein - muss man nicht.
Besser?

Jörg W. schrieb:
> Könntest du ggf. in Zukunft eine freundlichere Wortwahl treffen?

Wenn jemand mit derartiger Bestimmtheit Mist erzählt, muss man doch das 
mal deutlich sagen dürfen.

Arduino Fanboy D. schrieb:
> Joachim B. schrieb:
>> aber eine 6 Pin Stiftleiste mit Druck gehalten tuts auch,
> Naja...
> Fehlerhafte Daten (Kontaktprobleme) an der Stelle, können einem derbe
> ein Beinchen stellen.

Bei durchkontaktierten Platinen ist das überhaupt nicht wackelig, wenn 
die Beine lang genug sind (Federweg) und man beim Andrücken ein 
ausreichendes Moment senkrecht zur Bohrachse aufbringt.
Bei abgewinkelten Wannensteckern bekommt man das fertige Setup inklusive 
Pfostenstecker und Flachbandkabel für ein paar Cent (z.B. 6-polig oder 
10-polig als Doppelreihe). Einfach den Wannenstecker in die Bohrungen 
stecken und dann mit Gefühl am eingesteckten Pfostenstecker hochdrücken. 
Die Winkelform sorgt für das Moment in die richtige Richtung.
https://www.reichelt.de/wannenstecker-6-polig-gewinkelt-wsl-6w-p105978.html
https://www.reichelt.de/wannenstecker-10-polig-gewinkelt-wsl-10w-p22818.html
Ok, das muss man auch haben - sollte aber hinzukriegen sein.

von Old P. (Firma: nix) (old-papa)


Lesenswert?

Arduino Fanboy D. schrieb:
....
> Deine Grätsche, macht klar, dass dir solche Boards nicht in den Kram
> passen.
> Gut und schön... jedem das seine.
> Aber mit dem TE hat das nichts zu tun, denn der hat ein solches liegen,
> und will es auch wohl zum Einsatz bringen.
> Also: Deine Vorlieben sind in dem Punkt eher scheißegal.

So isses...

> Naja...
> Fehlerhafte Daten (Kontaktprobleme) an der Stelle, können einem derbe
> ein Beinchen stellen.
> Dann doch lieber die, schon genannten, Pogopins verwenden, oder eben
> einen Stecker einlöten. Ist beides erheblich zuverlässiger.

Ich habe alle drei Versionen durch: Etwas seitlich verklemmte Stecker, 
wobei ich welche mit 2x langen Pins genommen habe und auch 2x 3Pins 
separat. Funktionierte perfekt.
Pogopins habe ich auch einen Block mit 2x3 (also speziell für ISP), die 
sind mir schonmal abgerutscht, weil man schon ordentlich draufdrücken 
muss. Das waren allerdings welche mit "Kugelkopf", die mit Spitze gehen 
besser.
Und dann auch den Klassiker, die eingelöteten Pins. Keine 
Kontaktprobleme, dafür später Gewürge im Gehäuse, ich musste die etwas 
abknipsen.

Old-Papa

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Bei durchkontaktierten Platinen ist das überhaupt nicht wackelig,

Naja. "überhaupt nicht" ist schon außerordentlich übertrieben.

BTDT.

Aber: das ist nicht das Thema des Threads.

von Wolfgang (Gast)


Lesenswert?

Jörg W. schrieb:
> Naja. "überhaupt nicht" ist schon außerordentlich übertrieben.

Das Verfahren lebt vom wohl definierten "Abwinkel"-Druck auf den 
Stecker, so dass alle Pins auf Spannung sind. Ohne das ist es natürlich 
wackelig.

Das Verfahren ersetzt keinen permanenten Stecker, sondern dient bei mir 
nur zum (einmaligen) Aufspielen eines Bootloaders - und das hat bisher 
immer fehlerfrei funktioniert. Die paar Sekunden muss man sich dann mal 
zusammen nehmen und vernünftig gegen den Stecker drücken.

Auch die Pogo-Pin Variante ersetzt keinen permante Steckverbindung, 
sondern bedarf einer gewissen Sorgfalt oder alternativ einer aufwändiger 
konstruierten Aufnahme mit sauberer Führung und definierten Anschlägen 
für die Kontaktierung.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Auch die Pogo-Pin Variante ersetzt keinen permante Steckverbindung,
> sondern bedarf einer gewissen Sorgfalt

Ja, natürlich. Da ich aber an ein und derselben Platine beides durch 
habe, kann ich nur sagen: die Pogo-Pins funktionieren praktisch auf 
Anhieb, beim reingesetzten Stecker war es völlige Glückssache. 
Selbstverständlich mit Verkanten des Steckers, sonst geht gleich gar 
nichts.

Fuses (für einen Bootloader) damit zu modifizieren, birgt da schon ein 
gewisses Risiko … durch AVRDUDE's "safemode"-Feature hat man natürlich 
im Falle des Falles noch eine letzte Chance, nach der entsprechenden 
Warnung den Stecker nochmal anders zu verkanten und zu hoffen, dass es 
dann klappt. Wenn nicht, kann es aber im dümmsten Falle gut sein, dass 
man den Chip danach nur durch HV-Programmierung zurück bekommt.

von Old P. (Firma: nix) (old-papa)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:

> Das Verfahren lebt vom wohl definierten "Abwinkel"-Druck auf den
> Stecker, so dass alle Pins auf Spannung sind. Ohne das ist es natürlich
> wackelig.

So isses.

> Das Verfahren ersetzt keinen permanenten Stecker, sondern dient bei mir
> nur zum (einmaligen) Aufspielen eines Bootloaders - und das hat bisher
> immer fehlerfrei funktioniert. Die paar Sekunden muss man sich dann mal
> zusammen nehmen und vernünftig gegen den Stecker drücken.

Muss man bei Pogo-Pins auch.

> Auch die Pogo-Pin Variante ersetzt keinen permante Steckverbindung,
> sondern bedarf einer gewissen Sorgfalt oder alternativ einer aufwändiger
> konstruierten Aufnahme mit sauberer Führung und definierten Anschlägen
> für die Kontaktierung.

Nun, meine "Pogo-Pinner" habe ich einfach in leere Steckergehäuse 
geklebt und gut ist. Wie ich schon schrieb, die Spitzen halten viel 
besser in den Bohrungen, die kugligen sind mir durch Doofheit schon 
abgerutscht.

Old-Papa

: Bearbeitet durch User
von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Arduino Fanboy D. schrieb:
> Ob es in Sachen Nano ein "besser" zwischen C und C++ gibt?

Ich würde hier eher nicht von "C oder C++" denken sondern von "C oder 
Assembler". Systemtimer kann man auch in Assembler machen. Dafür braucht 
man keine kb von RAM zu opfern wie in Arduino. Mit C geht wohl 
Programmieren schneller.

Joachim B. schrieb:
> die 6 Pins braucht man ja nicht oft, aber sie nerven
> wenn sie eingelötet sind, also es geht auch ohne einlöten.
Deshalb habe ich eine Übergangsplatine gemacht. Somit kann ich für 
manche Projekte SMD-Stiftleisten für ISP und JTAG verwenden, die ich 
nach dem Programm fertig wird einfach auslöten kann. Die Platine hat 
auch Doppelzahl von gewöhnlichen IDC-Buchsen. Das ist gemacht, um auch 
kleine Platinen mit gewöhnlichen IDC-Buchsen mit Strom versorgen zu 
können. Falls jemand Interesse hat, hier ist auch Gerber dafür.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Maxim B. schrieb:
> Dafür braucht
> man keine kb von RAM zu opfern wie in Arduino.
Die Arduino Timer Geschichte benötigt 9 Byte RAM.

Maxim B. schrieb:
> kb von RAM
Ist also irrational überzogen.

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Arduino Fanboy D. schrieb:
> Ist also irrational überzogen.

Vielleicht. Arduino mag ich aus gleichem Grund nicht wie Windows 10 oder 
auch Smartphone: ich mag es nicht, wenn eine Maschine mir Menschen sagt, 
was ich zu tun habe. Ich mag auch nicht, wenn eine Maschine etwas macht, 
was ich Mensch von ihr nicht verlangt habe. In Arduino gibt es zu viel 
verstecktes Leben drin. Nach dem ich für einfaches Programm, wo 
Assembler oder C mit 200 oder 300 Bytes auskommen, gleich 10 kb 
Maschinencode bekomme, denke ich: was macht Arduino das alles dort? 
Vielleicht simst es an Chinesen oder an Trump alles, was ich zu Hause 
spreche? Wozu sonst so viel Code? :)

Es gibt auch andere Fragen zu Arduino-Erfinder.
Daß man nicht alle ATMega2560-pins angeschlossen hat, habe ich 
Verständnis. Aber warum sind das ausgerechnet XCK-Pins von allen vier 
USART, die ATMega2560 hat??? Wenn es so problematisch mit Platz, dann 
könnte man doch mindestens von zwei oder auch von einem von vier XCK-Pin 
ausführen, somit Master-SPI-Modus möglich wäre? Aber alles ist da, nur 
XCK-Pins nicht... Für mich ist  ATMega2560 gerade wegen vier USART von 
Wert, RAM hat sie weniger als ATMega1284, und auch 100 Pins mit 0,5 mm 
Schritt zu löten macht wenig Spaß... trotzdem bin ich gezwungen, das zu 
machen, weil Arduino mit ATMega2560 unbrauchbar ist...

Hier ist meine Antwort auf Arduino :)
Ich habe bei JLC 20 Stück gemacht, zuerst reicht mir das.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Maxim B. schrieb:
> Vielleicht.
Nein!
Ganz sicher.

Ich kann mir nicht vorstellen, dass du dich, und uns, mit Unwahrheiten 
kommen musst, um dich selber gegen Arduino zu entscheiden.
Wenn du schon gegen Arduino argumentieren möchtest, dann bitte mit 
Wahrheiten.



Maxim B. schrieb:
> ich mag es nicht, wenn eine Maschine mir Menschen sagt,
> was ich zu tun habe.
Wer tut das?
Wie sagt dir ein Arduino was du zu tun hast?

Maxim B. schrieb:
> In Arduino gibt es zu viel
> verstecktes Leben drin. Nach dem ich für einfaches Programm, wo
> Assembler oder C mit 200 oder 300 Bytes auskommen, gleich 10 kb
> Maschinencode bekomme, denke ich: was macht Arduino das alles dort?
Das könntest du herausfinden, wenn du das möchtest. Gehe ich dir auch 
gerne zur Hand.

Aber ansonsten, kann man auch auch auf die vorgefertigten Sachen 
verzichten, und dann ist der Unterschied zwischen handgedengeltem ASM 
und C++ schon längst nicht mehr so groß.
Was IO Geschwindigkeit betrifft, und Flashverbrauch, liegen beide Kopf 
an Kopf gleichauf.

Arduino besteht im Prinzip aus 3 Komponenten.
-Arduino IDE
-Framework (Hardwaredefinition und Libraries)
-Board

Alle drei lassen sich einzeln Verwenden, oder man kann sie auch 
weglassen, bzw. die Komponenten austauschen.
Du hast also die Wahl.



Maxim B. schrieb:
> Vielleicht simst es an Chinesen oder an Trump alles, was ich zu Hause
> spreche? Wozu sonst so viel Code? :)
Irrationales Arduino bashing.
;-)

Maxim B. schrieb:
> Daß man nicht alle ATMega2560-pins
Andere Baustelle, wir sind hier auf Nano, nicht Mega.
Whataboutism?
Aber ja....
Mir fehlten da bisher nicht die synchronen USART Modi, sonder eher die 
Zählereingänge.
Alternatives Board: 
http://www.inhaos.com/uploadfile/otherpic/DS-Mega2560-CORE-V01-EN.pdf
Mit alle Pins herausgeführt.

von Maxim B. (max182)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wenn du schon gegen Arduino argumentieren möchtest, dann bitte mit
> Wahrheiten.

Die Wahrheit: Arduino braucht deutlich mehr FLASH und RAM, als C. Es 
geht nicht um ein paar %, es geht um Mehrfaches. Entsprechend weniger 
bleibt für eigentliches Programm.

Arduino Fanboy D. schrieb:
> Mir fehlten da bisher nicht die synchronen USART Modi, sonder eher die
> Zählereingänge.
T0,T5 und ICP4, ICP5. Nicht alles, aber man kann etwas wählen. Für ein 
Frequenzmeter würde ich T5 und ICP4 nehmen. XCK gibt es dagegen kein 
einziger.

Arduino Fanboy D. schrieb:
> Andere Baustelle, wir sind hier auf Nano, nicht Mega.
Hier hatten die Entwickler von Arduino einfach zu wenig Pins. Sonst 
würden sie auch hier XCK unnutzbar machen und somit die Hälfte von 
Controllermöglichkeiten verpfuschen, ich bin sicher. :)

Arduino Fanboy D. schrieb:
> Alternatives Board:
> http://www.inhaos.com/uploadfile/otherpic/DS-Mega2560-CORE-V01-EN.pdf
> Mit alle Pins herausgeführt.
Nicht schlecht. Ich sehe hier allerdings ein Problem: die Stifte von 
quer stehender Leiste sind zu dicht an anderen Reihen gemacht. Es wird 
problematisch, die Buchsen für diese Pins auf einer Platine zu 
platzieren. Also nur hängende Drähtchen oder fest einlöten, für Buchsen 
paßt diese Platine kaum... Schade...
Auch paßt diese Platine (wie auch meine übrigens) für Steckbrett nicht. 
Dafür sollten keine Doppelleisten stehen. Dann wird aber die Platine zu 
groß und schon nicht mehr je 2 € pro 5 Stück bei JLC :)

Ich finde hilfreich, wenn alle Pins beschriftet werden, auch wenn 
dadurch die Platine etwas größer wird. Hier sehe ich deutliche Vorteil 
bei meiner Platine. Sie hat Beschriftung auf beiden Seiten, man kann 
Stiftleisten beliebig einlöten: von unten für Einsatz in einer 
Großplatine und von oben für Drähtchen.

: Bearbeitet durch User
von Old P. (Firma: nix) (old-papa)


Lesenswert?

Maxim B. schrieb:

> Die Wahrheit: Arduino braucht deutlich mehr FLASH und RAM, als C. Es
> geht nicht um ein paar %, es geht um Mehrfaches. Entsprechend weniger
> bleibt für eigentliches Programm.
>
Beweise?
Klar ist der Code umständlicher und größer, doch wirklich ein 
Mehrfaches?

Und ja, kein Mensch zwingt einem das Arduinogedöhns auf. Wer es nicht 
will, nimmt es nicht. Wo ist das Problem?
Ich mag keine Pellkartoffeln mit Quark und Leinöl, andere lieben es. 
Muss ich die deshalb verteufeln? Nö, ich pack mir was Anderes auf den 
Teller, so einfach.

Old-Papa

von Maxim B. (max182)


Lesenswert?

Old P. schrieb:
> Beweise?

Das kann jeder selber prüfen. Ein Programm in Arduino-IDE schreiben und 
compilieren und gleiche Funktionen auf C und auf Assembler. Daß C und 
Assembler kleinere und schnellere Compilate geben, das ist ein Axiom.

: Bearbeitet durch User
von Old P. (Firma: nix) (old-papa)


Lesenswert?

Maxim B. schrieb:

> Das kann jeder selber prüfen. Ein Programm in Arduino-IDE schreiben und
> compilieren und gleiche Funktionen auf C und auf Assembler. Daß C und
> Assembler kleinere und schnellere Compilate geben, das ist ein Axiom.

Viele vielleicht, aber "Jeder" nicht. Ich kann das nicht. Du schriebst 
ein Mehrfaches, nur daran habe ich Zweifel.

Old-Papa

von M. K. (sylaina)


Lesenswert?

Old P. schrieb:
> Klar ist der Code umständlicher und größer, doch wirklich ein
> Mehrfaches?

Wahrscheinlich wird so ein Arduino-Programm mehr Speicher benötigen als 
ein vergleichbares Programm in C für den gleichen AVR aber ein 
Mehrfaches...das müssen IMO aber sehr überschaubare Programme gewesen 
sein würde ich mal sagen, bei größeren Programmen dürfte sich das 
Mehrfache auf die Nachkommastelle begrenzen. Kann natürlich das Zünglein 
an der Waage sein aber ja, ich denke es ist ein wenig übertrieben. ;)

von Einer K. (Gast)


Lesenswert?

Maxim B. schrieb:
> Die Wahrheit: Arduino braucht deutlich mehr FLASH und RAM, als C. Es
> geht nicht um ein paar %, es geht um Mehrfaches. Entsprechend weniger
> bleibt für eigentliches Programm.
Du vergleichst Äpfel mit Birnen.
Erstens bezieht sich das nur aufs Framework, welches man auch locker weg 
lassen kann. (so wie die Libs auch)
Dann ist das Framework zum größten Teil in C geschrieben.

> Arduino braucht deutlich mehr FLASH und RAM, als C.
Das ist absurd.
Ich übersetze:
> C braucht deutlich mehr FLASH und RAM, als C.
Du siehst...

Arduino bietet dir/allen die Möglichkeit, den angebotenen Komfort zu 
nutzen.
Alternativ, die Möglichkeit alles selber in C++ zu bauen.
Auch C, und ASM stehen zur deiner uneingeschränkten Verfügung.
Wahlweise mit, oder ohne Framework.

Es also kein Problem reine ASM Programme mit der Arduino IDE zu 
entwickeln und auf einen nahezu beliebigen AVR zu spielen.


Es sind halt die Komfort "Funktionen"/Libraries, welche den 
Speicherverbrauch mit sich bringen.
Der Verzicht darauf, würde dich davon erlösen.


Deine gesamte "Speicherverbrauch" Argumentation hängt ausschließlich an 
dem Framework. Die beiden anderen Komponenten, IDE und Board haben da 
nix mit zu tun.

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> Wahrscheinlich wird so ein Arduino-Programm mehr Speicher benötigen als
> ein vergleichbares Programm in C für den gleichen AVR
Nein, das ist exakt identisch.
Wo soll der Unterschied herkommen?

von Maxim B. (max182)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wo soll der Unterschied herkommen?

Das ist eine gute Frage... Was macht Arduino alles mit RAM und FLASH? 
Ich habe ja schon vermutet: es simst unsere Daten nach China. Aber ich 
weiß nicht genau, ich bin kein Profi, ich kann nur vermuten. Vielleicht 
doch nicht nach China? So etwa wie Windows 10? Aber vielleicht einfach 
uneffiziente Code? Wer weiß... Selber kann ich Arduino-Quelltext nicht 
überprüfen, und Vertrauen an Profi habe ich schon lange nicht mehr (wer 
schreibt Viren? Profi natürlich, wer sonst?).

: Bearbeitet durch User
von Old P. (Firma: nix) (old-papa)


Lesenswert?

Maxim B. schrieb:
>
> Das ist eine gute Frage... Was macht Arduino alles mit RAM und FLASH?
> Ich habe ja schon vermutet: es simst unsere Daten nach China. Aber ich
> weiß nicht genau, ich bin kein Profi, ich kann nur vermuten. Vielleicht
> doch nicht nach China? So etwa wie Windows 10?

Aha, der Arduino greift also schnell noch in Deine Bauteilkiste, 
stöpselt sich ein Interface zusammen um dann die gerade eingestellte 
Lötkolbentemperatur oder Ventilatordrehzahl oder was sonst er gerade 
auswertet und regelt an die Machthaber dieser Welt zu schicken. Wenn 
kein WLan vorhanden ist,  stöpselt er sich sogar selber das Kabel 
rein....

Männeken: egal was Du nimmst, nimm weniger!

> Selber kann ich Arduino-Quelltext nicht
> überprüfen, und Vertrauen an Profi habe ich schon lange nicht mehr (wer
> schreibt Viren? Profi natürlich, wer sonst?).

Genau so wie die Verdchwörungshanseln dieser Welt, von nichts ne Ahnung, 
in der Schule nur Klamotten und Bonanza-Rad gezeigt, aber unglaublich 
viel Müll in die Welt rufen.

Old-Papa

von Einer K. (Gast)


Lesenswert?

Leider differenzierst du nicht.
Das ist schade....

Maxim B. schrieb:
> Aber ich
> weiß nicht genau, ich bin kein Profi, ich kann nur vermuten.
Das ist ein Anfang.

An dem Punkt, kann ich schon sagen, dass Vermutungen, hier als 
Behauptungen/Wahrheit, zu verkaufen, irgendwie der Sache nicht gerecht 
wird.
Es sei denn du stützt dein Leben selber auf falschen Behauptungen, dann 
wäre es für dich normal so zu agieren. Vielleicht nicht klug, aber 
normal.

Hier findest du die Fakten, zum selber nachlesen:
https://github.com/arduino/ArduinoCore-avr
Kein Spion Code, weit und breit nicht.


---------

Das Minimalst mögliche Arduino Programm, für einen Arduino UNO oder 
Nano(ATMega328P):
1
// minimal, ohne Arduino Framework
2
int main()
3
{
4
  for(;;);
5
}
Verbrauch:
> Der Sketch verwendet 134 Bytes (0%) des Programmspeicherplatzes.
> Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers,
Davon gehen ca 122Byte für die Interruptsprungleiste drauf.
Der Rest ist der übliche C/C++ Startcode, wie er beim GCC per default 
verwendet wird.




1
// minimal, mit Arduino Framework
2
void setup() 
3
{
4
  
5
}
6
7
void loop()
8
{
9
  
10
}
> Der Sketch verwendet 444 Bytes (1%) des Programmspeicherplatzes.
> Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers,
Was ist hinzugekommen?
Die Timerabhandlung. Komfortfunktionen.
millis, delay, delayMicroseconds, micros.
Im Startupcode, ist die initiallisierung von allen Timern und des ADC 
hinzugekommen. Die Timer werden für PWM vorbereitet, und eben der Ticker 
Interrupt mit Zähler.
Der Komfort kostet zusätzliche 310 Byte im Flash.
Das ist allesamt C Code.
;-) Deinen Spioncode, mit ohne Antenne, bekommst du da nicht unter.



Hier mal ein Basisprogramm mit schon etwas mehr Komfort:
1
#include <Streaming.h>
2
3
4
void setup() 
5
{
6
  Serial.begin(9600);
7
  Serial << "Start: "<< __FILE__ << endl;
8
}
9
10
void loop() 
11
{
12
13
}
> Der Sketch verwendet 1570 Bytes (4%) des Programmspeicherplatzes.
> Globale Variablen verwenden 268 Bytes (13%) des dynamischen Speichers
Das benötigt RAM.
Schließlich richtet es 2 ISR ein, und ein paar Variablen, um z.B. die 
beiden, je 64Byte, Ringpuffer zu verwalten.
Flashbedarf, ca. 1200 Byte mehr.
Welchen Komfort bringt das?
Ausgabe Methoden für nahezu alle üblichen Datentypen.
Sorgenfreie Serialabhandlung.

Zusätzlich kann es alle Instanzen ausgeben, welche das Printable 
Interface implementieren.
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Printable.h

Es implementiert Stream
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Stream.h

Damit auch gleich Print
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Print.h


Diese ganzen Features, kosten dich auch reichlich Platz, wenn du sie in 
C nachbauen wolltest. Ob du dann mit den 1200 Byte Flash auskommst?
Der jeweilige User entscheidet selber, ob er das haben will, oder nicht.
Sagst du "JA!" zu den Features, dann kostet dich das Platz.
Welch ein Wunder .... egal wie du es drehst und wendest.

Eine der Designentscheidungen war auch wohl, dieses auf allen 
Plattformen, mit einem identischen Interface, zu etablieren.
Das waren erst eine Handvoll verschiedener AVR, dann SAM und später noch 
einige weitere ARMe, usw
Plus die ganzen einbindbaren "Fremdprodukte" ESP, K210, usw.

Auch implementieren viele der üblichen Libs genau diese Interfaces.
Wire(I2C), LCD, File/SD, Netzwerk Server und Clients, usw.
Die fassen sich also alle gleich/ähnlich an.

Das ist der Komfort, den man bezahlen muss, welcher einen den Speicher 
kostet.

Gerne angemäckert werden auch die IO Funktion, von wegen 
Speicherverbrauch und langsam.
OK, wenn man digitalWrite() nutzt, dann bekommt man das Feature, dass 
eine evtl auf dem Pin laufende PWM abgeschaltet wird.
Auch kann man die Pinnummer dynamisch halten.
1
for(byte pin = 2; pin < 10; pin++)
2
     digitalWrite(pin,HIGH);
Ein recht nützliches Feature, manchmal....
Bau das selber in C, und du wirst merken, das knapper/schneller und 
ebenso universell, hin zu bekommen, als/wie es in dem Framework 
implementiert ist, ist "eine" Aufgabe.

Der jeweilige User entscheidet selber, ob er das haben will, oder nicht.
Niemand wird gezwungen.
Ein PORTB = 0; würde u.U. das gleiche tun, nur erheblich schlanker sein.
Gleichauf mit Assembler.
Mach es also so, wenn dir der Überbau im Wege rum steht.

Es ist nicht Arduino welches das unterbindet, oder gar einfordert..
Es ist die eigne Denke.

von Maxim B. (max182)


Lesenswert?

Arduino Fanboy D. schrieb:
> #include <Streaming.h>
>
> void setup()
> {
>   Serial.begin(9600);
>   Serial << "Start: "<< _FILE_ << endl;
> }
>
> void loop()
> {
>
> }
>> Der Sketch verwendet 1570 Bytes (4%) des Programmspeicherplatzes.
>> Globale Variablen verwenden 268 Bytes (13%) des dynamischen Speichers

Das ist aber recht viel! Wozu so viele globalen Variablen? Das ist ja 
nicht besonders gut, besser wäre mehr static zu verwenden.
Ich hoffe, du hast Recht und weder Trump noch Mao bekommen meine 
Gespräche im Zimmer mitgeschnitten :)
Aber gut so. Wenn man auch mithört, ich habe keine besondere Geheimnisse 
zu Hause. Die beiden können höchstens erfahren, wie man richtig das 
Vaterunser spricht :)

Schade, daß Arduino-IDE keine Möglichkeiten für Debug hat. Könnte man 
durch das Programm mit JTAG laufen, so könnte man besser verstehen, was 
dort alles gemacht wird...

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Maxim B. schrieb:
> besser wäre mehr static zu verwenden.
Was meinst du damit?

von M. K. (sylaina)


Lesenswert?

Arduino Fanboy D. schrieb:
> Nein, das ist exakt identisch.
> Wo soll der Unterschied herkommen?

Von Framework und Co. schätze ich, da hab ich auch wenig Ahnung von 
(mangels Interesse daran).

Aber mal ein kleines Beispiel:
Das Blink-Beispiel in der Arduino-IDE benötigt für den Atmega328p ohne 
zutun des Users, also unverändert, mal eben schlanke 1030 Bytes. Das 
identische Beispiel (siehe unten) nur in C geschrieben benötigt aber nur 
178 Bytes.
Da sind wir dann in dem Bereich, in dem ein Arduino-Programm ein 
Vielfaches eines vergleichbaren Programms in C an Flash-Speicher 
benötigt aber, ich sagte es ja schon oben: Das ist ein sehr 
überschaubares Programm und gewiss nicht repräsentativ für die typische 
Anwendung von Mikrocontrollern und Co. ;)


Mein Blink-Beispiel in C als Äquivalent zum Blinkbeispiel der 
Arduino-IDE.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
int main(void)
5
{
6
    DDRB = (1 << PB5);
7
    for(;;){
8
    PORTB |= (1 << PB5);
9
    _delay_ms(1000);
10
    PORTB &= ~(1 << PB5);
11
    _delay_ms(1000);
12
    }
13
    return 0;   /* wird nie erreicht */
14
}

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> Mein Blink-Beispiel in C als Äquivalent zum Blinkbeispiel der
> Arduino-IDE.

Gutes Beispiel.

Das kannst du in eine *.ino Datei stopfen, dann wird es von der Arduino 
IDE als C++ kompiliert, oder in einer *.c ooder *.cpp Datei, neben einer 
leeren *.ino.
Oder eben auf ASM umgemogelt in einer *.S
Das tuts, sofort, ohne irgendwelche Klimmzüge.
Du musst das Framework nicht verwenden.

Arduino sagt zu deinem Code:
> Der Sketch verwendet 178 Bytes (0%) des Programmspeicherplatzes.
> Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers,
Atmel Studio, o.ä, ist da sparsamer?

M. K. schrieb:
> Das Blink-Beispiel in der Arduino-IDE benötigt für den Atmega328p ohne
> zutun des Users, also unverändert, mal eben schlanke 1030 Bytes.
Ja, der Komfort!
z.B. die Chance, die Laufzeiten/Blinkintervalle, Pins, zur Laufzeit 
auszutauschen.
Die Portabilität, Lauffähigkeit auf anderen µC, ARM ESP usw...

---
Es gibt dutzende von Verfahren, den Überbau abzuwenden.
Unter Verzicht auf den Komfort.
Der Komfort hat seinen Preis.
Der Anwender trifft die Entscheidung.

von M. K. (sylaina)


Lesenswert?

Keiner hat bestritten, dass Komfort seinen Preis hat.

Aber mal ehrlich: Ich schreibe das C Programm im Atmel-Studio. Ich 
erstelle einfach ein Projekt und schreibe das Programm runter und lade 
es auf den uC. Ohne sonst was zu tun. Genauso gehe ich in der 
Arduino-IDE vor und da ergibt sich dieser Unterschied. Und das im 
Atmel-Studio geschriebene C-Programm braucht 178 Bytes, das 
Ardiuno-Programm braucht 1030 Bytes. Ist nunmal ein Unterschied wie er 
oben bemängelt wurde. Niemand hat gesagt, dass man das nicht ändern kann 
durch entsprechende Eingriffe an der IDE aber du musst schon zugeben, 
dass solche Eingriffe nix für Anfänger und Rookies sind. Da muss man 
schon in eine Ebene in der Arduino-IDE rein gehen die eher was für 
Fortgeschrittene wie dich ist.
Und ich finde auch so dass das Atmel-Studio etwas komfortabler als die 
Arduino-IDE. Das heißt aber nicht, dass ich Arduino schlecht finde, ganz 
im Gegenteil, ich finde das interessant und sehr gut. ;)

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> Niemand hat gesagt, dass man das nicht ändern kann
> durch entsprechende Eingriffe an der IDE ...
Es sind keine Eingriffe nötig!

--------

> Und das im Atmel-Studio geschriebene
> C-Programm braucht 178 Bytes
Es ist egal, ob Arduino IDE, oder Atmel Studio.
Das gleiche Programm, benötigt den gleichen Raum.

Der hinkende Vergleich:
Wenn du mit einem LKW in den Supermarkt zum einkaufen fährst, dann wirst 
du auch nicht alle Features des Fahrzeugs nutzen, und doch nicht auf den 
Kundenparkplatz passen.

--------

M. K. schrieb:
> dass solche Eingriffe nix für Anfänger und Rookies sind. Da muss man
> schon in eine Ebene in der Arduino-IDE rein
Wie schon gesagt...
Keine Eingriffe nötig. Nicht für diese Belange.
Allerdings, sollte man schon das Datenblatt gelesen habe wenn man mit 
PORTB und seinen Brüdern hantiert.
Das bleibt einem auch nicht beim Atmel Studio erspart.

M. K. schrieb:
> Und ich finde auch so dass das Atmel-Studio etwas komfortabler als die
> Arduino-IDE.
Das sei dir ungenommen.
Persönliche Vorlieben wird es immer geben.

Das Atmelstudio ist schon recht komplex, mit seinen Menues...
Viel Gedönse, was man selten benötigt.
Und Eclipse, z.B. ist noch viel komplexer und undurchsichtiger.

---

Die Arduino IDE ist bewusst schlicht gehalten.
Das Framework auch
Weitgehend portabel.

Die niedrige Einstiegsschwelle, und die kleinen Preise.
Darin dürfte die Wurzel der Arduino Bekanntheit liegen.

---
Das fehlende Debugging Feature, ist zumindest schon mal auf dem Weg in 
die Realisierung, mit der "Arduino Pro IDE"

von Der Chantal (Gast)


Lesenswert?

Jörg W. schrieb:
> Mikro-USB, nicht Mini? Die Nano-Clones, die wir hier rumliegen haben,
> haben Mini-USB.

https://www.seeedstudio.com/Seeeduino-Nano-p-4111.html

Die Chinesen haben auch Varianten mit USB Typ C.

PS: Bei den Chinesen Arduino ist es meistens nicht erforderlich den 
Bootloader explizit umzuflashen. Es reicht in der Arduino IDE die "old 
Bootloader" Variante des jeweiligen Arduino auszuwählen.

von M. K. (sylaina)


Lesenswert?

Arduino Fanboy D. schrieb:
> Es ist egal, ob Arduino IDE, oder Atmel Studio.
> Das gleiche Programm, benötigt den gleichen Raum.

Ah, jetzt verstehe ich das Problem. Du hast noch nicht verstanden, dass 
es um das Thema Arduino-Programm vs C-Programm geht und nicht 
Arduino-IDE vs Atmel-IDE. Da hab ich mich und auch der Kritiker zu 
schlecht ausgedrückt. ;)

von Cyblord -. (cyblord)


Lesenswert?

Immer die gleiche unsinnige Diskussion.

Und immer die gleiche Antwort von mir:

"Arduino" bezeichnet das gesamte System aus einer vorgegebenen Hardware 
(inkl. Pinning usw), der Arduino-IDE und des Arduino-Bootloaders sowie 
das Software Framework (die libs).

Man KANN die Teile einzeln sehen. Man kann z.B. nur die HW nutzen, also 
normales Controllerboard. Man kann HW + IDE nutzen aber ohne die libs.
Natürlich geht das. Dann ist es aber kein Arduino mehr. Die weitere 
Nutzung dieser Bezeichnung ist dann nur noch irreführend. Was man daran 
sieht, dass kein Anfänger mehr durchblickt was man meint.

Wenn man Teile aus einem Staubsauger ausbaut und damit einen 
Wasserkocher baucht, ist es halt auch kein Staubsauger mehr.

von Wolfgang (Gast)


Lesenswert?

Maxim B. schrieb:
> Schade, daß Arduino-IDE keine Möglichkeiten für Debug hat. Könnte man
> durch das Programm mit JTAG laufen, so könnte man besser verstehen, was
> dort alles gemacht wird...

Du könntest eine Arduino IDE für Visual Studio verwenden. Dann könntest 
du überall rein gucken.
https://www.visualmicro.com/

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> Ah, jetzt verstehe ich das Problem. Du hast noch nicht verstanden, dass
> es um das Thema Arduino-Programm vs C-Programm geht und nicht

Ja, nee...

Es ist einfach blöd, die Komfortfunktinen zu nutzen, und sich dann über 
den Verbrauch aufzuregen, oder das Arduino anzukreiden.
Der Komfort hat seinen Preis.
Wenn man den nicht bezahlen will, muss man selber Hand anlegen.

Cyblord -. schrieb:
> Man KANN die Teile einzeln sehen.
Ja, das kann man tun.

- IDE
- Builder (make Äquivalent)
- Tool Chain
- Framework
- Boards(eine Grundmenge an Boarddefinitionen)

Ja, das wird in einem Klumpen ausgeliefert.
Auch wegen der so niedrigeren Einstiegsschwelle.

Ja, jede der Komponenten ist einzeln verwendbar, oder gegen irgendwas 
anders austauschbar.

Cyblord -. schrieb:
> Dann ist es aber kein Arduino mehr.
Das ist eine Behauptung Festsetzung, welche mir arg willkürlich 
erscheint.
Damit sprichst du der Arduino Welt die Flexibilität ab, welche sie 
nachweislich hat.
Einfach so....

Beispiel ESP:
Von den 5 genannten Hauptkomponenten, fallen die untersten 3 weg, bzw. 
werden durch anderes ersetzt.
Ist es dann auch kein Arduino mehr?

Nee, die Verallgemeinerung, welcher du da vorführst, spielt sich nur in 
deinem Kopf ab.
Einen strengen Bezug zur Realität hat das eher nicht.

Meine Definition sieht so aus:
Wenn etwas mit der Arduino IDE Kompilierbar ist, dann ist es ein Arduino 
Programm.

Egal in welcher Sprache es geschrieben wurde.
Egal mit welcher IDE, oder Editor verfasst.
Unabhängig davon, in wieweit es die Komfortfunktionen nutzt.
Welcher Kompiler das durchrattert.
Und auch unabhängig davon ob das Programm hinterher auf einem originalen 
Arduino Board läuft.

Das kommt der Praxis viel näher.

von M. K. (sylaina)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ja, nee...
>
> Es ist einfach blöd, die Komfortfunktinen zu nutzen, und sich dann über
> den Verbrauch aufzuregen, oder das Arduino anzukreiden.
> Der Komfort hat seinen Preis.
> Wenn man den nicht bezahlen will, muss man selber Hand anlegen.

Ist es echt so schwer mal zuzugeben, dass man jemand anderes nicht 
richtig verstanden hat? Meine Güte, so schwer ist das doch nicht...und 
schlimm ist es erst recht nicht. Komm mal runter, es ist Sonntag. 
Genieße den Tag.

von Cyblord -. (cyblord)


Lesenswert?

M. K. schrieb:
> Ist es echt so schwer mal zuzugeben, dass man jemand anderes nicht
> richtig verstanden hat? Meine Güte, so schwer ist das doch nicht...und
> schlimm ist es erst recht nicht. Komm mal runter, es ist Sonntag.
> Genieße den Tag.

Naja sein Name ist Programm. Auf Arduino lässt er nichts kommen, nicht 
mal berechtigte Einwände.

von Einer K. (Gast)


Lesenswert?

Cyblord -. schrieb:
> nicht mal berechtigte Einwände.

Was sind denn berechtigte Einwände?

Der genante Mehrverbrauch?
Ich hoffe, dass ich darlegen konnte, woher der kommt, und auch wie man 
ihn vermeidet, wenn man ihn nicht möchte.

von Cyblord -. (cyblord)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was sind denn berechtigte Einwände?

Na z.B. MEIN Einwand, dass Arduino die blödeste Idee, diesseits aller 
Irrenhäuser war.

Diese Kritik nimmst du einfach nicht so richtig an, denke ich manchmal.

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was sind denn berechtigte Einwände?
>
> Der genante Mehrverbrauch?
> Ich hoffe, dass ich darlegen konnte, woher der kommt, und auch wie man
> ihn vermeidet, wenn man ihn nicht möchte.

warum ist digitalWrite(TEST_PIN, HIGH); so langsam?

https://roboticsbackend.com/arduino-fast-digitalwrite/

jedenfalls viel langsamer als

PORTB = B00000001;

ich weiss ja selber das man digitalWrite nicht braucht, aber warum ist 
das langsamer?

von Carl D. (jcw2)


Lesenswert?

Joachim B. schrieb:
> Arduino Fanboy D. schrieb:
>> Was sind denn berechtigte Einwände?
>>
>> Der genante Mehrverbrauch?
>> Ich hoffe, dass ich darlegen konnte, woher der kommt, und auch wie man
>> ihn vermeidet, wenn man ihn nicht möchte.
>
> warum ist digitalWrite(TEST_PIN, HIGH); so langsam?
>
> https://roboticsbackend.com/arduino-fast-digitalwrite/
>
> jedenfalls viel langsamer als
>
> PORTB = B00000001;
>
> ich weiss ja selber das man digitalWrite nicht braucht, aber warum ist
> das langsamer?

Weil es z.B. noch prüft, ob der Pin ein PWM-Pin ist und erst mal die 
Verbindung zum Timer abgeschaltet werden muß.
Leider macht "Arduino" das alles zur Laufzeit. C++ könnte das auch 
anders, aber man hat diese Möglichkeiten leider nicht genutzt.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Carl D. schrieb:
> Weil es z.B. noch prüft, ob der Pin ein PWM-Pin ist und erst mal die
> Verbindung zum Timer abgeschaltet werden muß.
Zudem die Pinaufschlüsselung zur Laufzeit.
Dieses bedingt eine Tabelle im Flash und halt ein paar 
Zugriffsfunktionen.

Carl D. schrieb:
> C++ könnte das auch anders,
Die Pin Aufschlüsselung, ja, wenn die Pins konstant sind.

Aber der Kompiler kann nicht wissen, ob da gerade ein Pin mit seiner PWM 
wackelt, das sieht er nicht.

Es ist sicherlich wahr, dass man einiges in C++ geschickter lösen 
könnte, ...



----------


Cyblord -. schrieb:
> Arduino Fanboy D. schrieb:
>> Was sind denn berechtigte Einwände?
>
> Na z.B. MEIN Einwand, dass Arduino die blödeste Idee, diesseits aller
> Irrenhäuser war.
>
> Diese Kritik nimmst du einfach nicht so richtig an, denke ich manchmal.

Nöö...
Da hast du völlig Wahr.
Diese Kritik interessiert mich wirklich nicht.
Auch scheint mir das eher eine Bewertung, Urteil oder eine Abneigung zu 
sein, als eine Kritik.
Um eine Kritik zu sein, fehlt da die Substanz.

von Joachim B. (jar)


Lesenswert?

Carl D. schrieb:
> Weil es z.B. noch prüft, ob der Pin ein PWM-Pin ist und erst mal die
> Verbindung zum Timer abgeschaltet werden muß.

danke

Carl D. schrieb:
> Leider macht "Arduino" das alles zur Laufzeit. C++ könnte das auch
> anders, aber man hat diese Möglichkeiten leider nicht genutzt.

warum eigentlich nicht, das wäre doch ein echter Vorteil wenn mir schon 
immer vorgeworfen wird das im Arduino c++ steckt weil ich immer noch in 
c programmiere.

Also Arduino nutzt c++, aber nicht dessen Vorteile in einer Funktion?

Wie soll man das verstehen?

von Carl D. (jcw2)


Lesenswert?

Joachim B. schrieb:
> Carl D. schrieb:
>> Weil es z.B. noch prüft, ob der Pin ein PWM-Pin ist und erst mal die
>> Verbindung zum Timer abgeschaltet werden muß.
>
> danke
.
> Carl D. schrieb:
>> Leider macht "Arduino" das alles zur Laufzeit. C++ könnte das auch
>> anders, aber man hat diese Möglichkeiten leider nicht genutzt.
.
> warum eigentlich nicht, das wäre doch ein echter Vorteil wenn mir schon
> immer vorgeworfen wird das im Arduino c++ steckt weil ich immer noch in
> c programmiere.
>
> Also Arduino nutzt c++, aber nicht dessen Vorteile in einer Funktion?
>
> Wie soll man das verstehen?

Ohne es genau zu wissen vermute ich daß die Macher schlicht keine 
Priorität auf dieses Detail gelegt haben. Zudem muß man sehen, daß sich 
die Möglichkeiten ab C++11 deutlich verbessert haben.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> Also Arduino nutzt c++, aber nicht dessen Vorteile in einer Funktion?
Der Core ist zum großen Teil in C geschrieben.
Darum sind die meisten Komfortfunktionen in C, C++ und wenn man 
ernstlich will auch in ASM nutzbar.

Wäre diese Basisfunktionalität in C++ Klassentemplates gestopft, wäre 
das aus anderen Sprachen nicht (so leicht) erreichbar.

Die ursprüngliche Vorlage, wahr wohl Processing.

von Schlaumaier (Gast)


Lesenswert?

Joachim B. schrieb:
> Also Arduino nutzt c++, aber nicht dessen Vorteile in einer Funktion?

Ich habe keine Ahnung was der Arduino INTERN benutzt. Programmieren / 
schreiben tue ich mein Code in BASIS. Genauer gesagt in B4X Basic. Wobei 
das X für Variante steht. B4R = Arduino / B4A = Android / B4J = Java / 
B4i = Ei-zeug.

Meine b4R Variante übersetzt das Basic + Arduino-IDE und sendet deren 
Code an das Teilchen.

Eine Variante die ich mir nur nebenbei angesehen habe ist BasCom. Die 
ist aber kostenpflichtig.

Was ich damit sagen. Man muss kein C schreiben.

Was den Speicherverbrauch angeht. Den kann man (getested) einfach 
senken. Viele Libs sind "universal" geschrieben. Wenn man die leicht 
modifiziert kann man viel Speicherplatz sparen. Man muss nur die 
leichten Modifikationen für andere Geräte die eigentlich das selbe sind, 
aus den Dateien löschen.

Klar würde ich als Libs-Entwickler lieber eine "if-Then" Abfragen nach 
der Geräte-Signatur machen, als ein Grund-Code x-mal zu schreiben und 
die Wartung/Fehler x-mal zu kopieren.

Einige Libs sind sogar keine richtigen sondern nur Subs deren Aufruf 
ausgelagert wurde.

Davon abgesehen ist der Speicherverbrauch völlig egal. Ich sage immer 
so. Solange der Platz reicht, kann ich ihn nutzen ohne schlechtes 
Gewissen. Immerhin habe ich ihn komplett bezahlt.

Ich mag die Arduino's. Sie sind preiswert (in China) einfach zu 
programmieren, und machen ihren Job. Wenn ich der Meinung bin ich brauch 
was besseres, dann nutzt ich auch was besseres. Ich finde es eine 
Unsitte das jeder Mist alles können muss, aber nix richtig kann. Ist bei 
normaler Software genauso.

von Stefan F. (Gast)


Lesenswert?

Joachim B. schrieb:
> warum ist digitalWrite(TEST_PIN, HIGH); so langsam?

Schaue einfach in den Quelltext.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Man kann z.B. nur die HW nutzen, also normales Controllerboard.

Ja, und um mehr (als die Identifikation des Boards) ging es hier nicht.

Der TE hatte nicht nach Empfehlungen für Software-Frameworks, 
Programmiersprachen oder IDEs gefragt sondern nur, um welche Hardware es 
sich handelt.

Alles andere haben nur irgendwelche Fanboys auf den Plan gesetzt – und 
damit meine ich jetzt nicht speziell "ufuf", sondern auch alle anderen, 
die hier schräg kreuz und quer diskutieren, egal, ob sie Äpfel nun mit 
Birnen vergleichen oder den ganzen Vergleich nur dann als einen solchen 
akzeptieren, wenn man außer den Äpfeln auch noch die Apfelkörbe und 
Transportkisten einbezieht.

Der Chantal schrieb:
> Die Chinesen haben auch Varianten mit USB Typ C.

Hier war's aber wohl wirklich eine Mini-USB-Buchse, und das wurde recht 
schnell geklärt.

: Bearbeitet durch Moderator
von Frank B. (frank501)


Lesenswert?

Respekt.

Da fragt einer vernünftig danach, welches Board er hat und bekommt, nach 
einmaligem Nachhaken, auch eine sinnvolle Antwort und gleich darauf geht 
das Arduino-Bashing los, welches mindestens 10 mal mehr Traffic 
verursacht, als das Ausgangsposting und die kurze Antwort darauf.

Und dann wird sich hier dauernd übertrieben über Bildformate 
aufgeregt...

von Maxim B. (max182)


Lesenswert?

Wolfgang schrieb:
> Du könntest eine Arduino IDE für Visual Studio verwenden. Dann könntest
> du überall rein gucken.
> https://www.visualmicro.com/

dafür braucht man neumodische Windows, aber die bremst zu stark, wie 
auch neumodische Atmel Studio. Mit von mir benutzten AVR Atudio 4.19 und 
Windows XP geht das leider nicht. Und neue Computer nur dafür zu kaufen 
habe ich wenig Lust.
Mit Arduino IDE sieht alles wie eine Katze im Sack: du schreibst etwas, 
und IDE gibt zurück ein paar kb Code. Was, warum, wie genau - das bleibt 
alles versteckt.

von Old P. (Firma: nix) (old-papa)


Lesenswert?

Maxim B. schrieb:

> dafür braucht man neumodische Windows, aber die bremst zu stark, wie
> auch neumodische Atmel Studio. Mit von mir benutzten AVR Atudio 4.19 und
> Windows XP geht das leider nicht. Und neue Computer nur dafür zu kaufen
> habe ich wenig Lust.

Tja, ohne Arme keine Kekse....

> Mit Arduino IDE sieht alles wie eine Katze im Sack: du schreibst etwas,
> und IDE gibt zurück ein paar kb Code. Was, warum, wie genau - das bleibt
> alles versteckt.

Dann nutze was Anderes, niemand wird zu Arduino gezwungen.
Mit etwas Übung kann man Code auch direkt als HEX zu Papier bzw. in den 
Flash bringen.
Ich korrigiere:... mit viel Übung, sehr viel Übung....
Dann weiß Du aber auch, was der Code macht und was nicht. Wie groß er 
wird hängt dann neben den technischen Grenzen auch nur von Deinem Können 
ab.

Also: Frisch ans Werk!

Old-Papa

von M. K. (sylaina)


Lesenswert?

Frank B. schrieb:
> Und dann wird sich hier dauernd übertrieben über Bildformate
> aufgeregt...

Naja, ein falsches Bildformat (mehrer Megabyte statt einige hundert 
Kilobyte) verursacht nun mal erheblich mehr Trafic als 100 sinnlose 
Posts ;)

: Bearbeitet durch User
von Martin H. (horo)


Lesenswert?

Maxim B. schrieb:
> Mit Arduino IDE sieht alles wie eine Katze im Sack: du schreibst etwas,
> und IDE gibt zurück ein paar kb Code. Was, warum, wie genau - das bleibt
> alles versteckt.

Wenn Du dieses für die AVR-Lib geschriebene Programm...

M. K. schrieb:
> Mein Blink-Beispiel in C als Äquivalent zum Blinkbeispiel der
> Arduino-IDE.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
int main(void)
5
{
6
    DDRB = (1 << PB5);
7
    for(;;){
8
        PORTB |= (1 << PB5);
9
        _delay_ms(1000);
10
        PORTB &= ~(1 << PB5);
11
        _delay_ms(1000);
12
    }
13
    return 0;   /* wird nie erreicht */
14
}

...  exact so in eine *.ino einträgst und mit der Arduino-IDE übersetzt, 
dann erhälst Du dies, wie bereits geschrieben:

Arduino Fanboy D. schrieb:
> Arduino sagt zu deinem Code:
>> Der Sketch verwendet 178 Bytes (0%) des Programmspeicherplatzes.
>> Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers,

Das Ergebnis ist nicht anders, als wenn Du avr-gcc von Hand aufrufst, 
nichts mit

Maxim B. schrieb:
> IDE gibt zurück ein paar kb Code.

von Martin H. (horo)


Lesenswert?

Nachtrag:

Das Hex-File ist 525 ASCII-Byte lang und besteht zu über der Hälfte aus 
den Interrupt-Vektoren:
1
:100000000C9434000C943E000C943E000C943E0082
2
:100010000C943E000C943E000C943E000C943E0068
3
:100020000C943E000C943E000C943E000C943E0058
4
:100030000C943E000C943E000C943E000C943E0048
5
:100040000C943E000C943E000C943E000C943E0038
6
:100050000C943E000C943E000C943E000C943E0028
7
:100060000C943E000C943E0011241FBECFEFD8E04C
8
:10007000DEBFCDBF0E9440000C9457000C940000DE
9
:1000800080E284B92D9A2FEF83ED90E321508040D8
10
:100090009040E1F700C000002D982FEF83ED90E332
11
:1000A000215080409040E1F700C00000EBCFF89471
12
:0200B000FFCF80
13
:00000001FF

von Old P. (Firma: nix) (old-papa)


Lesenswert?

Martin H. schrieb:
> Nachtrag:
>
> Das Hex-File ist 525 ASCII-Byte lang und besteht zu über der Hälfte aus
> den Interrupt-Vektoren:
>
>
1
> :100000000C9434000C943E000C943E000C943E0082
2
> :100010000C943E000C943E000C943E000C943E0068
3
> :100020000C943E000C943E000C943E000C943E0058
4
> :100030000C943E000C943E000C943E000C943E0048
5
> :100040000C943E000C943E000C943E000C943E0038
6
> :100050000C943E000C943E000C943E000C943E0028
7
> :100060000C943E000C943E0011241FBECFEFD8E04C
8
> :10007000DEBFCDBF0E9440000C9457000C940000DE
9
> :1000800080E284B92D9A2FEF83ED90E321508040D8
10
> :100090009040E1F700C000002D982FEF83ED90E332
11
> :1000A000215080409040E1F700C00000EBCFF89471
12
> :0200B000FFCF80
13
> :00000001FF
14
>

Aha.... U d wo ist das Problem bei 32kB Flash?

Old-Papa

von Martin H. (horo)


Lesenswert?

Maxim B. schrieb:
> Was, warum, wie genau - das bleibt alles versteckt.

Dem kannst Du mit
1
avr-objdump -d /tmp/arduino_build_*/blink.ino.elf
 auf den Grund gehen:
1
/tmp/arduino_build_804693/blink.ino.elf:     file format elf32-avr
2
3
4
Disassembly of section .text:
5
6
00000000 <__vectors>:
7
   0:   0c 94 34 00     jmp     0x68    ; 0x68 <__ctors_end>
8
   4:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
9
   8:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
10
   c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
11
  10:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
12
  14:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
13
  18:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
14
  1c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
15
  20:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
16
  24:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
17
  28:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
18
  2c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
19
  30:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
20
  34:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
21
  38:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
22
  3c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
23
  40:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
24
  44:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
25
  48:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
26
  4c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
27
  50:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
28
  54:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
29
  58:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
30
  5c:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
31
  60:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
32
  64:   0c 94 3e 00     jmp     0x7c    ; 0x7c <__bad_interrupt>
33
34
00000068 <__ctors_end>:
35
  68:   11 24           eor     r1, r1
36
  6a:   1f be           out     0x3f, r1        ; 63
37
  6c:   cf ef           ldi     r28, 0xFF       ; 255
38
  6e:   d8 e0           ldi     r29, 0x08       ; 8
39
  70:   de bf           out     0x3e, r29       ; 62
40
  72:   cd bf           out     0x3d, r28       ; 61
41
  74:   0e 94 40 00     call    0x80    ; 0x80 <main>
42
  78:   0c 94 57 00     jmp     0xae    ; 0xae <_exit>
43
44
0000007c <__bad_interrupt>:
45
  7c:   0c 94 00 00     jmp     0       ; 0x0 <__vectors>
46
47
00000080 <main>:
48
  80:   80 e2           ldi     r24, 0x20       ; 32
49
  82:   84 b9           out     0x04, r24       ; 4
50
  84:   2d 9a           sbi     0x05, 5 ; 5
51
  86:   2f ef           ldi     r18, 0xFF       ; 255
52
  88:   83 ed           ldi     r24, 0xD3       ; 211
53
  8a:   90 e3           ldi     r25, 0x30       ; 48
54
  8c:   21 50           subi    r18, 0x01       ; 1
55
  8e:   80 40           sbci    r24, 0x00       ; 0
56
  90:   90 40           sbci    r25, 0x00       ; 0
57
  92:   e1 f7           brne    .-8             ; 0x8c <main+0xc>
58
  94:   00 c0           rjmp    .+0             ; 0x96 <main+0x16>
59
  96:   00 00           nop
60
  98:   2d 98           cbi     0x05, 5 ; 5
61
  9a:   2f ef           ldi     r18, 0xFF       ; 255
62
  9c:   83 ed           ldi     r24, 0xD3       ; 211
63
  9e:   90 e3           ldi     r25, 0x30       ; 48
64
  a0:   21 50           subi    r18, 0x01       ; 1
65
  a2:   80 40           sbci    r24, 0x00       ; 0
66
  a4:   90 40           sbci    r25, 0x00       ; 0
67
  a6:   e1 f7           brne    .-8             ; 0xa0 <main+0x20>
68
  a8:   00 c0           rjmp    .+0             ; 0xaa <main+0x2a>
69
  aa:   00 00           nop
70
  ac:   eb cf           rjmp    .-42            ; 0x84 <main+0x4>
71
72
000000ae <_exit>:
73
  ae:   f8 94           cli
74
75
000000b0 <__stop_program>:
76
  b0:   ff cf           rjmp    .-2             ; 0xb0 <__stop_program>

von Einer K. (Gast)


Lesenswert?

Martin H. schrieb:
> Dem kannst Du mitavr-objdump -d /tmp/arduino_build_*/blink.ino.elf auf
> den Grund gehen:
Das habe ich mir in den Build Prozess eingebaut. wird also bei jedem 
Kompilieren automatisch von der IDE mitgemacht.
Wenn Interesse besteht, mag ich das "Wie" gerne hier kund tun.
Schöner daran ist, dass der C/C++ Quellcode da noch mit eingeflochten 
wird.
Da fällt einem die Zuordnung Hochsprache zu generiertem ASM etwas 
leichter, wenn da nicht die Optimierung wäre....

Maxim B. schrieb:
> Mit Arduino IDE sieht alles wie eine Katze im Sack: du schreibst etwas,
> und IDE gibt zurück ein paar kb Code. Was, warum, wie genau - das bleibt
> alles versteckt.
Warum sofort behaupten und beschweren, anstatt nach Möglichkeiten 
fragen!


Alles, nahezu alles, liegt im Quellcode vor.
(auf Github und/oder auch auf deinem Rechner)
Von allen Komponenten .
Wenn man die ausführlichen Ausgaben aktiviert, sieht man jede Datei, 
welche dem Kompiler zum Fraß vorgeworfen wird.
Man kann den Vorgang beobachten, und analysieren.
Jede dieser Dateien im Editor seiner Wahl öffnen.
Und schlussendlich, wie schon gesagt wurde, kann man den generierten 
Code mit objdump lesbar machen

Ja, du hast recht, es ist vieles erstmal verborgen.
Aber wenn man will, ist der Blick möglich.

von M. K. (sylaina)


Lesenswert?

Martin H. schrieb:
> ...  exact so in eine *.ino einträgst und mit der Arduino-IDE übersetzt,
> dann erhälst Du dies, wie bereits geschrieben

Und das ändert nichts daran, dass das ein C-Programm ist und kein 
Arduino-Programm. Das verstehen hier anscheinend einige nicht. Man kann 
auch mittels C/C-Compiler ein Assemblerprogramm übersetzen, würde auch 
nichts daran ändern, dass das Assemblerprogramm immer noch ein 
Assemblerprogramm ist und dadurch nicht zu einem C-Programm wird.

von M. K. (sylaina)


Lesenswert?

Martin H. schrieb:
> Das Ergebnis ist nicht anders, als wenn Du avr-gcc von Hand aufrufst

Wundert auch nicht da die Arduino-IDE ja u.a. den avr-gcc benutzt da der 
ja Teil des Pakets ist ;)

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> Und das ändert nichts daran, dass das ein C-Programm ist und kein
> Arduino-Programm.

Ein C Programm wird von einem C Kompiler übersetzt.
Ein C++ Programm von einem C++ Kompiler.
Wenn du den Code in eine *.ino Datei stopfst, ist es C++.

Fertig und aus.
Es gibt keinen Arduino Kompiler.
Aber es gibt den Builder.
Und wenn es da erfolgreich durch geht, ist es ein Arduino Programm.
So lautet meine Definition.
Egal, ob C, C++ oder ASM

M. K. schrieb:
> Das verstehen hier anscheinend einige nicht.
Nein deine Definition verstehe ich wirklich nicht.

Wann ist ein Arduino Programm ein Arduino Programm?

von M. K. (sylaina)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wann ist ein Arduino Programm ein Arduino Programm?

In meinem laienhaften Verständniss wenn es folgende Syntax hat:
1
void setup(){
2
}
3
void loop(){
4
}
Ich hab z.B. noch nicht am Blink-Beispiel gesehen, wo im Code die 
Library angegeben werden muss, damit das Arduino-Programm auch weiß, was 
delay(1000); heißt oder was ein pinMode() ist oder was man unter einem 
OUTPUT verstehen darf.

Sorry, mir ist inzwischen klar warum du dieses eigentlich Problem nicht 
verstehst: Du willst es einfach nicht verstehen. Mir ist die Sache jetzt 
echt zu blöd geworden, verarschen kann ich mich alleine. Denn ich glaube 
nicht, dass du zu blöd bist zu verstehen was ein Arduino-Programm ist 
und was ein C-Programm oder Assembler-Programm ist.

Beitrag #6403485 wurde vom Autor gelöscht.
von Einer K. (Gast)


Lesenswert?

M. K. schrieb im Beitrag #6403485:
> Arduino Fanboy D. schrieb:
>> Wenn du den Code in eine *.ino Datei stopfst, ist es C++.
>
> Das ist übrigens falsch.
Was ist denn richtig?

M. K. schrieb:
> In meinem laienhaften Verständniss wenn es folgende Syntax hat:
> void setup(){
> }
> void loop(){
> }
Ja, der Arduino Präprozessor prüft das Vorhandensein dieser Funktionen 
und wählt dann seine main(), welcher die Timer initialisiert, und die 
genannten Funktionen aufruft.
Ansonsten muss man eine eigene main() bauen.

von Einer K. (Gast)


Lesenswert?

Nachtrag:

Der Bau einer eigenen main() verhindert die automatische 
intitialisierung von Timern/PWM und des ADC
Diese Dinge sind dann im folgenden Programm nicht mehr nutzbar.
Logisch, oder?

Andere Dinge des Frameworks, die nicht von der Initialisierung abhängig 
sind funktionieren weiter.

Hier so eine Mischform:
1
#include <Arduino.h>
2
3
4
int main() 
5
{
6
  pinMode(13,OUTPUT);
7
8
9
  for(;;) 
10
  {
11
    digitalWrite(13,!digitalRead(13));
12
    _delay_ms(1000);
13
  }
14
}

Ist das jetzt ein C, C++ oder Arduino Programm?

Wobei ich die Frage für unzulässig halte, denn C und C++ sind Sprachen, 
und Arduino ist nur eine Framework, welches in diesen Sprachen(+ASM) 
geschrieben ist.
Die Frage setzt Äpfel und Birnen in Relation zu dem Korb.
Körbe kann(sollte?) man nicht essen.

von Cyblord -. (cyblord)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wobei ich die Frage für unzulässig halte, denn C und C++ sind Sprachen,
> und Arduino ist nur eine Framework, welches in diesen Sprachen(+ASM)
> geschrieben ist.
> Die Frage setzt Äpfel und Birnen in Relation zu dem Korb.
> Körbe kann(sollte?) man nicht essen.

Das ist allerdings korrekt.

Aber es ist Bezeichnend das nicht wenige Nutzer "Arduino" als weitere 
Programmiersprache nach C und C++ ansehen.

von Einer K. (Gast)


Lesenswert?

Cyblord -. schrieb:
> Aber es ist Bezeichnend das nicht wenige Nutzer "Arduino" als weitere
> Programmiersprache nach C und C++ ansehen.

Viele wissen anfangs nicht, mit welcher Sprache sie es da überhaupt zu 
tun bekommen. Da liegt das Wort "Arduino Sprache" gar nicht so fern. 
Denen sagt man einmal, dass es in der Hauptsache C++ ist, dann geht die 
Kröte meist runter.

Schlimmer sind die älteren Semester, welche von einer "Arduino Sprache" 
sprechen und darauf beharren. Die sind nerviger, als die Anfänger.
Die stehen sich selber und den Anfängern mit ihren (Vor)Urteilen im Wege 
rum.

von Martin H. (horo)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das habe ich mir in den Build Prozess eingebaut. wird also bei jedem
> Kompilieren automatisch von der IDE mitgemacht.
> Wenn Interesse besteht, mag ich das "Wie" gerne hier kund tun.
> Schöner daran ist, dass der C/C++ Quellcode da noch mit eingeflochten
> wird.

Magst Du uns Deine platform.local.txt zeigen? Ich wäre interessiert 
(auch weil ich viel „reines“ C programmiere).

von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

Martin H. schrieb:
> Magst Du uns Deine platform.local.txt zeigen?
Meine Bastelstube, soll ich zeigen, und dann auch noch die unaufgeräumte 
Ecke ....
(ist mir auch ein kein wenig peinlich)

OK.

Dann auch die boards.local.txt

von Wolfgang (Gast)


Lesenswert?

M. K. schrieb:
> In meinem laienhaften Verständniss wenn es folgende Syntax hat:
> void setup(){
> }
> void loop(){
> }

Das sind genau 2 Funktionen, die im Hauptprogramm aufgerufen werden. Und 
das Hauptprogramm main.cpp bei Arduino sieht wie folgt aus, wenn du mal 
gucken magst:
1
int main(void)
2
{
3
  init();
4
  initVariant();
5
6
#if defined(USBCON)
7
  USBDevice.attach();
8
#endif
9
  
10
  setup();
11
    
12
  for (;;) {
13
    loop();
14
    if (serialEventRun) serialEventRun();
15
  }
16
  return 0;
17
}
Und natürlich müssen dann setup() und loop() mal irgendwo bereit 
gestellt werden, sonst meckert spätestens der Linker.

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
Noch kein Account? Hier anmelden.