Ich selbst bin kein Freund der Arduino IDE Umgebung und der darin enthaltenen Bibliothek Wiring. Da nutze ich lieber Alternativen wie Eclipse, CodeBlocks oder Atmel Studio um die Atmel Mikrocontroller zu programmieren. In letzter Zeit bin ich aber beim Atmel Studio hängen geblieben weil das Debugging super funktioniert und wenn man schon Visual Studio kennt die Umgebung genau gleich ist! Atmel Studio ist kostenlos und kann hier heruntergeladen werden.
Was mich aber immer gestört hat war der Fakt, das wenn ich meinen Code kompiliert habe, ich die *.hex Datei über ein Atmel Programmiergerät wie den AVR JTAGICE mk2 oder einen USBasp Programmer in die MCU schicken musste. So ein quatsch dachte ich mir, schließlich ist in den Dingern ja ein Bootloader vorhanden der das flashen über den vorhandenen USB Port übernimmt wie in der Arduino IDE!
Wie ich herausfand ist es in Atmel Studio kein Problem externe Programme einzufügen und am Ende sieht es jetzt bei mir so aus:
Wenn ich nun meinen Code kompiliert habe, dann klicke ich einfach auf einen der Buttons für das passende Board und die MCU wird geflasht, ohne lästig zwischen Fenstern hin und herschalten zu müssen. Wie funktioniert das fragt ihr euch?
Hier das Tutorial:
1. Klickt oben auf „Extras“ -> „External Tools…“
2. Ihr bekommt folgendes Fenster angezeigt wo ihr den Befehl und Argumente eintragen müsst.
3. Jetzt müssen wir eintragen was unser Befehl alles machen soll, in „Titel“ tragt ihr den Namen des Befehls ein. Wie oben zu sehen ist habe ich ihn einfach „Arduino Uno“ genannt um zu wissen welches Gerät ich flashen will.
4. In „Befehl“ müssen wir den Pfad zu „avrdude.exe“ oder wenn wir einen Digispark programmieren möchten zu „micronucleus.exe“ hinterlegen. Habt ihr diese Dateien nicht auf dem Rechner oder wisst nicht wo diese liegen habe ich sie euch hier hinterlegt:
AVR_tools.zip
Arduino_Treiber.zip
Digispark_Treiber.zip
Ich habe in der Zip Datei „AVR_tools.zip“ die aktuelle AVRdude 6.1 hinterlegt mit allen benötigten Dateien. So braucht man die Arduino IDE gar nicht mehr! Ebenfalls habe ich noch eine kleine Batch-Datei für den Digispark geschrieben, damit man weiß wann man diesen anschließen kann für den Flashvorgang!
5. Ihr müsst in den Argumenten noch angeben was AVRdude oder micronucleus überhaupt machen sollen. Was genau eingetragen werden muss habe ich euch in der config_atmel_studio.txt Datei hinterlegt, die ebenfalls in der oben genannten ZIP Datei enthalten ist. Worauf hier noch eventuell geachtet werden muss ist das ihr vielleicht andere COM-Ports nutzt als ich angegeben habe. Diese könnt ihr dann aber im Gerätemanager schnell nachgucken. (Gerätemanager starten: „Windows Taste“+“R“ -> „devmgmt.msc“ eintippen -> „Enter“ drücken!)
6. Unten im Fenster nimmt man alle Häkchen raus, außer das vom „Ausgabefenster verwenden„!
7. Anschließend muss man auf den „Hinzufügen„-Button klicken:
So, das gröbste ist geschafft! Alles was wir jetzt nur noch machen müssen ist das wir oben in die Leiste unsere Buttons einfügen müssen. Dazu gehen wir wie folgt vor:
8. Macht einen Rechtsklick auf die obere Leiste und wählt „Anpassen…“ aus:
9. Im Anschluss drückt ihr im neuen Fenster auf „Neu…“ und erstellt eine neue Symbolleiste mit einem beliebigen Namen:
10. Habt ihr die Symbolleiste erstellt, dann klickt ihr oben auf „Befehle“ im selben Fenster, wählt eure neu erstellte Symbolleiste aus und klickt dann auf „Befehl hinzufügen…„:
11. Es erscheint ein neues Fenster wo wir links in den Kategorien „Extras“ auswählen müssen und rechts dann „Externer Befehl 1, Externer Befehl 2, …„, das diese nicht unsere Titelnamen haben ist mir unbegreiflich aber in der Toolbar stehen dann später unsere vergebenen Namen automatisch! Am Ende sieht das dann so aus:
Damit sind wir dann auch schon fertig. In der Symbolleiste müssten dann schon eure Befehle sichtbar sein und wir können das Fenster mit dem „Schließen„-Button schließen.
Eine kleine Besonderheit bei Verwendung von Atmel ATmega32u4 MCUs (Leonardo/Pro Micro):
Die Arduino IDE überträgt nach jedem Flashvorgang zusätzlichen Code mit bei dem die serielle Schnittstelle wieder Verfügbar ist und so einen Software Reset machen kann um den Bootloader zu starten. Ich habe mir diesen Umstand erspart und einfach einen kleinen Button an mein Pro Micro angelötet. So startet der Bootloader nach einem Reset für ein paar Sekunden. In dieser Zeit kann man den Flashvorgang mit dem Atmel Studio starten!
Vielen Dank für dein Tutorial, hat mir echt geholfen!
Vielen Dank 🙂
Hallo Martin,
ist es möglich den Atmega 328p-pu nach deiner Aleitung auch über einen FTDI zu flashen?
Moin Peter,
ja das ist kein Problem, gibt einfach den richtigen COM Port an das sollte das klappen. Orientiere dich einfach an dem Arduino Nano, der nutzt ja auch ein FTDI Chip…
Spitze, ich wollte eigentlich schon immer meinen eigenen bitstream auf den Arduino laden. Ohne Programmiergerät war ich immer auf die Arduino IDE angewiesen. Muss man etwas beachten, bzw besteht die Gefahr, dass man den Bootloader kompromitiert, wenn man sich bitstreams aus Assembly lädt oder anderen Sprachen als die C-like Programmiersprache der Arduino IDE?
Nein, der Bootloader wird nicht überschrieben, es sei denn man stellt es explizit so ein in Atmel Studio aber da musst du keine Angst haben. Egal ob du mit Assembler, C oder C++ programmierst, beim kompilieren wird ja immer eine einheitliche HEX Datei erstellt und diese dann in den Controller übertragen.
Habe gerade AtmelStudio6.1 installiert. Es gibt dort ein Arduino Plugin, das die IDE in AStudio integriert. Einige Tools sind nur 15 Tage trial, aber mal sehen…
Ja ich kenne das Plugin, nur leider braucht es dafür auch die Arduino IDE auf die ich möglichst komplett verzichten will 🙂
Hi Leute nach genau so ner Einstellung habe ich gesucht!
Aber leider klappt es noch nicht ganz.
Nehme ich dein avrdude.exe kommt die Fehlermeldung libusb0.dll nicht installiert.
Nehme ich avrdude aus der Arduino Umgebung kommt immer eine Timeout-Meldung.
Hier meine Beschreibung, was ich gemacht habe:
-Arduinoboard mit Atmega2560 über USB an PC
-die oben vorgegebenen Einstellungen vorgenommen
-erstelleten Button gedrückt
–>Fehlermeldungen
In der txt Datei steht atmega2650, statt 2560 ein Fehler?
Habt Ihr nen Vorschlag zur Lösung meines Problems?
Hallo Patrick,
was benutzt du denn für Argumente (also Befehle die du an avrdude übergibst)? Das mit atmega2560 ist schon korrekt. Deine Fehlermeldung dürfte nur kommen wenn du ein USBasp Adapter zum programmieren verwendest… was steht hinter dem Command -c xxx?
Hier sonst die DLL Dateien: https://mega.co.nz/#!f0RnmaZI!GyxPkEewAPIxPzyNyQWvAB8vrpItRCaddzMmH5qdBzA
Kopiere diese einfach in den Ordner wo AVRdude.exe hinterlegt ist.
Sag mir bescheid wenn es geht oder nicht 🙂
Hallo Patrick,
dein Artikel klang vielversprechend. Jedoch scheine ich etwas übersehen zu haben denn die Argumente werden nicht akzeptiert (port selbstverständlich angepasst).
ich benutze windows 8 64 bit und die neueste release version von Atmel Studio 6.1.
Die ausgabe: „invalid argument“ „cant read system wide file“ was läuft da falsch ?
vielen Danke
Moin Christian,
ich heiße Martin 🙂 …. aber zu deinem Fehler: Könntest du mir mal deine Eingaben posten? Vielleicht finden wir so deinen Fehler… Ich habe nochmal alles überprüft, auch ich nutze Win8.1 64 Bit und das aktuellste Atmel Studio
Grüße Martin
Auch von mir Dank. Zu obigem Problem würde ich sagen, das die libusb0.dll in das system32 Verzeichnis in Windows kopiert werden muss.
Hallo Martin,
vielen Dank für deine schnelle Antwort.
Leider wird bei mir in Externe Tools keine Auswahl von MCU’s angezeigt.
Muss ich noch irgendwas einbinden?
MFG
Peter
Viel Dank für deine Anleitung, hat super funktioniert!
PS:
Patrick hatte Recht, in deiner .txt – Datei bei den AVR_Tools steht fälschlicherweise 2650 beim ATMega, was natürlich durch 2560 ersetzt werden muss, ansonsten gibt es Fehlermeldungen.
Aaah jetzt habe ich es auch gesehen…
Vielen Dank! Dateien habe ich aktualisiert.
Hi,
danke für die tolle Anleitung. Allerdings habe ich das Problem, dass ich den Uno dennoch nicht über Device Programming aufrufen bzw.ansprechen kann.
Wenn ich aber auf den (deiner Anleitung nach erstellten) neuen Button anklicke, wird der Chip per avrdude angesprochen..
Wie bekomme ich denn die neuen Dateien auf den 328P auf dem Uno?
Über hilfe würde ich mich freuen 🙂
Grüße
Benny
Hallo Benny, hast du auch die richtige serielle Schnittstelle ausgewählt? Die sind von System zu System verschieden. Prüfe bitte auch ob du beim Flashvorgang auch immer die Datei ausgewählt ist die die „main()“-Funktion enthält.
Hallo Martin,
warum hast du meine Frage denn gelöscht?
Unter deinem Niveau? Es gibt ja auch Anfänger, die gerne was dazulernen wollen .
Benny
Oh, Entschuldigung.
Vorhin wurde mein Beitrag nicht angezeigt, und nach dem 2ten Kommentar war es wieder da.
Ist mir jetzt aber peinlich …
Grüße
Benny
Hey Benny ich habe nicht gelöscht, alle Anfragen müssen von mir erst genehmigt werden und ich hatte noch keine Zeit mir deine Fragen anzugucken…deswegen erscheinen sie noch nicht 😉
Habe aber jetzt deine erste Frage beantwortet…
Hallo Martin 🙂
Sorry für mein zweites (und dummes ) Posting.
Ich dachte das wäre gelöscht worden, und an dem Tag war mir eh eine Laus über die Leber gelaufen.
Vielen dank für dein tolles Tutorial, und auch für deine schnelle hilfe.
Das Problem bei mir ist, dass es eine bereits erstellte *.hex Datei ist, und da ist keine main.c Datei dabei.
Der Com Port ist korekkt, aber ich bekomme ständig Fehlermeldungen.
Ist alles echt nicht so einfach für einen blutigen Anfänger 🙂 .
Naja, ich werde mich da wohl noch weiter reinlesen müssen, in die ganze Materie. Wie so oft in solchen Fällen, wird der Fehler wahrscheinlich vor dem PC sitzen.
Ich wünsche dir einen schönen Tag 🙂
Gruß
Benny
Hallo Martin,
vielen Dank für das Tutorial. Bin entsprechend vorgegangen…..bekomme jedoch die Fehlermeldung das die libusb0.dll nicht gefunden wird. Der Treiber ist in deinem Paket auch nicht vorhanden.
Zudem kann ich im Atmel Studio V6.2 nicht auf die erstellten external command button klicken. die sind grau hinterlegt. Muss den command button nichts „hinterlegt“c werden?
Grüße Martin
Hallo Martin,
sorry das ich so spät antworte, konntest du das Problem schon lösen? Welchen Programmer nutzt du? Ich gehe mal davon aus das du sonst mit dem Digispark porgrammierst? Dann lade dir dazu die Treiber runter und wenn du diese entpackst siehst im „amd64“ Ordner die passende DLL Datei. Diese kannst du in C:/Windows/system32 reinkopieren, dann sollte die Fehlermeldung behoben werden. Alternativ den Treiber auch einfach installieren 😉
Moin Martin, klasse dein Tutorial, echt danke !
Ich hab nur folgendes problem bzw. bekomme folgende Fehlermeldung :
avrdude.exe: stk500_getsync(): not in sync: resp=0x00
ich finde einfach nicht raus woran es liegt, hoffe du kannst mir vielleicht weiter helfen.
Danke!
Hallo, das könnte viele Gründe haben… im Grunde bedeutet diese Meldung das keine Kommunikation zum Atmel Controller stattfinden kann. Entweder ist die Baudrate falsch eingestellt oder der Reset der den Atmel in den Booloader versetzt konnte nicht durchgeführt werden…
Du hast aber keinen STK500 verwendet oder ?
Ne leider nicht, nur die integrierten STK500 Emulatoren in den Bootloadern
Hallo,
ich verwende einen Arduino Nano clone über USB Kabel.
Einfach den COM port Treiber des Chipsatz installiert.
Nen aktuelles AVRdude1.6 http://download.savannah.gnu.org/releases/avrdude/
AVR Studio6.2
und diese AVRdude parameter:
-patmega328p -carduino -P\\.\COM24 -b57600 -D -Uflash:w:“$(ProjectDir)Debug\$(ItemFileName).hex“:i
Funktioniert super auf Win7 64bit
Vielen Dank an alle hier !!
Vielen Dank für den Tipp Marco. Ich habe jetzt auch auf die aktuellste Version 6.1 von AVRdude aktualisiert und in den Argumenten wird jetzt „arduino“ bzw. „wiring“ genutzt.
Auch von mir vielen Dank für dieses sehr gute Tutorial. Ich habe Atmel Studion installiert und es funktionierte auf Anhieb.
Nur eine Frage. Ich habe ein Arduino Micro-Bord mit einem ATmel 32u4 Prozessor. Welche Argumente muß ich beim Einrichten der Buttons im Feld Argumente eingeben?
Vielen Dank für dein Kommentar, für einen ATmega32u4 sieht es so aus:
Arguments:
-patmega32u4 -cavr109 -P\\.\COM15 -b57600 -D Uflash:w:“$(ProjectDir)Debug\$(ItemFileName).hex“:i
Du musst natürlich noch deinen COM Port anpassen.
Habe die AVR_tools.zip aktualisiert und den ATmega32u4 hintugefügt…
Das ging ja sehr schnell mit der Antwort. Ich habe es gleich nach der Arbeit ausprobiert und bekomme folgende Fehlermeldung.
„Connecting to programmer: .avrdude.exe: butterfly_recv(): programmer is not responding“
Com-Port habe ich eingerichtet und das funktioniert auch über die arduino IDE. Die Baudrate habe ich dann noch verändert auf 115200, wie bei den anderen (UNO und MEGA). Der Mega funktioniert auch. Übrigens ist da noch ein Schreibfehler im Argument vom Mega – nicht 2650 sondern 2560.
Ich habe dann noch eine Frage zu den Argumenten. Kann man irgendwo nachlesen, wie die einzelnen Parameter entstanden sind und welche Bedeutung sie im einzelnen haben?
Als letztes noch – wenn es den Rahmen nicht sprengt. Ich habe schon viel recherchiert hinsichtlich einem vernünftigen Tutorial zu Atmel Studio 6. Hättest du da einen Tipp. Noch mal vielen Dank für deine Mühe.
Danke für den Hinweis … dachte ich habe das mit dem 2560 schon geändert. Datei habe ich aktualisiert…
Funktioniert es denn jetzt mit 115200 und dem ATmega32u4? weil normalerweise der avr109 für 57k ausgelegt ist. Gib mir bitte da eine Rückmeldung, ich habe gerade keinen ATmega32u4 da.
Welche Befehle du dem avrdude übergeben kannst kannst du hier nachlesen:
http://www.nongnu.org/avrdude/user-manual/avrdude_4.html#Option-Descriptions
Welche Argumente welcher Arduino benutzt findest du in der Arduino IDE boards.txt Datei:
../ArduinoIDE/hardware/arduino/avr/boards.txt
Nach diesen Werten musst du dann gucken:
build.mcu=
upload.tool=avrdude
upload.protocol=
upload.speed=
Danke für die Verweise.
Leider nein – bei beiden Baudraten kommt immer die selbe Meldung.
Nach den Werten habe ich geschaut. upload.tool=avrdude habe ich in dieser Datei nicht gefunden.
Ist das denn ein Arduino Board oder der nackte Controller? Hast du einen Bootloader drauf?
Hier ist z.B. ein Auszug aus der boards.txt Datei für den Arduino Micro:
micro.name=Arduino Micro
micro.upload.tool=avrdude
micro.upload.protocol=avr109
micro.upload.maximum_size=28672
micro.upload.maximum_data_size=2560
micro.upload.speed=57600
micro.upload.disable_flushing=true
micro.upload.use_1200bps_touch=true
micro.upload.wait_for_upload_port=true
micro.bootloader.tool=avrdude
micro.bootloader.low_fuses=0xff
micro.bootloader.high_fuses=0xd8
micro.bootloader.extended_fuses=0xcb
micro.bootloader.file=caterina/Caterina-Micro.hex
micro.bootloader.unlock_bits=0x3F
micro.bootloader.lock_bits=0x2F
micro.build.mcu=atmega32u4
micro.build.f_cpu=16000000L
micro.build.vid=0x2341
micro.build.pid=0x8037
micro.build.usb_product=“Arduino Micro“
micro.build.board=AVR_MICRO
micro.build.core=arduino
micro.build.variant=micro
micro.build.extra_flags={build.usb_flags}
Das steht dann unter:
micro.upload.tool=avrdude
Ich habe das Micro-Board mit bootloader, denn die scetches kann ich problemlos uploaden in der Arduino IDE über usb. Die Board.txt – Einträge zum Micro sind aus der Arduino IDE 1.0.5-r2 :
micro.name=Arduino Micro
micro.upload.protocol=avr109
micro.upload.maximum_size=28672
micro.upload.speed=57600
micro.upload.disable_flushing=true
micro.bootloader.low_fuses=0xff
micro.bootloader.high_fuses=0xd8
micro.bootloader.extended_fuses=0xcb
micro.bootloader.path=caterina
micro.bootloader.file=Caterina-Micro.hex
micro.bootloader.unlock_bits=0x3F
micro.bootloader.lock_bits=0x2F
micro.build.mcu=atmega32u4
micro.build.f_cpu=16000000L
micro.build.vid=0x2341
micro.build.pid=0x8037
micro.build.core=arduino
micro.build.variant=micro
Ich glaube ich habe die Antwort.
Den Atmega32u4 muss man erst in den Bootloader Modus versetzen. Ich habe die AVR_tools.zip Datei aktualisiert. Da ist jetzt eine arduino_32u4.bat Datei drin. Gucke einfach in der config_atmel_studio.txt für die richtigen Argumente… hoffe es klappt alles 🙂
Ich habe in command die avrdude.exe durch arduino_32u4.bat erstetzt und in Arguments das entspr. Com-Port geschrieben lt. der config…Datei „\\.\COM31“ und dann kam das:
Der Befehl „avrdude.exe“ ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
FEHLER: Die Eingabeumleitung wird nicht untersttzt. Prozess wird unverzglich beendet.
Der Befehl „avrdude.exe“ ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Die avrdude.exe muss sich natürlich im selben Ordner befinden wie arduino_32u4.bat
Ich habe sie in dem selben Verzeichnis – das ist korrekt.
Vielleicht habe ich mich falsch ausgedrückt. Trotz der befolgten Hinweise, für die ich sehr dankbar bin, kommt aber immer noch die selbe Fehlermeldung. Ich habe parallel noch in andere Foren geschaut – bin aber zu keinem Ergebnis gekommen, da ich einfach noch nicht so tief in der Materie drint stecke. Sehr gern würde ich diese Platine für mein Projekt zum Laufen bekommen, da ich sie sehr vielseitig einsetzen kann.
Ich habe mir jetzt mal einen arduino pro micro bestellt… Sage dir am WE bescheid :)…das kriegen wir schon hin
Hi Jörg,
Das grundlegende Problem ist das auf den Micros kein FTDI verbaut ist. Du musst den µC daher erst in den Bootloader Modus versetzten. Die Arduino Standard IDE macht das, mittels einer seriellen Verbindung auf 1200 Baudrate. Öffnet die Verbindung und im nächsten Moment wird die Verbindung wieder geschlossen. Der Bootloader schaltet dann in den Programming Mode um (ganz genau für 8 Sekunden). Da das ATMEL Studio leider keine sequentiellen Uploadvorgänge ausführen kann, wollte Martin abhilfe mit der Batch schaffen. Leider funktioniert diese auch nicht wie sie sollte.
Und hier der Trick:
Der RESET-Button auf dem Micro resetiert in Wirklichkeit nicht den µC, sondern versetzt ihn nur in den Bootloader-Modus. Und genau das kannst du ausnutzen. RESET-Button, und dann erst deinen Code Uploaden (dafür hast du dann 8 Sekunden Zeit bis der Bootloader deinen Code startet).
Programmieren kannst du mit den Standard-Parametern und der Baud von 57600.
LG,
Hallo Jörg
ich hatten den gleichen Fehler wie du. Ich habe die bat erweitert. Vor dem aufruf von der exe zeige ich mit cd auf das Verzeichnis in dem die exe liegt
@echo off
echo Bitte Digispark anschliessen…(in 60 Sekunden automatischer Abbruch)
cd C:\AtmelStudio Digispark Progarmmer\AVRdude
micronucleus.exe –run –type intel-hex %1%
Vielen Dank für die tolle Anleitung. Durch sie konnte ich meinem Ziel ein ganzes Stück näher rücken. Ich würde gerne den Arduino Nano programmieren. Allerdings wird der Nano nicht geflasht. In den Argumenten des External Tools stehen die Parameter die Marco gepostet hat. Allerdings erscheint im Output Window folgender Text:
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e950f
avrdude.exe: reading input file „”E:\Projekt\TEST\HelloWorld\HelloWorld\HelloWorld\Debug\HelloWorld.hex”“
avrdude.exe: can’t open input file ”E:\Projekt\TEST\HelloWorld\HelloWorld\HelloWorld\Debug\HelloWorld.hex”: Invalid argument
avrdude.exe: read from file ‚”E:\Projekt\TEST\HelloWorld\HelloWorld\HelloWorld\Debug\HelloWorld.hex”‘ failed
avrdude.exe: safemode: Fuses OK (E:00, H:00, L:00)
avrdude.exe done. Thank you.
Irgendwie kann das .Hex file nicht gefunden werden. Ich bin leider auch Anfänger und kenne mich daher nicht aus. Es wäre schön, wenn mir jemand helfen kann.
Vielen dank schon mal 🙂
Hallo Benno,
offensichtlich kann er die HelloWorld.hex Datei nicht finden in deinem Projekt. Heißt diese so?
Bevor du deinen Code auf den Atmel übertragen kannst musst du diesen erstmal kompilieren. Das machst du indem du auf den „Build“-Button drückst.
Grüße
Martin
Hi, ich konnte das Problem lösen. Ich musste die „“ – Zeichen im Argument entfernen und sieht wie folgt aus:
-patmega328p -carduino -P\\.\COM3 -b57600 -D -Uflash:w:$(ProjectDir)Debug\$(ItemFileName).hex:i
Danke für die Antwort 🙂
Grüße Benno
Ah super, sehr gut 🙂
Hallo, bin neu beim AVR Studio 6.x. Danke erstmal für die kurze gute Beschreibung.
Wie ist der letzte Absatz gemeint, mit der main.c Datei?
Wo muss ich die test.c auswählen?
Danke. Gruß
Die Datei, in der die main()-Funktion steht muss beim kompilieren angewählt werden.
Hallo Martin,
vielen Dank schon mal vorab für die gute Einleitung.
Habe zur Zeit einen Arduino YUN vor mir leigen und das selbe Problem, welches Jörg wieter oben umrissen hat. Der YUN hat ja wie der Micro auch einen Atmel ATmega32u4 mit Bootloader drauf.
Deine .bat Datei habe ich, nach einigem recherchieren, um ein paar Befehle erweitert. (hatte Probleme, dass Windoof, die AVRdude.exe nicht gefunden hatte)
call „E:\Program Files\Arduino_prog\AVR_tools\AVRdude\avrdude.exe“ -p atmega32u4 -c avr109 -P COM8 -b 1200 -n
timeout /T 1
call „E:\Program Files\Arduino_prog\AVR_tools\AVRdude\avrdude.exe“ -p atmega32u4 -c avr109 -P COM8 -b 57600 -D -Uflash:w:“$(ProjectDir)Debug\$(ItemFileName).hex“:i
Habe zu testzwecken die Ausgabe eingeschalten.
Beim Ausführen kommt folgender Fehler:
E:\Program Files\Atmel\Atmel Studio 6.2>call „E:\Program Files\Arduino_prog\AVR_tools\AVRdude\avrdude.exe“ -p atmega32u4 -c avr109 -P COM8 -b 1200 -n
Connecting to programmer: .avrdude.exe: ser_send(): write error: sorry no info avail
E:\Program Files\Atmel\Atmel Studio 6.2>timeout /T 1
FEHLER: Die Eingabeumleitung wird nicht untersttzt. Prozess wird unverzglich beendet.
E:\Program Files\Atmel\Atmel Studio 6.2>call „E:\Program Files\Arduino_prog\AVR_tools\AVRdude\avrdude.exe“ -p atmega32u4 -c avr109 -P COM8 -b 57600 -D -Uflash:w:“$(ProjectDir)Debug\$(ItemFileName).hex“:i
avrdude.exe: ser_open(): can’t set com-state for „\\.\COM8“
avrdude.exe done. Thank you.
Kannst du mir Helfen? Ist dasProblem von Jörg gelöst?
Vielen lieben Dank schon Vorab
Grüni
Hallo Grüni, ich bin dran… hatte zurzeit wenig Zeit mir das genau anzugucken, aber es ist nicht so einfach wie bei den anderen Serien 🙂 …eine Lösung stelle ich aber demnächst zur Verfügung.
Hallo,
vielen Dank für das super Tutorial. Bin über die Einfachheit begeistert.
Allerdings habe ich eine Frage. Kann es sein, dass bei dieser Methode eingebundene utils nicht funktionieren?
Habe z.B. folgendes kurzen Programm geschrieben:
#include
#define F_CPU 8000000
#include
int main(void)
{
DDRB=0xFF;
while(1)
{
PORTB = (1<<PB0);
_delay_ms(100);
PORTB = (~(1<<PB0));
}
}
Leider macht er mir die LED nur an, aber nicht mehr aus bzw. lässt sie nicht blinken. Hast du eine Idee, woran das liegen kann?
Ich hoffe, du kannst mir helfen.
Hallo Hendrik,
das muss so aussehen:
while(1)
{
PORTB |= (1<<PB0);
_delay_ms(100);
PORTB &= ~(1<<PB0);
}
Servus zusammen,
ich hatte das selbe Problem wie Grüni und Jörg.
Es hat eine halbe Ewigkeit gedauert, aber ich habe es lösen können.
Das Problem ist, dass man (anscheinend nur unter Windows) den Port nicht mehr finden kann, nachdem man ihn mit -b1200 angesprochen hat. (Passiert selbst wenn man den Port über die PowerShell öffnet)
Die Arduino IDE löst das indem sie danach noch einmal die Ports checkt. (Sie verbose output). Ich habe das mit Batch mitteln nicht hin bekommen aber glücklicherweise springt der Arduino sofern frei genau einen Port höher.
Mit folgendem Batch läßt sich damit unter Windows und Atmel Studio 6.2 ein Leonardo und vermutlich alle anderen 32u4 flashen.
@echo off
SET port=%1%
„\avrdude.exe“ -patmega32u4 -cavr109 -PCOM%port% -b1200 -n
SET /a port=%port%+1
„\avrdude.exe“ -patmega32u4 -cavr109 -PCOM%port% -b57600 -D -Uflash:w:%2%:i
ist euer absoluter Pfad.
Command in Atmel Studio ist die Batch Datei selber
Als Argumente:
$(ItemDir)Debug\$(ItemFileName).hex
ist nur die nummer des Ports also 3 oder 56
Sowohl in der Batch Datei als auch in den Argumenten kommen keine Anführungszeichen in den Pfad, auch nicht wenn Leerzeichen im Pfad sind.
Hoffe es hilft jemandem!
Ciao Kai
Arg, meine Platzhalter wurden gestripped.
hier noch einmal der Code:
Batch:
@echo off
SET port=%1%
“{absolutePath}\avrdude.exe” -patmega32u4 -cavr109 -PCOM%port% -b1200 -n
SET /a port=%port%+1
“{absolutePath}\avrdude.exe” -patmega32u4 -cavr109 -PCOM%port% -b57600 -D -Uflash:w:%2%:i
{absolutePath} ist euer absoluter Pfad.
Argumente:
{portNumber} $(ItemDir)Debug\$(ItemFileName).hex
{portNumber} ist nur die nummer des Ports also 3 oder 56
Sorry dafür. Ich hoffe ihr lasst euch nicht verwirren.
Hallo Martin,
tolle Anleitung funktioniert alles super mitn UNO (China UNO mit CH341 Driver). Allerdings hab ich da noch ein paar Nanos (China mit CH340G Driver). Driver correct installiert und funktioniert kann mit putty schnittstelle öffnen ebenso mit Arduino IDE – flashen funktioniert dort auch. Mit AVR 6.2 und avrdude öffnet sich zwar die Schnittstelle aber ich glaube nicht das er das HEX rüberschiebt, AVRDUDE.exe: stk500v2_ReceiveMessage(): Timeout.
Keine Ahnung warum das net funzt, hab mir dann mal deine config angeschaut,
Arguments: -patmega328p -cwiring -P\\.\COM15 -b115200 -D -Uflash:w:“$(ProjectDir)Debug\$(ItemFileName).hex“:i
-> bin relativ neu und hab keine Ahnung davon hab mir dann mal das angeschaut und bei CC gelesen das der Bootloader ja nen stk500 sein soll, okay gibt mir ja auch die Fehler-Ausgabe bei AVR aus. mich hatte noch Interessiert wie die Agrumente aufgebaut sind hab das auch alles verstanden bis auf „wiring“ -> also bootloader von wiring.org oder wie? warum dann nicht direkt den stk500v2 auswählen –> is aber egal funkt auch nicht. Hatte bei adafruit nachgeschaut bin allerdings nicht weitergekommen, einige schreiben man solle den highvoltage nehmen aber ja.. so richtig komme ich nicht weiter.. ich denke das liegt am bootloader oder an avrdude selber .. könntest du mir bitte erklären wie ich das ding zum laufen bekomme. Vielen Dank
Probiere mal anstatt -cwiring => -carduino und achte darauf das der richtige COM Port ausgewählt ist. vielleicht musst du auch die Baudrate herabsetzen: -b57600 Ein Feedback wäre super 🙂
Danke für deine schnelle Rückmeldung:)
Also Gerätemanger com 19 – settings ebenfalls baud auf 57600 gestellt und im Sytnax der agrumente auch abgeändert siehe wie folgt:
-patmega328p -carduino -P\\.\COM19 -b57600 -D -U flash:w:“$(ProjectDir)Debug\GccBoardProject1.hex“:i
— ach ruhe geil hat geklappt, daumen hoch;)–> warum ging das jetz? nur weil ein anderer Programmer ausgwählt wurde? das verstehe ich nicht ganz kannst du mir das erklären oder mir zumindest paar links schicken wo das erklärt wird (also was im programmer steht, gut ich habe beim original winavr angeschaut aber sorichtig blick man da nicht durch wie das ganze mit dem flashen funktioniert und was man beachten muss usw.)-> bin schon wissbegierig
Was man als Programmer nehmen muss kommt immer auf den Chip an, ich habe mir einfach gedacht das weil kein ATmega16u4 oder so zum programmieren eingesetzt wird, er die hohen Übertragungsgeschwindigkeit nicht verträgt 😉
Moin Martin,
vielen Dank für dein Tutorial hierzu. Meinen Nano kann ich zwar erreiche, er hält an und die Bootloader LED geht an, aber ansonsten fehlt hier noch etwas.
Was ich nicht verstehe ist, wo soll ich das ‚*‘.c file auswählen? Auch habe ich 4 ‚External Commands, nur wie kommt hier was rein?
Für Hilfe dankt dir oder jedem anderen
]:-> Christian
Hallo Christian, ich habe jetzt die Argumente in der AVR_tools.zip Datei soweit aktualisiert das man daruf nicht mehr achten muss. Voraussetzung ist Atmel Studio 7…
Hallo,
hab auch einen nano gekauft und bin begeistert, dass ich nun das Atmel Studio (7) benutzen kann. Ich hab auch -carduino und b57600 einstellen müssen. Damit funktiniert das Download.
Aber kann man auch debuggen? Du hast eingangs gesagt, dass im Atmel Studio das Debuggen so gut funktioniert.
Wenn ich aber auf debuggen klicke, meint er: „Please select a connected tool and interface“
Ich hab schon mal versucht, in dem sich öffnenden Fenster den AvrDude als externes tool anzugeben, aber das funzt nicht.
Die Nano’s haben nur eine serielle Schnittstelle zum programmieren, mit diesen kann man nicht debuggen, Thom.
Hallo ,
genau das habe ich mir auch so hergestellt, wunderbar ist deine Lösung mit dem Bootloder Digispark
ich verwende von denen das DigisPark Board mit dem Atiny85 (micronucleus.exe)
Wenn ich AvrDude verwende kann man auch den Path für Release/Debug dynamisch dartsellen:
-p t85 -c usbasp -P usb -U flash:w:“$(TargetDir)\$(TargetName).hex“:i
Leider habe ich ein massives Problem des DigiUSB (DigiUSBDevice ). Nach einer Weile der Kommunikation, stürzt der Baustein samt WindowsUSB ohne Bootloader ab, und ich kann den Fehler leider nicht finden. Danach ist der USB Port bis zum Neustart unbrauchbar.
Ich habe meine Argumente auf deinen Hinweis hin geändert, danke Karsten dafür. Es gab mal einen Firmwarefehler der den Digispark quasi kurzgeschlossen hat…. es gab auch Probleme mit Windows 10. Mit der neusten Firmware sollten die Probleme aber beseitigt sein.
https://github.com/micronucleus/micronucleus
Danke für dein Tutorial, bei meinem Arduino Uno hatte es bereits funktioniert. Nun habe ich seit neusten ein Arduino Zero und Probleme den Befehl für „Arguments“ zusammenzukriegen, könntest du mir dabei eventuell weiterhelfen ?
Ich habe leider keinen Zero zur Hand um das zu testen, da es aber ein SAMD MCU ist probiere es doch mit dem bossac.exe tool wie beim DigiX
Hallo,
hab das Ganze mittlerweile zum Laufen bekommen. Mein Ziel war es die Atmel IDE genauso nutzen zu können wie die von Arduino. Hab dafür die diversen Header und c/cpp Dateien aus der Arduino IDE in ein separates Verzeichnis kopiert und binde sie nun entsprechend ein.
Hab nun mal das BlinkWithoutDelay Beispiel genommen und es auf einen Uno geflasht. Das funktioniert auch, nur stimmt die Taktung nicht. Die LED blinkt nicht im 1 Sekunden Takt sondern wesentlich schneller.
Der Kompiler meckert auch beim kompilieren und setzt über die delay.h einen Standardwert.
Hab nun rausgefunden dass die Arduino IDE eine „Boards.txt“ Datei beim kompilieren einbezieht. In ihr werden nun sowohl die Taktung (F_CPU) als auch verschiedene andere Parameter konfiguriert.
Ein Teil davon erklärt der IDE wohl nur welche Header zu welchem Board gehören, wo sie zu finden sind und welche Datenübertragungsrate beim Upload eingestellt werden muss.
Andere Parameter jedoch übergeben darin wiederum irgendwelche Hex-Werte von denen ich nicht weiß wofür sie sind.
Ich bin nun unsicher inwieweit die anderen Werte gebraucht werden. Auch weiß ich nicht wie die Arduino IDE diese „Boards.txt“ einbindet.
Kann/ muss ich diese Werte/ Datei noch in das Atmel Studio einbinden?
Danke und Gruß
Eddie
Die Arduino IDE übergibt ihre Werte auch nur an avrdude.exe. Diese Werte habe ich ja manuell festgelegt, das mit der boards.txt kenne ich und ist mir zu aufwendig
D.h. es sind gar keine der Werte implementiert? Weißt du was das für Werte sind? Die Frequenz hab ich dann mauell eingestellt
Hallo!
Ich habe alles so gemacht wie es Ganimed beschrieben hat, es funktioniert bei mir aber nicht. Ich hoffe mir kann jemand helfen obwohl der letzte Post schon ein halbes Jahr her ist.
Mein verwendete Batch Datei:
@echo off
SET port=%1%
\\.\C:\asdf\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b1200 -n
SET /a port=%port%+1
\\.\C:\asdf\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b57600 -D -Uflash:w:%2%:i
Command:
C:\asdf\arduino_32u4.bat
Arguments:
6 $(ItemDir)Debug\$(ItemFileName).hex
Das ist der Output den ich bekomme wenn ich meinen Arduino Micro (32u4) flashn möchte:
avrdude.exe: ser_open(): can’t open device „\\.\COM6“: Das System kann die angegebene Datei nicht finden.
avrdude.exe done. Thank you.
avrdude.exe: ser_open(): can’t open device „\\.\COM7“: Das System kann die angegebene Datei nicht finden.
avrdude.exe done. Thank you.
Moin Martin,
ich habe auf Amtel Studio 7 geupdated, aber keine Änderung erreicht. In der Menuebar drücke ich meine ‚NANO‘ Schaltfläche, der Nano bootet -> rote LED blinkt einmal und anschlißend läuft mein altes Programm weiter. Auf der Schaltfläche steht nun (Stop)NANO.
Dann sehe ich noch die External Commands 2 bis 4, dies sind ausgegraut. 1 Fehlt!? Muss in die Befehle nicht noch Kommands rein für flashen und anderes?
Bste Grüße aus Hamburg
Christian
Ich nochmal. In meinem Projektverzeichnis /Debug ist kein .hex file. Beim Build kommt immer folgender Fehler, der mir leider nichts sagt: Severity Code Description Project File Line
Error cannot access device-specs for ‚atsam3x8e‘ expected at ‚c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.9.2/device-specs/specs-atsam3x8e‘ GccBoardProject1 avr-gcc.exe 0
Kann jemand helfen?
]:-> Christian
Hallo Martin habe folgendes Problem,
beim schreiben auf einen Adroino Nano Clon von Atmel Studio 7 bekomme ich immer die folgende Fehlermeldung:
avrdude.exe: stk500v2_ReceiveMessage(): timeout
an was kann das liegen?
Moin Klaus,
das hatte ich auch, als die Baudrate noch 115,2kB war und ich auch den Chip 328 auswählte wie aus dem zip rauskopiert. Es läuft bei 57,6 und dem 328p.
]:- Christian
Hallo,
ich möchte den Arduino M0 Pro mit dem Embedded Debugger EDBG über Atmel Studio 7.0, nur mit einem microUSB Kabel programmieren bzw debuggen können.
Wie geh ich da vor, bzw. welchen Befehl füge ich dazu ein. (Argument)
Grüße
Super Anleitung! Wünschte es gäbe mehr solcher Tutorials! Danke!
Hallo Martin
Herzlichen Dank für dein tolles Tutorial.
Leider stehe ich (als Anfänger) irgendwie auf dem Schlauch und komme nicht weiter.
Ich habe das Atmel Studio 6.2 installiert, und die oben aufgeführten Schritte befolgt. Hat soweit gut geklappt.
Als Board habe ich das Arduino UNO R3 (ATmega 328P).
Bei den Einstellungen habe ich bei „Device“ den ATmega 328P, aber leider kann ich bei Tool nur den „Simulator“ anwählen, und nicht etwa den USB bzw. bei mir COM4 – Port.
Und wenn ich ein einfaches Blink-Beispiel hochlade, bleibt die LED dauernd an.
Keine Ahnung woran das legen könnte?
###############################
#include
#include
int main(void)
{
DDRD |= (1 << PD7); //PD7 High
while(1)
{
// LED on
PORTD = (1 << PD7);
_delay_ms(1020);
// LED off
PORTD = (1 << PD7);
_delay_ms(1020);
}
}
###############################
Stimmt was am Code nicht, oder liegt es daran dass ich nicht die Schnittstelle anwählen kann?
Wenn ich es mit der Arduino IDE (Beispiel-Code) laufen lasse blinkt es, danach mit Atmel Studio mit obigem Code nur das dauerleuchten (scheint also doch eine gewisse Form von Kommunikation zu existieren).
Fehler erhlate ich seitens Atmel keine.
Ich wäre sehr dankbar um Rat und Hilfe..
Edit: LED off steht natürlich „PORTD = (0 << PD7)"
Hallo,
ich habe mich jetzt auch ein Paar stunden mit dem Arduino Nano und dem darauf befindlichen Atmega32u4 herumgeärgert aber es dank der vielen Kommentare und Anregungen hier in diesem top Tutorial endlich geschafft (mittlerweile Atmelstudio 7).
Die einzigen Veränderungen die ich im Vergleich zu dem post von Kai vornehmen musste waren folgende:
Ich musste bei der Batchdatei die Anführungszeichen entfernen so nun z.B. mein Pfad in der Batch:
@echo off
SET port=%1%
C:\AVRdude\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b1200 -n
SET /a port=%port%+1
C:\AVRdude\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b57600 -D -Uflash:w:%2%:i
Außerdem gab es bei mir noch einen Fehler im Atmelstudio, welches das .hex file mit anderem namen erstellte, weshalb ich die Eingabe bei „Arguments“ wie folgt angepasst habe:
8 $(ItemDir)Debug\$(TargetName).hex
Wobei die 8 mein Standartport ist, den mein Nano/Leonardo haben, wenn ich im Gerätemanager nachschaue.
Zur Vollständigkeit möchte ich noch darauf hinweisen dass der Command für das External Tool Fenster bei mir so aussieht: C:\AVRdude\arduino_32u4.bat wobei die Batch den Inhalt von oben enthällt den ich von Kai genommen und wie beschrieben angepasst habe.
Ich hoffe ich kann mit diesen Ergänzungen noch ein Paar Menschen helfen die so wie ich heute umherirrten.
Hallo Alex, danke für die Info, bei mir gab es nur eine kleine Veränderung, ich musste den Port -1 rechnen und nicht +1 wie bei dir, aber ich denke das ist von System zu System unterschiedlich.
Außerdem habe ich noch eine kleine Pause von 2 Sekunden eingefügt damit etwas gewartet wird bis der neue serielle Port verfügbar ist… so sieht jetzt die Batchdatei bei mir aus:
@echo off
SET port=%1%
C:\AVRdude\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b1200 -n
SET /a port=%port%-1
ping -n 2 127.0.0.1 > NUL
C:\AVRdude\avrdude.exe -patmega32u4 -cavr109 -PCOM%port% -b57600 -D -Uflash:w:%2%:i
Vielen Dank für dieses super Tutorial. Hat mich jetzt echt Zeit gekostet eine Kommunikation zwischen meinem Arduino Uno und dem AVR Studio herzustellen. Jetzt hat es endlich geklappt dank dieses Tutorials.
Danke erstmal für die Mühe^^
Eine Frage hätt ich noch. Wenn ich den Arduino dann mit Assembler programmiere, muss ich mich noch um die Fusebits kümmern oder werden die durch den Vorgang nicht beeinflusst?
Gruß
Fusebits sollten schon vorher gesetzt werden mithilfe von AVRdude, benutzt du einen Arduino oder ähnliches sind diese schon programmiert und müssen nicht neu gesetzt werden.
Dabke 🙂 Hab ich mir fast schon gedacht, dass das so ist^^
Dein Tutorial zu Arduino via USB ist ohne Frage gut.
Aber ich bekomme folgende Fehlermeldungen :
avrdude.exe: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude.exe: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
avrdude.exe done. Thank you.
Den avrdude zusammen mit usbasp um über die ISP Schnittstelle zu programmieren habe funktionsfähig laufen aber, wie gesagt, über die USB-Schnittstelle kriege ich es nicht ans Laufen. Die COM_Schnittstelle stimmt. Wenn di nicht stimmt gibt es eine andere Fehlermeldung.
Command C:\avrdude\avrdude.exe
Arguments -patmega328p -carduino -P\\.\COM4 -b115200 -D -Uflash:w:“$(ProjectDir)Debug\$(TargetName).hex“:i
Gruß Berny
@Berny
Statt: b115200
Das hier: b57600
Super Arbeit.
Ich habe hier leider noch ein problem ich bekomme immer ein Timeout problem. Mit Sketch bekomme ich die Verbindung zum Nano hin nur hier nicht.
Hier die Fehlermeldung: avrdude.exe: stk500v2_ReceiveMessage(): timeout
Meine Parameter bei Atmel lauten:
F:\Programieren\AVRdude\avrdude.exe
-patmega328p -cwiring -P\\.\COM4 -b115200 -D -Uflash:w:“$(ProjectDir)Debug\$(TargetName).hex“:i
Super Tutorial! Und, nach dem einen oder anderen Versuch hab‘ ich es dann auch geschafft meinen Arduino Micro zu Flashen. Allerdings geht dannach die Serielle Schnittstelle via USB nicht mehr, was wohl daran liegt, dass die Arduino IDE zusätzlichen Code überträgt der serielle Schnittstelle wieder Verfügbar macht. Hat schon jemand herausgefunden, welcher Code das ist und wie man ihn einbindet?
Ich habe eine ganze Weile mit dem Arduino2560 gekämpft. Deine Seite gab den wichtigen Hinweis auf
-verwendet den neuen AVR-Dude aus dem Link.
–c wiring.. hab ich bisher nix davon gehört, aber es funktioniert.
Vielen Dank