Montag, 13. Juli 2015

Arduino mit dem Atmel Studio programmieren

In diesem Post geht es darum, wie man das Atmel Studio installiert und welche Einstellungen man vornehmen muss, damit man den Arduino mit dem Atmel Studio programmieren kann. Dadurch hat man dann eine, für manche Leute, angenehmere IDE, mit mehr Wahlmöglichkeiten, und zusätzlich kann man dann den Arduino in echtem C / C++ programmieren.

Installation des Atmel Studio

Das Atmel Studio (vor Version 6 AVR Studio) ist eine IDE von Atmel, dem Hersteller der Mikrocontroller, die sich auf dem Arduino (hier bei AZ-Delivery) befinden. Bei diesem muss man das Programm auch herunterladen. Nachdem ihr die Datei, mit einem Doppelklick, geöffnet habt, müsst ihr das Setup durcharbeiten. Dabei werden einige Zusatzmodule nachinstalliert. Im Wesentlichen könnt ihr jedoch alle Haken lassen, wie sie sind. Nachdem alles installiert ist, seht ihr diese Fenster:
Nun müssen wir noch einige Einstellungen vornehmen, um den Arduino zu verwenden. Wie euch vielleicht schon in der Arduino IDE aufgefallen ist, wird zum eigentlichen Upload des Programms avrdude verwendet. Dieses Uploadtool müssen wir jetzt auch, für das Atmel Studio, konfigurieren. Ihr müsst ihn jedoch nicht installieren, da ihr ihn bereits mit der Arduino IDE installiert habt. Dazu klickt ihr auf Tools > External Tools.

Nun erstellt ihr ein neues Tool. Dazu klick ihr auf den ADD Button. Bei Titel wählt ihr einen sinnvollen Namen, der gut umschreibt, dass wir Programme auf den Arduino Uno, oder einen anderern Arduino laden. Ich habe es einfach Arduino Uno genannt. Bei Command müsst ihr auf eure "avrdude.exe" verlinken. Diese befindet sich ihn eurem Arduino Ordner im Ordner Programme (x86) unter "hardware"  > "tools" > "avr" > "bin" >  "avrdude.exe". Bei Arguments müsst ihr dem avrdude mitteilen, was er tun soll. Dazu benötigt er den Link auf die ".hex" Datei, die er hochladen soll und muss wissen auf welchen Mikrocontroller er die Datei hochladen soll. Das ist eine Liste mit allen Argumente des avrdude. Ihr könnte jedoch auch einfach meine Argumente übernehmen wobei ihr jeweils euren Mikrocontroller eures Arduino eintragen müsst. Ich verwende einen Arduino Uno, der einen ATmega328P hat. Wenn du einen anderen Arduino verwendest hat der vielleicht einen anderen Mikrocontroller. Außerdem kann euer COM Port, und eure Datenrate, eine Andere sein. Bei mir ist das COM3 und 115200 als Datenrate. Glücklicherweise ist das leicht heraus zu finden. Dazu ladet ihr einfach einen Sketch in eurer Arduino IDE hoch. Nun seht ihr in dem unteren Bereich die benötigten Informationen:
Dort steht auch, wo die "avrdude.conf" auf eurem PC ist. Wenn ihr all diese Informationen gesammelt habt, ändert ihr meine Tool dementsprechend ab und speichert das Ganze.
Title: Arduino Uno
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -u -v -patmega328p -carduino -PCOM3 -b115200  -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf"

Den Rest könnt ihr leer lassen und ein Haken ist auch nur bei "Use Output window" nötig. Nun ist euer eigenes Tool fertig. Wenn ihr jetzt auf Tools klick seht ihr, dass sich dort euer Tool befindet:

Erster Sketch

Nachdem die Installation und Konfiguration, des Atmel Studio, abgeschlossen ist, können wir einen ersten Sketch schreiben. Ich zeige hier, wie beispielsweise der blink Sketch in C++ gemacht wird. Dazu klickt  ihr zunächst einmal auf File > New > Project.
Im erscheinenden Fenster wählt ihr jetzt "C++ Executable Project".
Bei Prozessor wählt ihr nun euren jeweiligen Mikrocontroller. Nun habt ihr, in der Mitte des Atmel Studios, ein normales Textfeld.
Sicherlich fällt als Erstes auf, dass das Programm nicht in Setup und Loop aufgeteilt ist, sondern es nur main gibt. In main kann man jedoch einmalige Aktionen ausführen lassen und in der while(1) Schleife wird Alles wiederholt. Dadurch ergibt sich wieder die bekannte Aufteilung. Nun können wir einfach den blink Text eingeben.
Hierbei fällt sicherlich auf, dass das Schalten der LEDs mit der Port Manipulation in der Arduino IDE sehr ähnlich ist. Jetzt haben wir unser fertiges Programm. Das muss über File > Save All gespeichert werden. Anschließend kompiliert man über einen Druck auf die Tast F7 das Programm. Das erzeugt aus dem aktuellen Code die Hex Datei, die über einen Druck auf Tools > Euer Tool (z.B. Arduino Uno) auf den Arduino (hier bei AZ-Delivery) geladen wird. Ihr müsst vor jedem Upload eure Datei kompilieren, da ansonsten eine alte Hex Datei eures Programms hochgeladen wird. Jetzt blinkt die LED des Arduino.
Im nächsten Artikel geht es darum, wie man die GPIOs(Pins) des Arduino steuert.

Kommentare:

  1. Sehr interessant! :) Werd ich mal demnächst ausprobieren, da mir die ArduinoIDE (wenn man das überhaupt IDE nennen darf..) nicht so zusagt..

    AntwortenLöschen
  2. VIelen Dank!
    Sowas habe ich echt gebraucht.:)

    Hat gut geklappt. (Daumen Hoch)

    AntwortenLöschen
  3. Hallo,
    bekomme folgende Fehlermeldung.
    Wo kann der Fehler liegen?

    avrdude.exe: reading input file "G:\Daten\AVR\Test-PWM\Test-PWM\Debug\main.hex"
    avrdude.exe: can't open input file G:\Daten\AVR\Test-PWM\Test-PWM\Debug\main.hex: No such file or directory
    avrdude.exe: read from file 'G:\Daten\AVR\Test-PWM\Test-PWM\Debug\main.hex' failed

    AntwortenLöschen
    Antworten
    1. Bei dir kann avrdude die .hex Datei deines Programms nicht finden und dementsprechend auch nicht hochladen.

      Deshalb solltest du überprüfen, ob du bei deinem Tool die Befehle richtig übernommen hast, und der Pfad zu hex Datei mit dem Pfad im Windows Explorer übereinstimmt.

      Dann sollte das Ganze funktionieren.

      Löschen
    2. Hallo Michael,
      erstmal vielen Dank für das Tutorial!

      Bei mir gibt es leider auch diesen Fehler aus:
      avrdude.exe: reading input file "C:\Users\LoSt\Documents\Atmel Studio\7.0\LEDtoggle\LEDtoggle\Debug\main.hex"
      avrdude.exe: can't open input file C:\Users\LoSt\Documents\Atmel Studio\7.0\LEDtoggle\LEDtoggle\Debug\main.hex: No such file or directory
      avrdude.exe: read from file 'C:\Users\LoSt\Documents\Atmel Studio\7.0\LEDtoggle\LEDtoggle\Debug\main.hex' failed

      Könntest du nochmals genauer erklären, wo der Pfad genau zugewiesen wird? (ich bin leider noch blutiger Anfänger in diesem Gebiet)

      Schon mal vielen Dank!
      Gruß Stephan

      (Hier noch das von mir eingefügte Argument: -u -v -patmega328p -carduino -PCOM3 -b115200 -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf")

      Löschen
    3. Hallo Stephan,
      das Tool avrdude ist die Schnittstelle, zwischen dem Atmel Studio und deinem Arduino. Über das Atmel Studio erstellst du deinen Code, und kompilierst ihn. Dadurch entsteht eine .hex Datei. Diese muss dann auf den Arduino geladen werden, was avrdude übernimmt. Deine Fehlermeldung zeigt an, dass der Pfad, welchen du avrdude als Argument gibst, zur vom Atmel Studio erzeugt .hex Datei nicht stimmt. Deshalb solltest du manuell den Pfad zur erzeugten .hex Datei suchen und als Argument eintragen.
      Hoffe ich konnte weiterhelfen,
      Michael

      Löschen
  4. vielen Dank für deine Antwort.
    Jetzt läuft es.

    AntwortenLöschen
  5. Super, vielen dank für das Tutorial.
    Weißt du auch wie man PWM macht??

    LG

    AntwortenLöschen
  6. Hallo,
    damit funktioniert das Hochladen perfekt !
    -Uflash:w:"$(ProjectDir)Debug\Uno_Blink.hex"
    Es macht nur kein Sinn bei jedem Projekt den Namen zu ändern.
    Meine Frage: Was gebe ich anstelle /Uno_Blink ein in /&(????) die Klammer.
    Mit /&(ItemFileName) <- geht es jedenfalls nicht.

    Gibt es da noch andere Befehle ?

    Gruss Aaron

    AntwortenLöschen
    Antworten
    1. Hallo :)
      LÖSUNG mit -> $(TargetName) einfach rechts auf den Pfeil klicken, danach öffnet sich eine Liste mit Befehlen.

      Eine andere Frage,
      wie programmiere ich über ATMEL STUDIO einen Arduino M0 Pro mit integrierten EBDG von Atmel, schonmal jemand gemacht ?

      Gruß
      Aaron

      Löschen