Zitat von
White_Fox
Naaaajaa...
Ich habe unlängst für ein Projekt an meiner Hochschule den STM32 vorgeschlagen (Arduino war in einigen Aspekten nicht mehr ausreichend). Irgendjemand hat dann zur Programmierung die mbed-IDE vorgeschlagen (Online-Compiler, mbed.org mein ich).
Da waren erstmal alle begeistert weil ja so unfassbar einfach, genauso wie bei der Arduino-IDE. Ich hab von Arduinokram keine Ahnung-AVRs programmiere ich in ASM oder C.
Da sprichst Du einen wichtigen Punkt an. Wenn man eine neues Werkzeug oder System benutzen will, muss man sich darauf einlassen um die Stärken und Schwächen kennenlernen. Dabei ist es oft so, dass man mit den aus alten Projekten gemachten Erfahrungen an die neue Sache herangeht. Das kann aber dazu führen, dass man auf Probleme stößt, die man mit dem alten Werkzeug nicht hatte.
Das folgende kleine Geschichte:
Ein Mann hatte jahrelang mit einem Schraubenzieher gearbeitet und nun etwas von einem Akkuschrauber gehört. Nachdem er sich einen angeschafft hatte, machte er folgende Aussage:
"Akkuschrauber sind totaler Mist. Früher hatte ich immer den Schraubenzieher auf die Schraube gesetzt und erst mal mit dem Hammer ein wenig darauf geklopft, damit die Schraube fasst. Mit dem tollen neuen Gerät kann ich nicht mal mehr die Schraube anklopfen."
Außerdem würde er Schraubenzieher seit Jahren benutzen und es gäbe nichts, was man mit einem Akkuschrauber mehr machen könne als mit einem Schraubenzieher. So könne man z.B. mit einem Schraubenzieher auch hartnäckige Farbreste abkratzen, was mit einem Akkuschrauber nicht möglich sei. Ebenso müsse man beim Akkuschrauber hin und wieder die Batterien laden. Ein Zeitaufwand, der beim Schraubenzieher entfällt.
Überhaupt schiene es ihm, als wenn der Akkuschrauber nur für schwächliche Menschen entwickelt worden wäre , die von Schrauben keine Ahnung hätten.
Deshalb erschiene ihm die Entwicklung des Akkuschraubers völlig unnötig und er bleibe beim bewähren Althergebrachten.
Zitat von
White_Fox
Naaaajaa...
Blöd geschaut hab ich dann. als ich mich dann an das Programmdesign gemacht habe. Einem ADC-Messwert sowas wie einen Zeitstempel zuordnen? Ich hatte nichtmal die Möglichkeit, wenigstens festzustellen ob ich einen neuen oder den alten ADC-Wert nocheinmal auslese. Alle drei ADCs synchron laufen lassen? Wenigstens die Sample-Frequenz ändern/rausfinden? Alles Mist...
Für die Systemzeit gibt es bei Arduino die Funktionen "millis()" und "micros()"
Den Zeitstempel würde man dann in etwas so erhalten
Code:
void loop()
{
value=analogRead(A0);
time=millis();
..
}
Die Abstraktion der Funktionen ( HAL Hardware-Abstraktion-Layer ) ist dabei der Tatsache geschuldet, dass die Software auf vielen verschiedenen MCUs vom 8 bit AVR bis zum ARM oder Intel laufen soll.
( Für den RasPi gibt es dazu, Wiring ist die Pin-Zugriffs-API von Arduino "the undold historiy of Arduino )
Dass mit solchen Abstraktionen nicht die selbe Performance wie für "native" geschriebene Software erreicht wird ist klar.
Dazu gibt es aber Lösungen: So beinhalten viele Arduino Libraries direkte Registerzugriffe für die AVRs, was die volle Geschwindigkeit ermöglicht.
Beim Arduino Framework STM32GENERIC gibt es dazu die Möglichkeit, direkt die HAL-API zu rufen. Beispiele sind dort enthalten.
Damit lassen sich dann auch spezielle Wünsche bezüglich der Hardware wie z.B. den AD-Wandler realisieren.
Links:
- The untold history of Arduino
- STM32GENERIC
- WiingPi
Lesezeichen