Forum: Mikrocontroller und Digitale Elektronik arduino hinter sich lassen?


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo zusammen,

Ich, halbwegs fundierte Elektronik-Ausbildung (HTL Nachrichtentechnik) 
aber seit 20 Jahren fast ausschließlich in der PC-Software-Branche 
unterwegs, habe vor wenigen Wochen mit Arduino endlich den Einstieg in 
die Mikrocontroller-Welt gefunden, und habe Blut geleckt :-)

meine ersten Projekte habe ich bereits erfolgreich abgeschlossen (u.a. 
ein Interface von i2c auf ein T6963-Grafikdisplay, also schon nicht mehr 
ganz anfängermäßig). Allerdings habe ich auch hier schon versucht, 
einige Arduino-Sachen wegzulassen: ich verwende fast keine 
Arduino-Bibliotheken, und auch keine Arduino-Boards, sondern entwickle, 
ätze und löte meine Platinen selbst, momentan mit ATmega 328 (allerdings 
mit Arduiono-Bootloader drauf)

Damit das klar ist: ich finde Arduino grundsätzlich toll, fühle mich 
aber schon etwas "beengt" (z.B. Compilerflags vpon -Os auf -O3 umstellen 
geht schlichtweg gar nicht ohne in den .jar-Dateien herumzupatchen...) 
und möchte "in den nächsten Level aufsteigen".

IDE brauch ich keine, ich bin es gewohnt mit meinem emacs, einem 
Makefile und Subversion auszukommen. Außerdem arbeite ich ausschließlich 
unter Linux (Debian), ich hab einen Microsoft-freien Haushalt :-)

Mit "normalem" C unter Linux bin ich vertraut, auch mit Makefiles 
grundsätzlich. Allerdings ist das ganze ISP, Fuses usw. natürlich ganz 
neu für mich, das "versteckt" ja Arduino ganz gut vor einem.

Was mir an der Stelle sehr helfen würde, wäre ein kleines, einfaches, 
aber sauberes und standardkonformes Beispielprojekt inkl. Makefile für 
eine Linux-Toolchain. Sozusagen das "LED-Blink" von Arduino ohne Arduino 
:-) Ich wäre für Vorschläge dankbar.

Wo mir auch noch etwas der Einblick fehlt, ist der "Upload" des 
Programmes auf den AVR. Arduino hat das ja ganz nett gelöst, die 
verwenden einen Bootloader, mit einem Trick wird die serielle 
Schnittstelle genutzt um einen Reset auszulösen, und das neue Programm 
seriell übertragen. Das funktioniert schon lässig: ein Mausclick, und 
Sekunden später läuft der AVR mit dem neuen Programm. Trial and Error 
bzw. "einfach mal ausprobieren" geht damit wirklich sehr schnell. 
Gleichzeitig kann diese serielle verbindung dann genutzt werden, um 
Debug-Ausgaben per Serial.print zurück an den PC zu senden, und in der 
Arduino-IDE per terminal-Window beobachtet werden.

Wie macht "man" das ohne Arduino? Immer per ISP? Nutzt man gar keinen 
Bootloader mehr? Kann das ISP-Zeugs angesteckt bleiben während des 
Ausprobierens, oder muss man da immer an- und abstecken?

Ich bin durchaus bereit, das ganze etwas "hardcore-mäßig" anzugehen, 
aber wenns Sachen gibt die einem das leben massiv erleichtern, ohne 
dabei als allzu "mädchenhaft" zu gelten, will ich mich dem natürlich 
auch nicht verschließen....

Wäre nett wenn ich den einen oder anderen guten Tipp von euch bekäme!



lg Michi

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Ersmal das hier installen:
http://avr-eclipse.sourceforge.net/wiki/index.php/The_AVR_GCC_Toolchain

Dann brauchste nen "ISP" damit krichste das Program aufn AVR.
zB der USBasp ist da gut zu gebrauchen.
Das flashen übernimmt dann das Programm avrdude, also einlesen wie das 
per Konsole bedienbar ist und schlieslich diese Befehle ins Makefile 
stopfen.

Fusebitcalculator:
http://www.engbedded.com/fusecalc

Der ISP kann eingesteckt bleiben, da er tristate ist wenn er nicht 
proggt.
Bootloader kannste natürlich einen raufspielen, gibts sogar für USB 
direkt oder alle anderen SChnittstellen.

von Karl H. (kbuchegg)


Lesenswert?

Michael Reinelt schrieb:

> IDE brauch ich keine, ich bin es gewohnt mit meinem emacs, einem
> Makefile und Subversion auszukommen. Außerdem arbeite ich ausschließlich
> unter Linux (Debian), ich hab einen Microsoft-freien Haushalt :-)
>
> Mit "normalem" C unter Linux bin ich vertraut, auch mit Makefiles
> grundsätzlich. Allerdings ist das ganze ISP, Fuses usw. natürlich ganz
> neu für mich, das "versteckt" ja Arduino ganz gut vor einem.
>
> Was mir an der Stelle sehr helfen würde, wäre ein kleines, einfaches,
> aber sauberes und standardkonformes Beispielprojekt inkl. Makefile für
> eine Linux-Toolchain. Sozusagen das "LED-Blink" von Arduino ohne Arduino
> :-) Ich wäre für Vorschläge dankbar.


Die Linux Toolchain kenne ich nicht so. Ich weiß aber, dass Eclipse als 
IDE gerne verwendet wird.
Ja ich weiß, ich bin auch ohne IDE's aufgewachsen und hab sie mal für 
Teufelszeug gehalten. Aber ganz ehrlich: Irgendwann willst du den 
Komfort einer IDE einfach nicht mehr missen. Sie machen einem das Leben 
schon um einiges leichter.

> Wie macht "man" das ohne Arduino? Immer per ISP?

In den meisten Fällen: ja

> Nutzt man gar keinen
> Bootloader mehr?

Doch, kann man immer noch nutzen.
Bootloader sind zb dann praktisch, wenn das Zeugs draussen ist und der 
Aussendienstmitarbeiter eine neue Version einspielen soll.

Aber um an die Fuses ranzukommen, musst du über ISP gehen. Dann kann man 
auch gleich damit seine Programme einspielen.

Und ausserdem braucht ein Bootloader dann auch Platz im Flash :-)

> Kann das ISP-Zeugs angesteckt bleiben während des
> Ausprobierens, oder muss man da immer an- und abstecken?

Kommt drauf an, was an den Pins hängt. Ob beim Programmieren ein paar 
LED im Takt mitflackern oder nicht, ist ja wurscht. WEnn an diesen Pins 
aber die Relais hängen, die die Herz-Lungen-Maschine ein/ausschalten, 
dann ist das nicht so toll.
Und wenn an den Pins ein paar Taster sitzen: Man muss die ja nicht 
unbedingt während des Programmiervorgangs drücken.

Und der ISP Progammer: Wenn der nicht gerade ein Programm in den AVR 
einspielt, dann hält er sich von den Pins fern, beeinflusst also deine 
Schaltung nicht.

-> Progammer kann angesteckt bleiben

von A. W. (uracolix)


Lesenswert?

Warum nicht einfach mal die Toolchain ohne Kuschel-IDE verwenden?

Irgendwie haben die Arduinistas seit dem Due (SAM3) wohl auch den
Nachteil von in JAR Filen fix einkompilierten Kommandozeilen erkannt,
mal schauen was sie draus machen. Irgendwie soll die Compiler
Konfigurationin ein externes File wandern ... angesehen hab ich es
mir aber auch noch nicht.

von Programmierer (Gast)


Lesenswert?

Michael Reinelt schrieb:
> Was mir an der Stelle sehr helfen würde, wäre ein kleines, einfaches,
> aber sauberes und standardkonformes Beispielprojekt inkl. Makefile für
> eine Linux-Toolchain. Sozusagen das "LED-Blink" von Arduino ohne Arduino
> :-) Ich wäre für Vorschläge dankbar.

Bitteschön:

https://raw.github.com/RobotGrrl/avr-blinklight/master/blinklight.c
https://raw.github.com/RobotGrrl/avr-blinklight/master/makefile

Der Artikel dazu:
http://www.evilmadscientist.com/2012/blink-an-led-with-an-avr/

HTH. :)

von Marco M. (marco_m)


Lesenswert?

Wenn deine AVR schon einen Arduino-Bootloader haben, dann kannst du sie 
mit avrdude programmieren. Der Compiler ist avr-gcc, den du unter debian 
einfacht mit apt-get installieren kannst. Es gibt so viele online 
Beschreibungen wie man das macht, dass ich einfach mal nur die ersten 
paar von google verlinke:

http://www.rn-wissen.de/index.php/Avr-gcc_und_avrdude_installieren
http://www.ladyada.net/library/arduino/bootloader.html
http://balau82.wordpress.com/2011/03/29/programming-arduino-uno-in-pure-c/
http://www.javiervalcarce.eu/wiki/Program_Arduino_with_AVR-GCC

Falls du nackte MCU hast, dann brauchst einen ISP-Programmierer. Am 
billigsten sind USBASP Programmierer aus China für $3.60 (bei ebay.com), 
von denen kann man sich mal zwei bestellen (dann kann man den einen mit 
den anderen umprogrammierer!).

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

ok, danke. Die Linux-Toolchain ist eh schon installiert, die bringt 
arduino als dependencies mit. ich muss halt nur drauf achten dass das 
Zeugs da bleibt, wenn ich arduino runterwerf.

Bezüglich ISP oder Bootloader: hier ist vielleicht noch ein Aspekt 
wichtig: ich bin es gewohnt, meine Entwicklungen (sobald sie einen 
gewissen Reifegrad erreicht haben) als Open Source zu veröffentlichen, 
natürlich inklusive Makefile, und dann macht ISP sicher mehr Sinn als 
irgendein Bootloader, richtig?

Kann das ISP-Zeugs dann auch als "Debug-Schnittstelle" (für Serial.print 
oder so ähnlich) herhalten? Oder ist dafür der "normale" UART-Ausgang 
besser geeignet? (rausgeführt auf Stiftleisten hätte ich den eh immer)

von Programmierer (Gast)


Lesenswert?

Michael Reinelt schrieb:
> und dann macht ISP sicher mehr Sinn als
> irgendein Bootloader, richtig?

Lass den Nutzniesser doch selbst bestimmen, wie er das Binary auf den 
Controller überträgt. Soll er's doch so machen wie es im genehm ist. 
Abhängigkeiten gibt's ja ohnehin (fast) keine, ausser das ein 
allfälliger bootloader etwas Platz im Flash einnimmt.

Michael Reinelt schrieb:
> Kann das ISP-Zeugs dann auch als "Debug-Schnittstelle" (für Serial.print
> oder so ähnlich) herhalten?

Ja, das ist möglich, würde ich aber nicht so machen. Die ISP 
Schnittstelle ist im normalen Betrieb das SPI, das sich viel besser zur 
Anbindung von Peripherie eignet denn als software uart.

> Oder ist dafür der "normale" UART-Ausgang
> besser geeignet

Ja.

von Karl (Gast)


Lesenswert?

Michael Reinelt schrieb:
> Oder ist dafür der "normale" UART-Ausgang
> besser geeignet? (rausgeführt auf Stiftleisten hätte ich den eh immer)

Es gibt in der Bucht USB -> TTL Adapterkabel, wie sowas hier:
http://www.ebay.de/itm/USB-auf-TTL-UART-PL2303-Kabel-Konverter-Modul-/251173925464?pt=DE_Computing_USB_Kabel_Hubs_Adapter&hash=item3a7b21f258&_uhb=1#ht_4425wt_1139

Das ist rech komfortabel.

von Marco M. (marco_m)


Lesenswert?

Karl schrieb:
> Michael Reinelt schrieb:
>> Oder ist dafür der "normale" UART-Ausgang
>> besser geeignet? (rausgeführt auf Stiftleisten hätte ich den eh immer)
>
> Es gibt in der Bucht USB -> TTL Adapterkabel, wie sowas hier:
> 
http://www.ebay.de/itm/USB-auf-TTL-UART-PL2303-Kabel-Konverter-Modul-/251173925464?pt=DE_Computing_USB_Kabel_Hubs_Adapter&hash=item3a7b21f258&_uhb=1#ht_4425wt_1139
>
> Das ist rech komfortabel.

Ausgerechnet das Kabel sieht aber wie Mist aus:

* Prolific Chipsatz. Die FTDI basierten Wandler haben einen wesentlich 
besseren Software-Support (D2XX).
* Es wird nur TX/RX rausgeführt. Andere Boards/Kabel führen noch DTR, 
CTS usw. raus. Mit DTR werden z.B. die Arduinos resettet bevor das 
Programm an den Bootloader gesendet wird.
* Kein Vcc rausgeführt und ich auch kein Jumper sichtbar um zwischen 
3.3v und 5v umzuschalten.

FTDI232* Breakout-Boards die alle Pins des Chipsatz auf Header bringen 
kosten ca $7 auf der Bucht.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

als nächsten Schritt suche ich jetzt einen ISP Programmieradapter.

Vernünftig erschiene mir der USBtinyISP oder der µISP-Stick. Leider sind 
beide momentan bei ehajo nicht lieferbar :-(

Sehr schnell bekommen könnte ich den mySmartUSB light (den hätte mein 
lokaler Conrad sogar lagernd)

Frage: ist der zu empfehlen?


Danke, Michi

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Es ist vollbracht!

ich hab einen ISP, ich hab ein Makefile, ich hab endlich wieder die 
Kontrolle! Und alles funzt....


Danke euch!

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.