Arduino in Eclipse programmieren

Veröffentlicht von

Angeregt durch eine Kommentar von Kucky habe ich mich mit der Kombination Eclipse und Arduino beschäftigt. Eine Suche in Google zeigt das ich da nicht der erste war. Ich konnte also mal wieder auf das geballte wissen des WWW zurückgreifen.

Gestartet wird normalerweise mit der Installation von Java, WinAvr, Eclipse  und den benötigten Plugins. Das hatte ich alles schon, daher hier nur der Link zu einem guten Tutorial: Eclipse Tutorial

Die nächsten Schritte sind dann das Erstellen eines Projektes, Arduino Header und Lib hinzufügen und schon sollte das ganze laufen.
Auch hier hat schon jemand Vorarbeit geleistet und stellt sogar seine Eclipse Projekte zum Download bereit. Er geht dabei sogar soweit das er ein eigenes Projekt zum erstellen der Arduino Library erstellt hat. Das ist sicherlich auch nicht verkehrt, kann man so ja auch mal schnell in den Source schauen oder vielleicht auch mal etwas „verbessern“ 🙂 Hier geht es zum Beitrag

Die Projekte werden einfach in den Eclipse Workspace entpackt und mittels Import/Existing Projects… importiert. Bei einem ersten Versuch zu compilieren ist natürlich Ersteinmal alles rot. Es müssen einige Pfadangaben in den Projekteigenschaften angepasst werden. Auch das ist auf der Seite erklärt, ich habe es aber ein wenig abgewandelt.

Im Projekt zum erzeugen der Core Library werden Include Pfade auf den Arduino Installations Ordner gesetzt. Da aber auch alle Sourcen und Header im Projekt liegen ist das nicht nötig.  Nachdem die Include Pfade für Compiler und LInker auf „${workspace_loc:/ArduinoCore}“ gesetzt sind kann man die libArduinoCore.a auch schon erzeugen.

Beim zweiten Blinky Demoprojekt sieht es ähnlich aus. Auch hier habe ich den Include Pfad des Compilers nach „${workspace_loc:/ArduinoCore}“ geändert. Der Linker bekommt die neu erstellte Lib (nur „ArduinoCore“ ) aus „${workspace_loc:/ArduinoCore/Release}“ So konnte ich schon eine Blinky Applikation erstellen.

Probleme gab es aber beim Upload auf den Arduino.

stk500_getsync(): not in sync: resp=0x00

Selbst nachdem ich die Einstellungen aus dem Artikel übernommen hatte bekam ich Fehler. Grund war hier eine zu alte Version von AVRDude. Den Hinweis darauf habe ich hier gefunden:

„The Arduino environment issues a reset command prior to uploading. Newer versions of AVRDude (such as the one shipped with CrossPack) will also do this. If you have an older version and are using Windows, you can overcome this problem with this little app“

Der Upload lief aber noch immer nicht. Auf meinen „Roboduino Duemilanove“ Boards ist ein Atmega 168 verbaut, die Anleitung/Projekte waren aber für den Atmega328 ausgelegt dessen Bootloader eine andere Bautrate benutzt und meine Lib und App würden vermutlich auch nicht laufen.
Auch dies lässt sich aber schnell in den Projekteingenschaften unter AVR/Target Hardware berichtigen.  Dazu noch unter AVR/AVRDude die Bautrate auf  19200Baud und der Upload auf das Arduino Target lief problemlos.

5 Kommentare

  1. Hallo Willi, es freut mich das du weitergekommen bist. Was du mit dem schrittweisen ausführen des Codes meinst nennt sich Debugging. Das geht unter Borland recht einfach weil deine Zielplatform der Entwicklungsplatform entspricht (beide male dein Windows Rechner). Im jetzigen Fall ist das natürlich anders, du müsstest also das Ziel auf deinem Entwicklungsrechner simulieren (WinAvr kann das) oder den Atmega und deinen Entwicklungsrechner verbinden und über diese Verbindung debuggen. Ob zweiteres möglich ist kann ich nicht sagen, wäre aber etwas für den nächsten Beitrag 🙂 Wie gesagt das Zauberwort heißt Debugging. Kannst ja mal nach suchen.
    Gruß Ingo

  2. Hallo Gerald,
    ich hatte nicht bemerkt, dass ich ein Stein des Anstoßes wurde. Umso mehr freue ich mich, dass mein Problem endlich gelöst ist. Ich habe die verschiedenen, sehr guten Tutorials rauf und runter gebetet, leider immer ohne Erfolg, bzw. nicht reproduzierbar. In Deinem Beitrag habe ich nun meinen Fehler gefunden. Es lag tatsächlich an dem doppelten Bindestrich, der unter Pt. 11 beschrieben ist. Darauf wäre ich in 100 Jahren nicht gekommen. Habe das gestern Abend ausprobiert, und es funktioniert. Vielen vielen Dank dafür. Ich habe mir daraufhin auch das Eclipse-Handbuch aus dem Netz gesaugt, um Eclipse richtig zu bedienen. Aber 700 Seiten sind eine schwere Kost. Du musst wissen, ich bin Anfänger in Bezug auf das Programmieren eines Arduino. Ich konnte immer nur einen Fehler sehen, wenn der MC nicht das tat was ich wollte. Warum das so war, habe ich meist durch die „try and error Methode“ versucht zu lösen. Aber hier sind mir noch deutliche Grenzen gesetzt. Ich habe zum Beispiel das Daisy-Projekt von Ingo zum Lernen benutzt. Er hat mir dafür freundlicherweise den Code zur Verfügung gestellt. Mein Scheibenbot bewegt sich auch, und der Encoder liefert brauchbare Werte. Leider wird die Odometrie vom Programm nicht beachtet. Ich hoffe nun, dass ich mit Eclipse diesem Fehler auf die Spur komme. Ich habe vor 20 Jahren mal mit Borlands Turbopascal (bitte nicht lachen) gespielt. Da gab es eine Funktionalität, die ein schrittweises ausführen des Codes ermöglichte. Diesen Punkt suche ich nun bei Eclipse. Hast Du hier vielleicht einen Tipp?
    Nochmals vielen Dank.
    Gruß aus dem verregneten Leverkusen
    Willi

  3. Hallo Gerald,

    Hast du die F_CPU im Code angegeben? Ich habe im Moment kein lauffähiges Eclipse, aber wenn ich mich recht erinnere wird die Frequenz in den Projekt Einstellungen und damit im Makefile gesetzt. Das würde dann die Einstellungen im Code überschreiben. Schau die mal die Ausgaben vom Make an. Sonst schau dir mal den Thread im Mikrocontroller.net. Da ging es auch mal um das Thema. http://www.mikrocontroller.net/topic/90941
    Gruß Ingo

  4. Hallo, ich bin so ungefähr den gleichen weg gegangen wie Du. Allerdings bin ich in ein Problem gelaufen, dass ich noch nicht lösen konnte. Vielleicht hast Du ja eine Idee.
    Ich kann alles kompilieren und uploaden, allerdings scheint das Zeitintervall beim Delay viel zu klein zu sein. ein delay(5000) ist eher ein delay(500). Ich hab F_CPU auf 1600000 gesetzt. Ich komm nicht drauf was ich falsch mache. Ich nutze ein Duemilanove mit einem 328p.
    Für einen Tip wäre ich dankbar.
    Gerald

Kommentar verfassen