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?
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.
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.
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! :)
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.
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....
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. ;)
Arduino Fanboy D. schrieb:> Um den Bootloader zu flashen, muss man den Stecker auch einlöten.
Das ist doch Unfug. Wozu wurden Federkontaktstifte erfunden?
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.)
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
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.)
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
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.
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.
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.
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.
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.
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. ;-)
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.
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. ;)
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.htmlhttps://www.reichelt.de/wannenstecker-10-polig-gewinkelt-wsl-10w-p22818.html
Ok, das muss man auch haben - sollte aber hinzukriegen sein.
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
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.
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.
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.
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
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.
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.
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.
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.
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.
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
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.
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
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. ;)
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.
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?
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?).
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
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
intmain()
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
voidsetup()
3
{
4
5
}
6
7
voidloop()
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
voidsetup()
5
{
6
Serial.begin(9600);
7
Serial<<"Start: "<<__FILE__<<endl;
8
}
9
10
voidloop()
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(bytepin=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.
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...
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.
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.
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. ;)
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"
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.
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. ;)
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.
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/
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.
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.
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.
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.
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.
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?
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.
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.
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?
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.
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.
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.
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.
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...
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.
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
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 ;)
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
intmain(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
return0;/* 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.
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.
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.
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 ;)
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?
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.
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.
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
intmain()
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.
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.
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.
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).
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
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
intmain(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
return0;
17
}
Und natürlich müssen dann setup() und loop() mal irgendwo bereit
gestellt werden, sonst meckert spätestens der Linker.