Forum: Mikrocontroller und Digitale Elektronik Umstieg von Arduino auf "klassische" IC Programmierung


von Christian E. (icfan)


Lesenswert?

Hi!

Ich habe aktuell ein Projekt mit einem Arduino in "der Entwicklung" und 
überlege nun von Arduino direkt auf "klassische" IC Programmierung um zu 
steigen. Vorher würde ich aber gerne noch ein paar Fragen beantwortet 
haben.

Ich umreisse kurz das Projekt damit klar ist worum es geht.

Prinzipiell ist es ein Controller der 3 Inputs hat und anhand dieser 
eine Hand voll Outputs regelt die auch die Inputs beeinflussen.

Inputs:
- Leitfähigkeitssensor
- pH Sensor
- DHT22

Outputs:
- Eine Hand voll Relays
- Ein 230V ~60W Lüftermotor der stufenlos gesteuert werden soll
- SD Karte
- Ethernet oder Bluetooth

Gründe wieso ich überlege es "mir an zu tun" mich mit IC's näher 
auseinander zu setzen:

- Ich habe aktuell den größten Arduino mit dem Atmega 2560. Der hat, 
soweit ich weiß, doch recht viel Platz für Code. Die Libraries und der 
ganze Overhead verbrauchen jedoch mehr Platz als ich dachte. Ich hatte 
z.B. einen simplen Code geschrieben um die Daten des DHT's mit einer 
Timestamp auf der SD zu loggen und die aktuellen Daten online abrufen zu 
können über Ethernet. Diese paar Zeilen mit 5 Libraries verbrauchen 
bereits rund 10% der 258kBytes. Das ist doch einiges für ein paar Zeilen 
Code. Meine Angst ist einfach, dass mir der Platz ausgehen wird. Ich 
brauche für das Projekt zwar nicht mehr deutlich mehr Libraries aber der 
Code wird wohl gut 10 mal so lange.
- Für die EC und pH Sensoren verwende ich aktuell ein fertiges 
Interface. (www.atlas-scientific.com) 71$ + Zoll&MwSt ist jedoch schon 
mehr als meine komplette Platine wohl kosten wird. Daher würde ich es 
eventuell direkt mit dem großen IC lösen oder 2 kleine IC's extra 
programmieren die sich dieser Aufgabe annehmen. Das liegt aber wohl 
schon deutlich ausserhalb der Möglichkeiten von Arduino.
- Ich möchte den fertigen Controller eventuell kommerziell nutzen. Hier 
entfällt wohl sowieso die Nutzung von Arduino. Kosten sind dann auch ein 
wichtiges Thema welches beim Arduino, bzw. vor allem bei den vorher 
erwähnten Interfaces schwierig wird.
- Ich möchte das komplette System, also den IC sowie alle Teile wie 
Transistoren, LCD's und Relays auf einer Platine haben. Das ist mit 
Arduino nicht wirklich möglich. Die einzige Möglichkeit wäre es einen 
Arduino kompatiblen IC auf die Platine zu setzen und ihn über das 
Interface und der IDE mit Arduino Code und Libraries zu füttern.

Somit spricht eigentlich alles dafür. Ich habe jedoch die Sorge, dass 
das Projekt für mich alleine nicht mehr machbar ist, wenn ich es nicht 
mit Arduino realisieren kann.

Somit kommen wir zu meiner eigentlichen Frage ...

Wie weit ist die "klassische" IC Programmierung mit C oder C++ von 
Arduino entfernt?

Ich habe eine technische Schule absolviert und bin auf jeden Fall 
technikaffin. Ich hatte jedoch, gerade im Bereich Elektronik, absolut 
keine Ahnung bevor ich mich Arduino gewidmet habe. Elektronik, Steuer- & 
Regeltechnik war eigentlich immer mein ungeliebtestes Fach. :D Meine 
Codekenntnisse beschränkten sich auf HTML Fetzen die von früheren Zeiten 
noch hängen geblieben sind und einer Grundidee von VB und vielleicht C. 
Aber wirklich nur absolutes Basiswissen in C wie "Was ist eine 
Schleife?" etc.
Ich habe davor noch nie mit IC's gearbeitet und meine praktische 
Codeerfahrung beschränkte sich auf HTML und VB in der Schule.
Mittlerweile komme ich mit Arduino recht gut zurecht und traue mir auch 
zu ein Projekt dieser Größe mit Hilfe der entsprechenden Libraries zu 
realisieren. Und hier kommt der Knackpunkt ... Alleine wenn ich diese 
versuche zu lesen verstehe ich schon sehr wenig. Ich habe mich mal ein 
wenig mit dem Schreiben von Libraries auseinander gesetzt aber leider 
hat das nur wenig geholfen.

Was meint ihr: Ist solch ein Projekt für jemanden mit Grundkenntnissen 
zu stemmen? Ich lerne eigentlich sehr schnell aber es hat schon einiges 
an Arbeit benötigt um überhaupt so weit zu kommen z.B. einen DHT 
auszulesen und zu loggen und diese Daten online verfügbar zu machen, 
trotz fertiger Libraries und fertigem Ethernet-Modul. Meine Sorge ist, 
dass ich anschließend aus dem Lernen nicht mehr raus komme und das 
Projekt nie fertig wird. Externe Hilfe ist keine Option aus persönlichen 
aber auch kostentechnischen Gründen. Nur gerade Dinge wie SD-Karten 
beschreiben, Ethernet-Funktionen, das arbeiten mit pH oder 
Leitfähigkeitssensoren oder das Leistungssteuern eines 60W 
Wechselstrommotors sind denke ich keine trivialen Dinge. Ist so etwas 
eurer Einschätzung nach im Alleingang von jemandem der mit viel 
Motivation aus der Hobby Ecke kommt machbar?

Freue mich auf die Diskussion! :)



Grüße,
Christian

von Karl H. (kbuchegg)


Lesenswert?

Christian E. schrieb:

> - Ich habe aktuell den größten Arduino mit dem Atmega 2560. Der hat,
> soweit ich weiß, doch recht viel Platz für Code. Die Libraries und der
> ganze Overhead verbrauchen jedoch mehr Platz als ich dachte. Ich hatte
> z.B. einen simplen Code geschrieben um die Daten des DHT's mit einer
> Timestamp auf der SD zu loggen und die aktuellen Daten online abrufen zu
> können über Ethernet. Diese paar Zeilen mit 5 Libraries verbrauchen
> bereits rund 10% der 258kBytes. Das ist doch einiges für ein paar Zeilen
> Code.

'Ein paar Zeilen' ist gut.
Das was du nicht siehst, dass ist ein komplettes Filesystem und ein 
Ethernet-Stack, welches du einfach so "geerbt" hast ohne dich darum 
kümmern zu müssen.
Deine paar selbstgeschriebenen Zeilen Code verbrauchen von den 25k 
gerade mal ein paar Byte. Der Rest ist Infrastruktur, den dir die Basis 
zur Verfügung stellt, damit du eben auf SD Karte und Ethernet Zugang 
hast. Und gerade diese beiden Themenkreise sind schon ordentliche 
Brocken. Di sind nicht mit ein paar Anweisungen und 30 Byte Code 
implementiert.

> Meine Angst ist einfach, dass mir der Platz ausgehen wird. Ich
> brauche für das Projekt zwar nicht mehr deutlich mehr Libraries aber der
> Code wird wohl gut 10 mal so lange.

Dein Code ist das, was vom Komplettprogramm am allerwenigsten Platz 
benötigt. 10 mal 100 Bytes sind auch erst 1 kB (über den Daumen).

> Wie weit ist die "klassische" IC Programmierung mit C oder C++ von Arduino 
entfernt?

Lass es. Alleine bis du einen Ethernet Stack am laufen hast, vergehen 
wahrscheinlich Monate. Überhaupt mit den Voraussetzungen
> Aber wirklich nur absolutes Basiswissen in C wie "Was ist eine Schleife?" etc.

: Bearbeitet durch User
von Student (Gast)


Lesenswert?

Christian E. schrieb:
> Hi!
>
> Ich habe aktuell ein Projekt mit einem Arduino in "der Entwicklung" und
> überlege nun von Arduino direkt auf "klassische" IC Programmierung um zu
Das schonmal vorweg: IC Programmierung hört sich komisch an, zumal 
Arduino auch ICs hat...
Aber darum soll es hier ja nicht gehen.
> steigen. Vorher würde ich aber gerne noch ein paar Fragen beantwortet
> haben.
>
> Ich umreisse kurz das Projekt damit klar ist worum es geht.
>
> Prinzipiell ist es ein Controller der 3 Inputs hat und anhand dieser
> eine Hand voll Outputs regelt die auch die Inputs beeinflussen.
>
> Inputs:
> - Leitfähigkeitssensor
> - pH Sensor
> - DHT22
>
> Outputs:
> - Eine Hand voll Relays
> - Ein 230V ~60W Lüftermotor der stufenlos gesteuert werden soll
> - SD Karte
> - Ethernet oder Bluetooth

Das ist für den Einstieg schonmal eine Nummer...

> Gründe wieso ich überlege es "mir an zu tun" mich mit IC's näher
> auseinander zu setzen:
>
> - Ich habe aktuell den größten Arduino mit dem Atmega 2560. Der hat,
> soweit ich weiß, doch recht viel Platz für Code. Die Libraries und der
> ganze Overhead verbrauchen jedoch mehr Platz als ich dachte. Ich hatte
> z.B. einen simplen Code geschrieben um die Daten des DHT's mit einer
> Timestamp auf der SD zu loggen und die aktuellen Daten online abrufen zu
> können über Ethernet. Diese paar Zeilen mit 5 Libraries verbrauchen
> bereits rund 10% der 258kBytes. Das ist doch einiges für ein paar Zeilen
> Code. Meine Angst ist einfach, dass mir der Platz ausgehen wird. Ich
> brauche für das Projekt zwar nicht mehr deutlich mehr Libraries aber der
> Code wird wohl gut 10 mal so lange.
Naja, auch wenn dein Code länger wird, besteht er mit Sicherheit auch 
aus einer
Menge sowieso schon vorhandenen Library-Funktionen, die nur einmal im
Speicher stehen müssen.
> - Für die EC und pH Sensoren verwende ich aktuell ein fertiges
> Interface. (www.atlas-scientific.com) 71$ + Zoll&MwSt ist jedoch schon
> mehr als meine komplette Platine wohl kosten wird. Daher würde ich es
> eventuell direkt mit dem großen IC lösen oder 2 kleine IC's extra
> programmieren die sich dieser Aufgabe annehmen. Das liegt aber wohl
> schon deutlich ausserhalb der Möglichkeiten von Arduino.
Das geht auch mit Arduinos, aber ist wahrscheinlich nicht wirklich 
notwendig; das sollte der große Mikrocontroller auch noch nebenbei 
hinbekommen.
> - Ich möchte den fertigen Controller eventuell kommerziell nutzen. Hier
> entfällt wohl sowieso die Nutzung von Arduino. Kosten sind dann auch ein
> wichtiges Thema welches beim Arduino, bzw. vor allem bei den vorher
> erwähnten Interfaces schwierig wird.
> - Ich möchte das komplette System, also den IC sowie alle Teile wie
> Transistoren, LCD's und Relays auf einer Platine haben. Das ist mit
> Arduino nicht wirklich möglich. Die einzige Möglichkeit wäre es einen
> Arduino kompatiblen IC auf die Platine zu setzen und ihn über das
> Interface und der IDE mit Arduino Code und Libraries zu füttern.
Das ist richtig; mit einer eigenen Platine ist es sehr viel eleganter, 
erfordert aber auch die für Einsteiger nicht einfache Fähigkeit, 
funktionierende Platinenlayouts in Eagle, Target... zu erstellen.
> Somit spricht eigentlich alles dafür. Ich habe jedoch die Sorge, dass
> das Projekt für mich alleine nicht mehr machbar ist, wenn ich es nicht
> mit Arduino realisieren kann.
Das kann mal schnell passieren, aber falls es fertig wird, dann hast du 
sicherlich eine Menge mehr verstanden.
> Somit kommen wir zu meiner eigentlichen Frage ...
>
> Wie weit ist die "klassische" IC Programmierung mit C oder C++ von
> Arduino entfernt?
Prinzipiell nicht so weit, denn auch hier kannst du in C oder C++ 
programmieren. Allerdings stehen natürlich möglicherweise nicht so 
zahlreiche passende Librarys zur Verfügung.
> Ich habe eine technische Schule absolviert und bin auf jeden Fall
> technikaffin. Ich hatte jedoch, gerade im Bereich Elektronik, absolut
> keine Ahnung bevor ich mich Arduino gewidmet habe. Elektronik, Steuer- &
> Regeltechnik war eigentlich immer mein ungeliebtestes Fach. :D Meine
> Codekenntnisse beschränkten sich auf HTML Fetzen die von früheren Zeiten
> noch hängen geblieben sind und einer Grundidee von VB und vielleicht C.
> Aber wirklich nur absolutes Basiswissen in C wie "Was ist eine
> Schleife?" etc.
Dann frage ich mich, wie du einen Webserver bedienen kannst?
> Ich habe davor noch nie mit IC's gearbeitet und meine praktische
> Codeerfahrung beschränkte sich auf HTML und VB in der Schule.
> Mittlerweile komme ich mit Arduino recht gut zurecht und traue mir auch
> zu ein Projekt dieser Größe mit Hilfe der entsprechenden Libraries zu
> realisieren. Und hier kommt der Knackpunkt ... Alleine wenn ich diese
> versuche zu lesen verstehe ich schon sehr wenig. Ich habe mich mal ein
> wenig mit dem Schreiben von Libraries auseinander gesetzt aber leider
> hat das nur wenig geholfen.
>
> Was meint ihr: Ist solch ein Projekt für jemanden mit Grundkenntnissen
> zu stemmen?
Wenn du C nicht kannst, und nicht weiß, wie man eine kleine Platine für 
einen Mikrocontroller mit allem drum und dran (Spannungsversorgung, 
Programmierschnittstelle, ...), dann würde ich das nicht als 
Grundkenntnisse bezeichnen.
Hättest du welche, wäre es sicherlich machbar, wenn auch kein einfaches 
Unterfangen, aber nach dem was du so schreibst, glaube ich, würde es 
sehr sportlich.
Wobei das wieder darauf ankommt, ob du dann denn selbst etwas 
programmieren willst, oder wieder nur fertiges etwas umbiegst, was 
sicherlich nicht ganz so schwer ist.
> Ich lerne eigentlich sehr schnell aber es hat schon einiges
> an Arbeit benötigt um überhaupt so weit zu kommen z.B. einen DHT
> auszulesen und zu loggen und diese Daten online verfügbar zu machen,
> trotz fertiger Libraries und fertigem Ethernet-Modul. Meine Sorge ist,
> dass ich anschließend aus dem Lernen nicht mehr raus komme und das
> Projekt nie fertig wird. Externe Hilfe ist keine Option aus persönlichen
> aber auch kostentechnischen Gründen. Nur gerade Dinge wie SD-Karten
> beschreiben, Ethernet-Funktionen, das arbeiten mit pH oder
> Leitfähigkeitssensoren oder das Leistungssteuern eines 60W
> Wechselstrommotors sind denke ich keine trivialen Dinge. Ist so etwas
> eurer Einschätzung nach im Alleingang von jemandem der mit viel
> Motivation aus der Hobby Ecke kommt machbar?
Wie gesagt, machbar sicherlich, aber nur ein einem Größeren Zeitraum. 
Zunächst braucht es die Grundlagen, und die sollten an einem einfacheren 
Projekt erlernt werden.
Außerdem würde ich hier im Forum niemals schreiben, dass ich irgendetwas 
mit Netzspannung machen möchte, wenn ich nicht gerade viel Ahnung habe. 
Das wirst du aber sicherlich noch merken :D
> Freue mich auf die Diskussion! :)
>
> Grüße,
> Christian

von kopfkratzer (Gast)


Lesenswert?

kopfkratz
Also ich kenne ja nun nicht die Lizenzen für die Arduino Bibliotheken, 
wenn die nicht rein GPL sind sondern z.B. BSD kann man die auch 
kommerziell nutzen.
Ansonsten hat es Karl-Heinz auf den Punkt gebracht, wenn Du nicht selber 
in der Lage bist FAT32 für die SD zu programmieren und "stufenlos" einen 
230V Lüfter anzusteuern, solltest Du es besser lassen.
Von den gesetzlichen Anforderungen bei kommerzieller Nutzung wollen wir 
erstmal Abstand halten :-P

von F. F. (foldi)


Lesenswert?

Also ich bin auf C umgestiegen und das was dir vorschwebt, vielleicht, 
aber auch nur vielleicht und mit viel lernen, kann ich so was in fünf 
bis sechs Jahren.
Hätte ich Zeit Vollzeit zu lernen, dann vielleicht in zwei Jahren, aber 
auch nur mit Vorlagen als Muster zum lernen, umschreiben oder 
integrieren.
One wire ist in Arduino in zwei Minuten gemacht, in C sicher auch nicht 
so schwer (hab ich noch nicht gebraucht, bzw. mit Arduino gemacht, 
weil's schnell gehen musste), aber all das andere ....

von Christian E. (icfan)


Lesenswert?

Danke für die konstruktiven Antworten!

Vorweg möchte ich sagen, dass ich wohl etwas tief gestapelt habe.

Mir ist absolut klar, dass 99% der Größe durch die Libraries kommt. Die 
restlichen Libraries die ich benötige werden wohl auch noch Platz finden 
aber ich habe das Gefühl, dass es einfach eine Platzverschwendung ist. 
Wenn ich den Controller kommerziell nutzen möchte sind auch Kosten ein 
Faktor und ich denke ein Atmega2560 ist ein bisschen ein Overkill für 
mein Vorhaben. Ich bin einfach ein Fan davon Lösungen zu nutzen die der 
Problemstellung entsprechen und nicht einfach nach "Das reicht 5 mal - 
Das nehmen wir!" vor zu gehen. Dementsprechend würde ich gerne aus dem 
vollen IC-Angebot schöpfen können um die Geschwindigkeit und die 
Speichergröße an meine Anforderungen anpassen zu können. Mich stört 
auch, dass ich eigentlich nicht weiß, was in diesen Labraries vor sich 
geht und "es einfach funktioniert". Bin eher der Typ der gerne ganz 
genau weiß wie etwas funktioniert und genau weiß was er tut.

Eagle ist kein Ding. Ich habe in einem anderen Thread ein wenig 
Hilfestellung bekommen unm mit diesem Layout den Arduino mit den Pumpen 
und den Interfaces zu verbinden um eine Idee der Funktionsweise zu 
bekommen. (Mit CAD Systemen kann ich recht gut sollte ich noch erwähnen. 
Habe einiges in AutoCAD aber vor allem Inventor gemacht.)

http://abload.de/img/schaltungkgucb.jpg
http://abload.de/img/boardpkkp4.jpg

Also das Layout sehe ich noch als am machbarsten an um ehrlich zu sein.

Mir ist klar, dass ich den Arduino auch in C programmieren kann und es 
dann im Prinzip die selbe Geschichte ist. Ich meinte wie weit ist die 
übliche Arduino Programmierung (Mit der Arduino Sprache und all den 
Libraries) von einer Programmierung in reinem C++ z.B. entfernt.

Einen Webserver bedienen? Die paar Befehle in HTML bzw. get und send 
sind ja kein Kunststück. Noch dazu wo ja in der Beschreibung der 
ethernet library z.B. ein Beispiel dabei ist. Sind eine Hand voll get 
und send und ein paar Zeilen HTML.

Die Platine ist sicher kein Problem. Mit ein paar Datenblättern, 
Beispielen und vielleicht ein wenig Hilfestellung hier bekomme ich das 
schon hin.

Nein, ich kann kein C. Auch kein C++. Ich hab ab und an mal 
reingeschnüffelt aber ich würde nicht sagen, dass ich es beherrsche.

Gibt es denn etwas fertiges in die Richtung, dass ich mir zurechtbiegen 
könnte? Ist die Auswahl an Libraries ähnlich umfangreich wie beim 
Arduino?

Bezüglich Netzspannung mach ich mir mal keine Gedanken. Ich hatte in der 
Schule viel mit Netzspannung zu tun und solange man etwas Ahnung und 
Hausverstand hat, kann eigentlich nicht viel passieren.

von Karl H. (kbuchegg)


Lesenswert?

> Mich stört auch, dass ich eigentlich nicht weiß, was in
> diesen Labraries vor sich geht und "es einfach funktioniert".

Niemand hindert dich daran, dir den Source Code anzusehen und zu 
studieren.

> Ich meinte wie weit ist die übliche Arduino Programmierung
> (Mit der Arduino Sprache und all den Libraries) von einer
> Programmierung in reinem C++ z.B. entfernt

Sehr weit.
Der Unterschied ist ungefähr wie der, sich ein funktionierendes Auto zu 
kaufen und zu studieren, wie die Bedienelemente funktionieren und dem 
Versuch mit Blech und Nagelfeile sich selbst ein gelichwertiges Auto zu 
bauen.
Sei froh, wenn dir jemand die wirklich schwierigen Sachen abgenommen hat 
und freu dich daran, dass du nicht in die Tiefen eines FAT32 bzw. eines 
Ethernet-Stacks absteigen musst. FAT32 ist noch etwas einfacher, aber um 
einen Ethernet-Stack selbst zu schreiben, heißt es erst mal büffeln, 
büffeln, büffeln. Und das nicht zu knapp.

von Christian E. (icfan)


Lesenswert?

Weil ichs gerade lese ...

Mir ist schon klar was z.B. Phasenanschnittsteuerung ist und ich durfte 
sie auch schon oft in der Schule rechnen. Auch FAT32 ist mir ein 
Begriff. Habe mich mit der Organisation mal ein bisschen beschäftigt. 
Sind aber auch hier nur grobe Grundkenntnisse.

Mit den gesetzlichen Anforderungen was kommerzielle Nutzung angeht 
musste ich mich schonmal auseinandersetzen, wenn auch in einem etwas 
anderem Zusammenhang. (Tablets) Aber die kommerzielle Nutzung ist ja 
noch in fernerer Zukunft aber halt ein Punkt den ich schon jetzt 
miteinbeziehen möchte.

€dit: Gibt es nicht auch in C++ z.B. Libraries füt FAT32 oder Ethernet 
die mir den Großteil der Arbeit abnehmen?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Christian E. schrieb:

> €dit: Gibt es nicht auch in C++ z.B. Libraries füt FAT32 oder Ethernet
> die mir den Großteil der Arbeit abnehmen?

Sicher gibts die. Aber der Unterschied ist: die sind nicht für deine 
konkrete Hardware geschrieben. Und wenn doch, dann passen die 
Einzelteile nicht zusammen und du musst da erst mal Hand anlegen, um die 
soweit anzupassen, dass sie gemeinesam verwendbar sind. Bei Arduino ist 
dir das alles schon abgenommen.

Ich hab mir vor kurzem mal den Ethernet-Server vom Ulrich Radig für den 
Net-IO gezogen. Und dann ein paar Stunden damit verbracht den zu 
studieren um machzuvollziehen, wie die einzelnen Datenpakete durch den 
Stack wandern, bis sie dann endlich auf der Leitung sind. Wann welcher 
Header hinzugefügt wird, auf welcher Ebene die Pakete bis zur 
Bestätigung durch die Gegenstelle zwischengelagert werden, wie sie im 
Fehlerfall wiedergefunden werden und erneut in den laufenden 
Sendevorgang eingefädelt werden, etc. etc. Und ich KANN C und C++. Und 
das sogar, in aller Bescheidenheit, ziemlich gut. Wenn ich das von Grund 
auf programmieren muss, dann sitze ich erst mal ein paar Tage an den 
RFC, studiere anderen Code und brauche dann ein paar Tage bis Wochen, 
bis ich das implementiert und zu meiner Zufriedenheit getestet und 
debuggt habe.
Machbar ist es, keine Frage.
Wie gut sind eigentlich deine Kentnisse in Bezug auf dynamische 
Datenstrukturen? Denn ohne die, bzw. wie man die auf einem µC so 
organisiert, dass sie eben nicht mehr dynamisch allokiert werden sondern 
sich aus einem Pool bedienen, sind das um und auf bei derartigen Dingen.

: Bearbeitet durch User
von Seano L. (Gast)


Lesenswert?

Christian E. schrieb:
> Vorweg möchte ich sagen, dass ich wohl etwas tief gestapelt habe.
Mal was zu deinem Psychophänomen 'Gefühl wegen Platzverschwendung auf 
MC'.

Ich habe über Weihnachten ein Arduinoprojekt auf einen ATtiny13 
angepasst, weil ich davon noch viele rumliegen habe. Da hat mich auch 
die Sparmacke getroffen: "Die könnte man noch sinnvoll verwenden, 10 
Stck habe ich noch, 10 brauche ich, Pinanz. passt, Programm passt darauf 
optmiert evt. gerade noch so rein (SPI in Software abgespeckt nur auf 
das was ich brauche) -> ~800 byte insgesamt - puh Glück gehabt!"
Ich wusste vorher schon dass mich das Zeit kosten würde aber dass es 
mich nach kurzer Zeit schon dermassen anpissen würde hätte ich auch 
nicht erwartet, es wäre billiger gewesen die Dinger einfach wegzuwerfen, 
der Aufwand war grösser als das Mock-Up aufm Arduino. Der Port war 
eigentlich trivial, reine Codeersetzungen aber trotzdem macht man 
Fehler, muss testen, sucht sich nen Wolf im Code (Makrohölle).... Und 
wartbar sieht das jetzt alles nicht mehr sonderlich aus, in 1 Monat 
verstehe ich den Code garantiert nicht mehr aber die Arduinoprosa sicher 
noch nach einem Jahr. Eigentlich totale Zeitverschwendung, das war das 
letzte Projekt dieser Art um alten Schrott noch irgendwie sinnvoll 
einzusetzen, vorher wandert der Kram in die Tonne, Zeit ist Geld auch 
privat.

Spar dir den Aufwand mit 'optimalem' Prozessor der gerade noch passt, 
billiger sind die meist eh nicht (mehr), weil sie oft am auslaufen sind 
und nur noch für Grossabnehmer produziert werden die darauf angewiesen 
sind, die zahlen aber wieder andere Preise,...

Mach das Ding mit einem Arduino (ist ja eh schon fertig), flashe den 
Kram später auf einen nackten Proz, fertig ist der Lack. Zeit ist Geld, 
s.o.

Bis du mal richtig fit mit nacktem C auf einem MC bist das dauert ne 
Weile, du kannst ja nicht mal richtig C geschweige denn C++, da sehe ich 
eher die Gefahr dass du gar nicht zum Ziel kommst. Oder such dir 
jemanden der den Kram portiert, das wird billiger sein als die Zeit die 
du darauf verschwendest, ausser deine Zeit ist absolut nix wert.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

"Schwen" hat absolut recht. Um es noch mehr auf den Punkt zu bringen: 
Wieviel Arbeit musst du z.B. in die Programmierung investieren, um 
nacheher einen Controller verwenden zu können, der 2 EUR billiger ist? 
Beim Schritt von Arduino zum nackten AVR ist die Einsparung pro Gerät 
noch etwas größer als zwischen den einzelnen AVR-Typen, aber selbst bei 
20 EUR Ersparnis musst du schon eine Menge Geräte bauen und verkaufen, 
damit sich das lohnt.

Das übersehen viele Hobbyisten gerne. Die müssen Ihre Arbeitszeit aber 
auch nicht zwingend mit Geld aufrechnen, da geht es vielen eher um den 
Lerneffekt. Aber wenn man kommerzielle Projekte ohne solche Überlegungen 
angeht, lässt man es besser gleich bleiben.

Mit freundlichen Grüßen
Thorsten Ostermann

von Falk B. (falk)


Lesenswert?

@ Christian E. (icfan)

>aber ich habe das Gefühl, dass es einfach eine Platzverschwendung ist.

Das Gefühlt täuscht des öfteren. Was kostet ein 2560er AVR? Was kostet 
ein 64er AVR? Was macht du mit den gesparten Euros?

>Wenn ich den Controller kommerziell nutzen möchte sind auch Kosten ein
>Faktor und ich denke ein Atmega2560 ist ein bisschen ein Overkill für
>mein Vorhaben.

Wirklich? Gerade bei kleinsten Stückzahlen sind MATERIALKOSTEN deutlich 
weniger wichtig als Entwicklungskosten.

> Ich bin einfach ein Fan davon Lösungen zu nutzen die der
>Problemstellung entsprechen und nicht einfach nach "Das reicht 5 mal -
>Das nehmen wir!" vor zu gehen. Dementsprechend würde ich gerne aus dem
>vollen IC-Angebot schöpfen können um die Geschwindigkeit und die
>Speichergröße an meine Anforderungen anpassen zu können.

Du bist auf dem Holzweg. Du willst etwas optimieren, das noch nicht mal 
funktioniert. Das ist Unsinn.

http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung

>Mich stört
>auch, dass ich eigentlich nicht weiß, was in diesen Labraries vor sich
>geht und "es einfach funktioniert".

Das ist der Sinn der Sache! Du MUSST es nicht wissen! Um Auto zu fahren, 
muss man nicht wissen wie das Steuergerät für die Einspritzung 
funktioniert! Viele Leute wissen nicht mal, warum sie schalten müssen! 
und sie fahren trotzdem ganz gut!

> Bin eher der Typ der gerne ganz
> genau weiß wie etwas funktioniert und genau weiß was er tut.

Im PRINZIP ja, im Detail NEIN! Denn sonst könnte man sich die 
Bibliotheken spaen und immer alles selber machen. -> Sinnlos.

>Nein, ich kann kein C.

Wie programmierst du dann den Arduino? Das IST C, nur halt mit VIELEN 
Bibliotheken.

> Auch kein C++.

Ist ne ganz andere Liga, braucht man hier nicht.

>Gibt es denn etwas fertiges in die Richtung, dass ich mir zurechtbiegen
>könnte? Ist die Auswahl an Libraries ähnlich umfangreich wie beim
>Arduino?

Du willst ein Problem lösen, das nicht existiert! Nimm Arduino und sei 
glücklich. FAT32, Ethernetstack & Co programmiert man nicht selber! Man 
nutzt sinnvollerweise IMMER so weit wie möglich bestehende, gestestete, 
fertige Komponenten. DAS ist effizient! Oder willst du deinen Prozessor 
auch selber entwickeln? Selber Silizium schmelzen?

Mein Tip. Bring das alles erstmal mit Arduino, Evalboards, 
Lochrasteraubau und ähnlichem zum Laufen, dann sehen wir weiter. Und 
dann sollte man sich immer die Frage stellen.

Was kann ich optimieren?
Was spare ich dadurch ein? Zeit? Geld?(Plus)
Welchen Aufwand kostet die Optimierung? Zeit? Geld? (Minus)

Dann stellst du fest, dass sich gerade für kleine Stückzahlen 
vermeintliche Optimierungen von ein paar kB Flash und ein paar Euro für 
ein Evalboard nicht lohnen!
Extrem durchoptimierte Produkte lohnen sich erst bei großen und sehr 
großen Stückzahlen! Auch im Hobbybereich.

von PittyJ (Gast)


Lesenswert?

Ich habe gerade ein kleines Pojekt hier: Warten auf einen Taster. Dann 
soll ein bestehender I2C Kontroller geschaltet werden.

Reicht eigentlich ein AtTiny (o.ä.). Ich nehme aber einen Arduino weil:
Getestete, funktionierende Hardware mit Spannungsversorgung und 
Programmieradapter kommt für 20 Euro auf meinen Tisch.
Die Entwicklungsumgebung ist innerhalb von 10 Minuten geladen und 
installiert.
Dank der guten API wie digitalWrite() und Wire.beginTransmission() habe 
ich das Programm heute morgen schon fertig geschrieben.


Ich will keine nackte Hardware, da müßte ich erst mal eine Schaltung 
aufbauen und testen.
Ich müßte diverse kompliziertere Software installieren.
Ich müßte mich um Bits in Registern kümmern.

Damit wäre ich nicht heute morgen schon fertig geworden.
Und ob das Programm nun doppelt so groß ist, interessiert mich nicht. 
Die Geschwindigkeit reicht.

von cyblord (Gast)


Lesenswert?

PittyJ schrieb:
> Damit wäre ich nicht heute morgen schon fertig geworden.
> Und ob das Programm nun doppelt so groß ist, interessiert mich nicht.
> Die Geschwindigkeit reicht.

Waaas? Du hast das nicht alles von Hand in Brainf*ck implementiert?
Tztztz!!!

Mal im Ernst: genau aus den von Dir genannten Gründen sind Plattformen 
wie der Arduino so eine Bereicherung für die Hobby-Entwickler-Szene.

von Cyblord -. (cyblord)


Lesenswert?

Also ich habs schon oft erklärt, aber ich tus auch nochmal. Deine 
Schlussfolgerung ist falsch, weil sie von einer komplett falschen 
Prämisse ausgeht: Nämlich dass die Entwicklung direkt in C langsamer 
wäre als das von dir beschriebene Szenario. Nur DU bist langsamer in C, 
weil du es nicht kannst. Somit bist du in diesem Fall schneller, was 
aber nicht an Arduino sondern an dir liegt. Wenn du jetzt der ASM Crack 
wärst, dann wärst du in ASM schneller, auch weil du da schon alles für 
eingerichtet hast, inkl. libs und Funktionen usw.

> Damit wäre ich nicht heute morgen schon fertig geworden.
Ja DU, andere hätten nicht länger gebraucht. Auch in reinem C nutzt man 
libs. Niemand muss für sowas hergehen und eine 1Wire lib schreiben und 
niemand braucht länger einen Pin direkt zu setzen, nur weil er kein 
digitalWrite nutzt.

Wenn du damit zufrieden bist, wird es dir niemand ausreden, aber es 
stört einfach wenn dann immer und immer wieder behauptet wird, die 
Entwicklung ohne Arduino würde länger dauern. Grade von Arduino-Nutzern 
die ja gar nichts anderen kennen, aber natürlich in allem anderen das 
große Böse sehen, wo man 2 Wochen dahockt bevor eine LED blinkt.

Also nochmal: Es dauert nicht länger.

gruß cyblord

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

cyblord ---- schrieb:
>> Damit wäre ich nicht heute morgen schon fertig geworden.
> Ja DU, andere hätten nicht länger gebraucht.

Die Hardware dazu hast du dann aber sicher noch nicht...

von cyblord (Gast)


Lesenswert?

cyblord ---- schrieb:
> Nämlich dass die Entwicklung direkt in C langsamer
> wäre als das von dir beschriebene Szenario.

Äh, ist das nicht selbstverständlich? Wenn du per Lib auf dem Arduino 
einen Http-Request mit 10 Zeilen Code senden kannst - wie willst du das 
in der gleichen zeit OHNE libs in plain C hinbekommen?

Ich brauche ca. 60 Sekunden um die 10 zeilen runterzutippen.
Dann erklär mir doch mal wie DU in 60 Sekunden einen kompletten TCP/IP 
Stack implementierst (und das ist ja nur ein Teil des Problems)!

von Cyblord -. (cyblord)


Lesenswert?

Markus schrieb:
> cyblord ---- schrieb:
>>> Damit wäre ich nicht heute morgen schon fertig geworden.
>> Ja DU, andere hätten nicht länger gebraucht.
>
> Die Hardware dazu hast du dann aber sicher noch nicht...

Die HW kann ich genauso kaufen. Es gibt genügend Boards. Direkt mit 
ISP-Anschluss versehen, ist der genauso schnell programmiert.

> Äh, ist das nicht selbstverständlich? Wenn du per Lib auf dem Arduino
> einen Http-Request mit 10 Zeilen Code senden kannst - wie willst du das
> in der gleichen zeit OHNE libs in plain C hinbekommen?

Warum muss ich ohne libs auskommen? Hat Arduino die libs erfunden und 
patentiert?

Warum geht ihr immer von so komische Prämissen aus?

: Bearbeitet durch User
von Mirki (Gast)


Lesenswert?

Nur mal so als Anregung: Da Du ja selber sagst, das Du keinerlei 
Know-How besitzt aber schon affin bist, würde ich Dir vorschlagen Dein 
Projekt mit Raspberry umzusetzen. Da könntest Du sogar vieles Script 
basierend machen.
Alles von der picke aus zu designen und zu bauen würde sehr viel Zeit 
benötigen und know-how voraussezen.

von cyblord (Gast)


Lesenswert?

cyblord ---- schrieb:
> Warum muss ich ohne libs auskommen?
> Warum geht ihr immer von so komische Prämissen aus?

Hast du doch selber geschrieben:

cyblord ---- schrieb:
> Nämlich dass die Entwicklung direkt in C langsamer
> wäre als das von dir beschriebene Szenario.

Er beschrieb ein Szenario in welchem er auf gegebene Codebausteine 
aufsetzt.
Du hast dich davon abgegrenzt und sprichst von Entwicklung "direkt in 
C".

Ziemlich eindeutig, wie ich finde.

Außerdem benutzt so ein toller hecht wie doch kein C, oder? Ist ja 
schließlich Kinderkram. Du hackst den Binärcode doch sicherlich direkt 
runter, oder? 11010011011 ;-)

von Hubert G. (hubertg)


Lesenswert?

cyblord schrieb:
> Mal im Ernst: genau aus den von Dir genannten Gründen sind Plattformen
> wie der Arduino so eine Bereicherung für die Hobby-Entwickler-Szene.

Es freut mich riesig das du diese Bereicherung anerkennst und siehst das 
es nicht nur schwarz und weiß gibt und Geschwindigkeit nicht alles ist.

von Kropf (Gast)


Lesenswert?

cyblord ---- schrieb:
> Warum geht ihr immer von so komische Prämissen aus?

Was? Ein Falschfahrer? Es gibt ganz viele außer mir!

von Cyblord -. (cyblord)


Lesenswert?

Ok jetzt wirds Kinderkarten. Und wenn du weiter mit mir diskutieren 
willst, dann nimm einen anderen Nick.

Denkst du vor Arduino hat niemand libs verwendet? Natürlich werden die 
verwendet. Das viel zitierte "neu erfinden des Rades" findet so nicht 
statt.

> Du hast dich davon abgegrenzt und sprichst von Entwicklung "direkt in
> C".
Wieso grenzt das von libs ab? Sorry auf dem Niveau gehts nicht weiter. 
Ich wollte nur mal kurz die Gegenseite aufzeigen. Auf der Arduino-Seite 
scheinen doch sehr viele falsche Vorurteile zu herrschen. Die kann man 
ja auch mal ausräumen. Aber mit so einem Schwachmaten wie dir tu ich das 
nicht mehr. Letztes Post an dich.

gruß cyblord

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

cyblord schrieb:

>> Nämlich dass die Entwicklung direkt in C langsamer
>> wäre als das von dir beschriebene Szenario.
>
> Er beschrieb ein Szenario in welchem er auf gegebene Codebausteine
> aufsetzt.
> Du hast dich davon abgegrenzt und sprichst von Entwicklung "direkt in
> C".
>
> Ziemlich eindeutig, wie ich finde.

Finde ich nicht.
Auch in 'reinem C' implementiert man nicht jeden Scheiss selber aus, 
sondern greift auf fertiger Bausteine zurück. Speziell dann, wenn es 
sich um komplexe Dinge handelt.

Aber ein
1
Dank der guten API wie digitalWrite()
2
3
....
4
5
Ich müßte mich um Bits in Registern kümmern.
ist nicht wirklich ein Argument. Denn DAS ist in reinem C genauso 
schnell implementiert, wie du digitalWrite schreiben kannst und ist auch 
nicht mehr oder weniger komplex in der Verwendung. Es ist nur anders.
Und ob du deine I2C Klasse einsetzt, oder ob ich mir vom P.Fleury die 
I2C Lib hole und einbinde, das schenkt sich nichts.

>
> Außerdem benutzt so ein toller hecht wie doch kein C, oder? Ist ja
> schließlich Kinderkram. Du hackst den Binärcode doch sicherlich direkt
> runter, oder? 11010011011 ;-)

Du musst nicht polemisch werden.

Wenn deine Arduino Lösung dein Problem löst, dann ist das in Ordnung. 
Jeder hat seine persönliche Schwelle an der er für sich selbst festlegt, 
bis hier her 'optimiere' ich meine Lösung noch, aber dann ist Schluss. 
Diese Schwelle liegt bei jedem ein wenig anders. Aber gerade Anfänger 
haben des öfteren eine viel zu tief angesetzte Schwelle, die aus "Ich 
will alles im Detail wissen" resultiert. Es spricht nichts dagegen, 
alles im Detail wissen zu wollen. Aber es ist das falsche Argument für 
eine Eigenentwicklung, vor allen Dingen dann, wenn man ganz am Anfang 
steht. Denn dann verliert man den Wald vor lauter Bäumen aus den Augen.


Es ist eine Binsenweisheit:
Die beste Programmiersprache (und dazu zähle ich auch Libraries bzw. 
das Umfeld in der Entwicklungsumgebung wie verfügbare Libraries), ist 
immer die die man beherrscht.
Ob die Sprache jetzt Assembeler, C, C++, Pascal, Modula, C#, Java, Lisp, 
Prolog, etc.  heißt oder doch ganz anders, ist dagegen komplett 
zweitrangig. Beherrschen muss man sie! Dann geht auch was weiter.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Kannst du vergessen, ich hatte gehofft hier könnte man sachlich einige 
Vorurteile entkräften, und anhand dieses konkreten Beispiels aufzeigen 
wie es auch anders gehen kann. Scheint aber nicht möglich oder von der 
Ardu-Fraktion erwünscht zu sein. Mir auch recht.

von spess53 (Gast)


Lesenswert?

Hi

>Dann erklär mir doch mal wie DU in 60 Sekunden einen kompletten TCP/IP
>Stack implementierst (und das ist ja nur ein Teil des Problems)!

Die Arduinosoftware hat auch keinen TCP/IP-Stack implementiert. Der 
befindet sich als Hardware-Stack im W5100.

MfG Spess

von Franz (Gast)


Lesenswert?

>Aber ein
>
>Dank der guten API wie digitalWrite()
>
>....
>
>Ich müßte mich um Bits in Registern kümmern.

>ist nicht wirklich ein Argument. Denn DAS ist in reinem C genauso
>schnell implementiert, wie du digitalWrite schreiben kannst.

Allerdings läuft das "digitalWrite()" auch auf einem Arduino Due mit Arm 
Prozessor.
For kurzem habe ich ein Programm eines Arduino-Uno bei dem PROGMEM 
verwendet wurde auf einem Due laufen lassen und war ganz erstaunt, dass 
das ohne Änderungen lief.

In größeren Projekten findet man ohnehin zunehmend Abstraktionslayer ( 
HAL ) für die Hardware.
z.B. 
http://docs.lpcware.com/lpcopen/v1.03/group___group___h_a_l___l_p_c.html
oder
http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=AUTOSAR_CS

Die meisten Poster hier scheinen diese "Abstraction Layers" nicht zu 
kennen und ist wahrscheinlich ein Zeichen dafür, dass sich in diesem 
Forum eher Bastler und Programmierer von "Ein Mann Projekten" tummeln.

von Karl H. (kbuchegg)


Lesenswert?

Franz schrieb:

> Die meisten Poster hier scheinen diese "Abstraction Layers" nicht zu
> kennen

Kann nur für mich sprechen:
Doch, natürlich kenn ich die.
Die sind auch ok und dagegen ist nichts zu sagen, wenn man die braucht 
oder absehbar ist, dass man sie brauchen könnte.
Nur bei der überwiegenden Mehrzahl an Forumsprojekten ist eben absehbar, 
dass man sie NICHT brauchen wird. Es gibt nun mal kaum einen Grund eine 
vorhandene Lichtorgel von einem AVR auf einen ARM zu portieren.

Das ist ja auch gar nicht die Aussage, auf die es hier hinauslaufen 
soll. Die Arduino-Jünger tun immer so, als ob wir automatische bei der 
Nennung des Begriffs 'Arduino' die Hände über dem Kopf zusammenschlagen. 
Dem ist nicht so. Das siehst du doch hier in dem Thread ganz deutlich. 
Der TO fragt, ob er sein Arduino System über Bord werfen soll und die 
üblichen Verdächtigen raten ihm dringend dazu, genau das nicht zu tun, 
weil die Alternative, für IHN, zu wesentlichen Konsequenzen führt, von 
denen wir nicht denken, dass er sie im Griff haben wird und er davon 
keinen Gewinn haben wird. Wenn er die so gewonnene Zeit darin 
investiert, ordentlich seine Programmiersprache C++ zu lernen, dann hat 
er viel mehr davon.

: Bearbeitet durch User
von Christian E. (icfan)


Lesenswert?

Wow. Hier ist ja einiges los! ;) Vielen Dank für die vielen 
konstruktiven Beiträge. Die Richtung ist auf jeden Fall klar.

Karl Heinz schrieb:
> Franz schrieb:
>
>> Die meisten Poster hier scheinen diese "Abstraction Layers" nicht zu
>> kennen
>
> Kann nur für mich sprechen:
> Doch, natürlich kenn ich die.
> Die sind auch ok und dagegen ist nichts zu sagen, wenn man die braucht
> oder absehbar ist, dass man sie brauchen könnte.
> Nur bei der überwiegenden Mehrzahl an Forumsprojekten ist eben absehbar,
> dass man sie NICHT brauchen wird. Es gibt nun mal kaum einen Grund eine
> vorhandene Lichtorgel von einem AVR auf einen ARM zu portieren.
>
> Das ist ja auch gar nicht die Aussage, auf die es hier hinauslaufen
> soll. Die Arduino-Jünger tun immer so, als ob wir automatische bei der
> Nennung des Begriffs 'Arduino' die Hände über dem Kopf zusammenschlagen.
> Dem ist nicht so. Das siehst du doch hier in dem Thread ganz deutlich.
> Der TO fragt, ob er sein Arduino System über Bord werfen soll und die
> üblichen Verdächtigen raten ihm dringend dazu, genau das nicht zu tun,
> weil die Alternative, für IHN, zu wesentlichen Konsequenzen führt, von
> denen wir nicht denken, dass er sie im Griff haben wird und er davon
> keinen Gewinn haben wird. Wenn er die so gewonnene Zeit darin
> investiert, ordentlich seine Programmiersprache C++ zu lernen, dann hat
> er viel mehr davon.

Dem ist eigentlich nichts hinzu zu fügen. Ich habe eigentlich 
befürchtet, dass diese Diskussion hier unsachlich ausarten wird nachdem 
ich ein paar Threads dazu gesucht habe aber bin durchaus positiv 
überrascht. :)

Das Platz Argument ist zugegebenermaßen kein Argument und in "Arduino" 
mit Libs habe ich es sicher 10 mal so schnell fertig wie in "nacktem C" 
mit Libs.

Die Frage die sich mir aber noch stellt ...

Ist der ATmega2560 in "Arduino" schnell genug um einen 1-Phasen 
Wechselstrommotor (Rohrlüfter) dimmen zu können?

Die restlichen Aufgaben denke ich schafft er auch so, inkl. pH und EC 
Messung, mit ein wenig Gehirnschmalz.

Am Rande noch: Ja, Arduino wird im Prinzip auch in C geschrieben. Aber 
ich denke es ist klar, dass es ein Unterschied ist ob ich es mit Hilfe 
aller Arduino Libs komplett vorgekaut und fertig schreibe oder ich, wie 
schon erwähnt, es komplett in C schreibe und mich erst mit all den libs 
auseinander setzen muss die dann eventuell noch angepasst werden müssen.

Eventuell bringe ich es auch erstmal mit Arduino zum laufen und lasse es 
dann portieren/optimieren. Mal sehen.



Grüße,
Christian

: Bearbeitet durch User
von Franz (Gast)


Lesenswert?

>Das ist ja auch gar nicht die Aussage, auf die es hier hinauslaufen
>soll. Die Arduino-Jünger tun immer so, als ob wir automatische bei der
>Nennung des Begriffs 'Arduino' die Hände über dem Kopf zusammenschlagen.
>Dem ist nicht so.

Gut ok, die Threads hier im MC-Netz mit "Arduino" im Namen scheinen mehr 
zu werden. Wenn man richtige Hardware entwickeln will, sind die 
vielleicht etwas störend.
Mein Vorschlag: Ihr habt doch auf der MC-Netz Seite verschiedene Themen. 
Vielleicht wäre ein Arduino Ordner hier sinnvoll. Oder man könnte 
veruschen, die Arduino-Anfänger-Threads ins Arduino-Forum umzuleiten.

von Franz (Gast)


Lesenswert?

>Am Rande noch: Ja, Arduino wird im Prinzip auch in C geschrieben. Aber
>ich denke es ist klar, dass es ein Unterschied ist ob ich es mit Hilfe
>aller Arduino Libs komplett vorgekaut und fertig schreibe oder ich, wie
>schon erwähnt, es komplett in C schreibe und mich erst mit all den libs
>auseinander setzen muss die dann eventuell noch angepasst werden müssen.

Du kannst auch die Arduino-Boards als billige Hardware benutzen und 
Deine eigene Software darauf laufen lassen.
Hier hast Du ein einfaches Beispiel, wie das geht:
Beitrag "Arduino mit Eclipse AVR-gcc Plugin programmieren"

von Karl H. (kbuchegg)


Lesenswert?

Christian E. schrieb:

> Eventuell bringe ich es auch erstmal mit Arduino zum laufen und lasse es
> dann portieren/optimieren. Mal sehen.

Es gibt ein paar klassische Grundaussagen bezüglich Optimierung.

Donald Knuth sagt:
Premature optimization is the root of all evil.
(Vorzeitige Optimierung ist die Wurzel allen Übels)

(Die Quelle ist mir momentan nicht geläufig):
Optimization - don't do it
Die Erweiterung für hartnäckige:
Optimization - don't do it yet.
(Optimierung - machs nicht - zumindest nicht jetzt)


Gemeint ist damit: erst bringst du es zum laufen (und zwar möglichst 
fehlerfrei) und dann siehst du dir an, ob du Optimierungsbedarf hast und 
siehst nach wo es sich lohnt etwas zu optimieren. Einfach ins Blaue 
hinein zu optimieren geht nämlich meistens ins Auge.

Ein nicht optimales Programm, welches seinen Zweck erfüllt und 
fehlerfrei arbeitet, ist nämlich besser als ein möglichst 
schnelles/kleines Programm, welches fehlerhaft arbeitet.

Das bedeutet NICHT, dass man blödsinnig und stumpfsinnig die dümmste 
Technik einsetzt, die man finden kann. Genau deswegen beharre ich auch 
immer darauf, dass man sein Werkzeug, die Programmiersprache, 
beherrschen muss und auch auf algorithmischer Ebene fit ist. Normale und 
saubere Programmierung vorausgesetzt, nach den üblichen Regel der Kunst, 
unter Einsatz von normalen Algorithmen erhält man meistens automatisch 
ein Programm, welches zwar noch immer Optimierungspotential bietet, 
wobei wir da aber meistens von Potential im einstelligen Prozentbereich 
reden. Wer sein Werkzeug beherrscht steht meistens nicht vor dem 
Problem, auf Biegen und Brechen die Programmlaufzeiten um einen Faktor 
10 verkürzen zu müssen oder obskure Tricks benutzen zu müssen. Ausnahmen 
bestätigen natürlich die Regel - aber das sind Ausnahmen.

Wichtig ist auch die 90-10 Regel.
Sie besagt, dass in üblichen Programmen rund 90% der Programmlaufzeit 
auf lediglich ca. 10% des Codes zurückzuführen ist. Die Kunst beim 
Optimieren besteht daher darin, diese 10% zu finden. Und es zeigt sich 
immer wieder, dass Menschen notorisch schlecht darin sind, diese 10% zu 
finden. Dazu braucht es Messwerte in Form von Profilerläufen. Auf einem 
µC sieht die Verteilung vielleicht etwas anders aus (keine Ahnung ob es 
da Untersuchungen gibt), das allgemeine Prinzip ist aber dasselbe.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

Wenn ich hier noch einen Buchtipp einwerfen dürfte:
http://www.oreilly.de/catalog/wenschleprogger/
Ich meine den Tipp nicht ironisch, das Buch ist sehr zu empfehlen, es 
stehen wirklich einige gesammelte Weisheiten der Softwareentwicklung 
drinn.

von Christian E. (icfan)


Lesenswert?

Franz schrieb:
>>Am Rande noch: Ja, Arduino wird im Prinzip auch in C geschrieben. Aber
>>ich denke es ist klar, dass es ein Unterschied ist ob ich es mit Hilfe
>>aller Arduino Libs komplett vorgekaut und fertig schreibe oder ich, wie
>>schon erwähnt, es komplett in C schreibe und mich erst mit all den libs
>>auseinander setzen muss die dann eventuell noch angepasst werden müssen.
>
> Du kannst auch die Arduino-Boards als billige Hardware benutzen und
> Deine eigene Software darauf laufen lassen.
> Hier hast Du ein einfaches Beispiel, wie das geht:
> Beitrag "Arduino mit Eclipse AVR-gcc Plugin programmieren"

Ich glaube ich habe das noch nicht ganz klar gemacht: Mir ist absolut 
klar, dass ein "Arduino" lediglich ein normaler IC ist auf einer simplen 
Platine und der eigentliche "Arduino" erst durch die 
Entwicklungsumgebung und die Libraries entsteht. Daher könnte ich auch 
einfach eine eigene Platine machen und darauf eben einen Arduino 
kompatiblen IC setzen bzw. umgekehrt eine Arduino Platine normal in C 
bzw. auch Assembler bearbeiten, so ich das denn will. Das ist mir schon 
klar! Mir gehts hier aber in erster Linie um die Zeitersparnis durch die 
IDE und die Libs. Die Hardware ist mir ziemlich egal da ich sowieso eine 
eigene Platine mache und den Arduino einfach "gerade hier hatte".

Karl Heinz schrieb:
> Christian E. schrieb:
>
>> Eventuell bringe ich es auch erstmal mit Arduino zum laufen und lasse es
>> dann portieren/optimieren. Mal sehen.
>
> Es gibt ein paar klassische Grundaussagen bezüglich Optimierung.
>
> Donald Knuth sagt:
> Premature optimization is the root of all evil.
> (Vorzeitige Optimierung ist die Wurzel allen Übels)
>
> (Die Quelle ist mir momentan nicht geläufig):
> Optimization - don't do it
> Die Erweiterung für hartnäckige:
> Optimization - don't do it yet.
> (Optimierung - machs nicht - zumindest nicht jetzt)
>
> [...]

Einer der Gründe wieso ich darüber nachgedacht habe ist jener, dass in 
einigen Threads hier über Arduinos bzw. den Code den die IDE in 
Verbindung mit den Libs ausgibt so gesprochen wird als wäre der IC bei 
Programmen die über eine blinkende LED hinaus gehen so langsam, dass es 
nicht mehr brauchbar ist. In diesem Thread bekomme ich jedoch wieder 
einen anderen Eindruck.

chris_ schrieb:
> Wenn ich hier noch einen Buchtipp einwerfen dürfte:
> http://www.oreilly.de/catalog/wenschleprogger/
> Ich meine den Tipp nicht ironisch, das Buch ist sehr zu empfehlen, es
> stehen wirklich einige gesammelte Weisheiten der Softwareentwicklung
> drinn.

Klingt interessant. Ich werde mal einen Blick rein werfen! ;)



Grüße,
Christian

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

was meinst du blos mit der Abkürzung "IC"? Vielleicht "integrated 
Cirquit" ? Aber das ist jeder analoge oder digitale Chip mit mehr als 3 
Beine ...

Mir ist für Controller eher "µC" geläufig...

von F. F. (foldi)


Lesenswert?

cyblord ---- schrieb:


>
> Wenn du damit zufrieden bist, wird es dir niemand ausreden, aber es
> stört einfach wenn dann immer und immer wieder behauptet wird, die
> Entwicklung ohne Arduino würde länger dauern. Grade von Arduino-Nutzern
> die ja gar nichts anderen kennen, aber natürlich in allem anderen das
> große Böse sehen, wo man 2 Wochen dahockt bevor eine LED blinkt.
>
> Also nochmal: Es dauert nicht länger.
>
> gruß cyblord

Ich muss mal meinem guten Freund hier Unterstützung geben.
Sicher, Arduino ist einfach und geht schnell und, wie immer auch hier, 
zum reinschnuppern der richtige Weg.
Bei Arduino bin ich zunächst mal an eine bestimmte Hardware gebunden, 
bei C kann ich die frei wählen. Dann noch die Portierbarkeit.
Ich habe letztens eine kleine Schaltung gebaut mit einem Tiny13. Nur die 
Pinzuordnung geändert und es läuft auf einem Attiny10.
In Arduino habe ich noch keine Unterstützung für einen ATTiny10 gesehen.
Bin mir sicher mit nur minimalen Änderungen läuft das auf so ziemlich 
jeder Plattform die mit C zu programmieren ist.
Da reden wir dann nicht mehr von schnell, sondern nur noch davon, ob es 
überhaupt möglich ist.
Im Moment mache ich was ganz anderes, deshalb ruht es zur Zeit, aber ich 
mache das auch noch nicht so lange mit C und solche anspruchsvollen 
Sachen, wenn ich sie zeitnah bräuchte, würde ich dann mit Arduino 
machen.
Und trotzdem sollte man immer versuchen davon weg zu kommen, weil es 
eine Einbahnstraße ist.

von Karl H. (kbuchegg)


Lesenswert?

Christian E. schrieb:
>
> Einer der Gründe wieso ich darüber nachgedacht habe ist jener, dass in
> einigen Threads hier über Arduinos bzw. den Code den die IDE in
> Verbindung mit den Libs ausgibt so gesprochen wird als wäre der IC bei
> Programmen die über eine blinkende LED hinaus gehen so langsam, dass es
> nicht mehr brauchbar ist.

Äh. Nein.
Das hast du dann in den falschen Hals gekriegt.

Natürlich hat man durch das Arduino-modulare-System einen gewissen 
Overhead. Aber so schlimm ist das auch wieder nicht, dass es gleich ins 
Unbrauchbare abdriftet.
Bei jedem Unterbau hat man einen gewissen Overhead. Dein 4-Ghz 
getakteter PC hat auch ein Leistungsvermögen, das jenseits von gut und 
böse ist und durch die diversen Software-Schichten und Zusatzdinge des 
Betriebssystems merkt man in Relation zu einem Computer aus 1980 gar 
nicht mal so viel davon. Das liegt aber daran, dass da ein Rattenschwanz 
an Software-Schichten-Overhead zwischen dir als Benutzer und dem 
Silizium sitzt. Ein Mainframe aus 1980 hatte nur einen Bruchteil der 
Rechenleistung deines heutigen PC und schaffte es trotzdem mehr oder 
weniger gleichzeitig ein paar 100 Versicherungsvertretern ihre Daten 
aufs Terminal zu zaubern. Aber: Damals war die Softwarewelt noch 
einfacher und speziell GUI (die richtig Speicher- und Rechenzeitfresser 
sind) gab es noch nicht.

Klar liegen in deinem Arduino Schichten dazwischen. Das bereits 
angesprochene digitalWrite ist fast um einen Faktor 70 langsamer als 
eine reine C Lösung sein müsste. Aber die wenigsten Programm dieser Welt 
bestehten nur aus digitalWrite und das dann auch noch im µs Takt.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo,

F. Fo schrieb:

> Bei Arduino bin ich zunächst mal an eine bestimmte Hardware gebunden,
> bei C kann ich die frei wählen.

Bitte wie? Ein Arduino-Programm läuft unter Umständen sogar ohne 
Änderung auf einem ARM!
Mit C kannst du die Hardware frei wählen? Wenn du das Programm änderst, 
klar. Arduino ist auch nicht portabel, aber definitiv um Größenordnungen 
portabler als reines C.

> Dann noch die Portierbarkeit.
> Ich habe letztens eine kleine Schaltung gebaut mit einem Tiny13. Nur die
> Pinzuordnung geändert und es läuft auf einem Attiny10.

ja aber auch nur, weil du nicht den 10 Bit A/D benutzt hast oder den 16 
Bit Timer und halt auch kaum Pins. So what?

von Mark B. (markbrandis)


Lesenswert?

chris_ schrieb:
> Wenn ich hier noch einen Buchtipp einwerfen dürfte:
> http://www.oreilly.de/catalog/wenschleprogger/
> Ich meine den Tipp nicht ironisch, das Buch ist sehr zu empfehlen, es
> stehen wirklich einige gesammelte Weisheiten der Softwareentwicklung
> drinn.

Danke für den Tipp! Klingt cool, ich glaub das kauf ich mir. :-)

von F. F. (foldi)


Lesenswert?

Timm Reinisch schrieb im Beitrag #
>
> Bitte wie? Ein Arduino-Programm läuft unter Umständen sogar ohne
> Änderung auf einem ARM!
> Mit C kannst du die Hardware frei wählen? Wenn du das Programm änderst,
> klar. Arduino ist auch nicht portabel, aber definitiv um Größenordnungen
> portabler als reines C.
>
>> Dann noch die Portierbarkeit.
>> Ich habe letztens eine kleine Schaltung gebaut mit einem Tiny13. Nur die
>> Pinzuordnung geändert und es läuft auf einem Attiny10.
>
> ja aber auch nur, weil du nicht den 10 Bit A/D benutzt hast oder den 16
> Bit Timer und halt auch kaum Pins. So what?

Und wie wähle ich beispielsweise einen ATtiny10 in der IDE aus?

: Bearbeitet durch User
von Klaus I. (klauspi)


Lesenswert?

chris_ schrieb:
> Wenn ich hier noch einen Buchtipp einwerfen dürfte:
> http://www.oreilly.de/catalog/wenschleprogger/
> Ich meine den Tipp nicht ironisch, das Buch ist sehr zu empfehlen, es
> stehen wirklich einige gesammelte Weisheiten der Softwareentwicklung
> drinn.

Hm, wirklich eine kurze zeitliche Überschneidung mit dem Post von 
Karl-Heinz oder eine pösartige Zusammenfassung der bisherigen Posts? 
Evtl. hast Du gar schon die Illumination vom simplen Zyniker zum Kyniker 
vollbracht?

Ich würde alles gut finden! Bei dem Buch sollte man halt dazu sagen, 
dass es sicherlich nicht um das Programmieren an sich geht. Sondern um 
die ganz normalen menschlichen Probleme und Unzulänglichkeiten. Die 
Verfasser wollen halt hier einen gewissen Bezug zu IT-Leuten herstellen.

Aber wie das halt mit Ratgebern so ist, wenn man glaubt sie wirklich 
notwendig zu haben, findet man keine passenden Vorschläge.

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.