Hallo,
ich bin was Microcontroller betrifft noch ziemlicher Neuling, habe mir
aber kürzlich einen ATMEGA328P auf einem Arduino Uno Board zugelegt und
auch erste, kleinere Projekte realisiert. Das letzte Projekt befasste
sich mit der Ansteuerung eines Displays und hat auch nur teilweise
funktioniert. Wenn ich jetzt versuche den Atmega "zuflashen" bekomme ich
immer folgende Fehlermeldung:
avrdude: stk500_getsync(): not in sync: resp=0x00
Ich arbeite mit der Arduino IDE und habe defintiv den richtigen COM-Port
und das richtige Board ausgewählt. Alle Tricks mit kurz vor oder nachdem
Uploaden zu Resetten habe ich bereits ohne Erfolg ausprobiert. Kann es
sein, dass ich irgendwie den Atmel zerstört habe? Sitzt der Atmel
"nackt" auf dem Board und ich kann mir einfach einen neuen besorgen und
wieder draufstecken. Oder gibts dann Probleme mit dem Bootloader?
Sonst irgendwelche Problemlösungsstrategien, die ich ausprobieren
könnte?
Vielen Dank für die Hilfe
> avrdude: stk500_getsync(): not in sync: resp=0x00
Eine gefürchtete Fehlermeldung bei den Arduinos. Die Foren sind voll
davon.
Systematische Fehlersuche ist hier beschrieben:
http://www.arduino.cc/en/Guide/Troubleshooting> Kann es sein, dass ich irgendwie den Atmel zerstört habe?
Unwahrscheinlich.
> Sitzt der Atmel "nackt" auf dem Board und ich kann mir einfach einen neuen> besorgen und wieder draufstecken. Oder gibts dann Probleme mit dem> Bootloader?
Im werksfrischen ATMEGA328P (AVRs allgemein) ist kein Bootloader drin.
Und über das USB-Interface des Arduino UNO kannst du auch keinen
Bootloader flashen, d.h. das so zusammengebaute Arduino UNO ist nicht
ansprechbar.
> Ich arbeite mit der Arduino IDE und habe defintiv den richtigen COM-Port
Kannst du darauf näher eingehen? Hast du den COM-Port im Gerätemanager
nachgesehen? Welcher COM Port ist es und welche AVRDUDE Version
(http://www.mikrocontroller.net/articles/AVRDUDE#Anschluss_an_COM10_und_h.C3.B6her_.28Windows.29)?
Du kannst auch mal mit "upload.verbose = true" in der Datei
preferences.txt
im Arduinopaket eine ausführlichere Ausgabe von AVRDUDE erzwingen und an
deinen Beitrag anhängen:
Beitrag "Re: Flashen von Arduino"
Hat mich ein komplettes Wochenende gekostet, das Ding wieder
hinzubiegen.
Nachdem ich neue Firmware und einen neuen Bootlader eingespielt hatte
gings wieder.
Hier mein Kochrezept, für nen 2560 und nen Arduino Rev2, habs mit 0.22
gemacht mit 1.0 gehts aber genauso:
Probleme Arduino
15.Jan. 2012
Anmerkung: Beide BootladerSpeicherbereiche sollten wohl auf Max
Speicherbereichsgröße stehen
Arduino Uno REV 2:
==================
Mit alter Arduino-Programierumgebung 0.22 getestet.
Bootlader Uno:
ATmegaBOOT_168_atmega328_pro_8MHz.hex
in
C:\AVR\Arduino_stuff\arduino-0022\arduino-0022\hardware\arduino\bootload
ers\atmega
Firmware in zugehörigen ATMega8U2 des Uno:
C:\AVR\Arduino_stuff\arduino-0022\arduino-0022\hardware\arduino\firmware
s\arduino-usbserial
Datei: Arduino-usbserial-uno.hex .........Nicht DFU!
Erst mal vielen Dnak für die schnellen Antworten!
Ich benutze den COM PORT 11 (Gerätemanager), Treiber sind auch
installiert und das Board wird auch korrekt erkannt. Das richtige Board
(Arduino Uno) habe ich auch ausgewählt. An meinem Laptop habe ich auch
alles ausprobiert. Dort habe ich einen niedrigeren COM-PORT! Außerdem
habe ich ja schon erfolgreich mit dem Board kommuniziert. Nachdem ein
Arbeitskollege etwas rumexperimentiert hat funktioniert das Flashen auf
einmal nicht mehr! Das Troubleshooting auf der Arduino Seite habe ich
bereits gestern erfolglos "durchgearbeitet".
Was meinst du genau mit "upload.verbose = true" ???
Wo genau muss ich das angeben?
In der Preference Text Datei habe ich nur "upload.using = bootloader"
gefunden.
Einen Bootloader mir zu besorgen möchte ich eigentlich nur im Notfall.
Das Board is auch keine Woche alt.
Habe ich also richtig verstanden, dass ein reines austauschen des Atmels
nicht erfolgsversprechend ist, weil er erst noch mit dem richtigen
Bootloader "bespielt" werden müsste?
Gruss
Sascha
> COM PORT 11
Dann den oben verlinkten Hinweis aus der Artikelsammlung zur
Schreibweise beachten und der Arduino-IDE auf die Finger sehen, welche
Kommandozeile dem AVRDUDE übergeben wird.
> upload.verbose = true
Ist eine Option in der Preference Text Datei. Wenn die Zeile noch nicht
vorhanden ist, dann von Hand unter den/der sonstigen upload. Optionen
einfügen. Defaultwert ist false, daher ist es möglich, dass die Zeile
fehlt.
> reines Austauschen
Richtig. Um einen fabrikneuen AVR im Arduino einzusetzen, muss man den
AVR zunächst mit einem Bootloader flashen und dafür ist ein
Programmieradapter notwendig.
Lediglich ältere Arduinos mit dem FTDI Chip konnten sich da rummogeln,
in dem der FTDI als Bitbang-Programmer benutzt wurde. Auf dem Arduino
UNO mit dem Atmel USB-Interface ist mir so was nicht bekannt.
Tut mir Leid, tippe mal ich stelle mich einfach zu dimm an und weiss
deine Hilfe wirklich zu schätzen, aber ich weiss immer nocht nicht genau
was du meinst.
upload.verbose = true steht defintiv nicht in der Preference Datei drin
und ich weiss nicht genau wo ich einfüge soll. Unter sonsotigen Upload??
Kann ich leider nicht finden.
Ich hab es mal ohne Ergebinis wir folget eingefügt:
...
programmer = arduino:avrispmkii
upload.using = bootloader
upload.verbose = true
serial.port=COM1
serial.databits=8
...
Wo genau muss ich für den COM PORT die folgende Zeile einfügen?
avrdude -c stk500v2 -p m16 -P \\.\com11 -uF -vvvv 2> logfile.txt
Vielen Dank für DEINE/Eure Hilfe!!!
Du fügst nur die Zeile
upload.verbose = true
in der Nähe der existierenden Zeile
upload.using = bootloader
ein. Alle anderen Zeilen lässt du unverändert. Wenn du nicht mehr
weisst, welche Zeilen du sonst geändert hast, beschaffe dir ein Backup
der Preferences.txt Datei aus dem arduino/libs Ordner in deinen Backups
oder zur Not aus dem originalen Arduino-IDE Paket (s. Anhang aus
arduino-1.0-windows.zip).
Dann machst du die Einstellungen in der IDE, die für dein Arduino UNO
nötig sind. Beim COM-Port schaust du dafür im Gerätemanager nach, welche
COM-Portnummer vergeben wurde.
Dann machst du einen Upload eines Sketches. Dabei erzeugt AVRDUDE wegen
der Zeile "upload.verbose = true" eine ausführlichere Ausgabe als
vorher. Diese Ausgabe muss man analysieren, also hänge diese Ausgabe mal
an deine Frage an.
> Wo genau muss ich für den COM PORT die folgende Zeile einfügen?> avrdude -c stk500v2 -p m16 -P \\.\com11 -uF -vvvv 2> logfile.txt
Nirgends. Eine ähnliche Zeile (du hast einen anderen AVR als m16!)
bastelt die Arduino-IDE für den Upload zusammen. Damit man sieht, was
zusammengebastelt wird, benutzt man das "upload.verbose = true".
Jetzt habe ich die Vorgehensweise verstanden und mich an jeden Schritt
gehalten!
upload.verbose = true habe ich über den Editor hinzugefügt (siehe
Anhang).
Die Ausgabe bleibt jedoch leider die Gleiche!
avrdude: stk500_getsync(): not in sync: resp=0x00
EDIT:
Als Programmer habe ich Arduino as ISP eingestellt, aber auch schon die
anderen Punkte ausprobiert. Wäre ja auch unlogisch wenn AVR ISP
funktionieren würde!
> Die Ausgabe bleibt jedoch leider die Gleiche!
Es war auch nicht zu erwarten, dass der Fehler dadurch verschwindet.
Aber ich hatte erwartet, dass eine ausführlichere Ausgabe von AVRDUDE
erzeugt wird. Eine bei der man die Kommandozeile sieht und bei der
weitere Angaben zum Uploadprozess an sich kommen.
Wenn das nicht der Fall ist, dann wurde eventuell die Arduino-IDE
geändert und man kann so keine ausführliche Ausgabe des AVRDUDE mehr
erzeugen lassen.
Oder ich konnte dir nicht vermitteln, dass die komplette, ausführliche
Ausgabe im Protokollfenster für die Problemanalyse hilfreich wäre.
>> Oder ich konnte dir nicht vermitteln, dass die komplette, ausführliche> Ausgabe im Protokollfenster für die Problemanalyse hilfreich wäre.
Doch das konntest Du und ich bin dir für deine Hilfe echt dankbar. Habs
jetzt zig mal so und mal so probiert. Ich bekomme die Ausgabe einfach
nicht hin :(
avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
5
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
6
Copyright (c) 2007-2009 Joerg Wunsch
7
8
System wide configuration file is "D:\TMP\20120319\arduino-1.0\hardware/tools/avr/etc/avrdude.conf"
9
10
Using Port : \\.\COM1
11
Using Programmer : arduino
12
Overriding Baud Rate : 115200
13
avrdude: Send: 0 [30] [20]
14
avrdude: Send: 0 [30] [20]
15
avrdude: Send: 0 [30] [20]
16
avrdude: Recv:
17
avrdude: stk500_getsync(): not in sync: resp=0x00
18
19
avrdude done. Thank you.
Man sieht:
1/ die Kommandozeile, also ob der Programmer, der Ziel-AVR und die
Baudrate richtig eingestellt sind. Die Kommandozeile sieht OK aus
(https://github.com/watterott/KnowledgeBase/wiki/Arduino)
2/ dass bei mir der Upload nicht funktioniert. Das ist aber OK, weil
ich kein Arduino angeschlossen habe. Auf dein Problem mit der gleichen
Fehlermeldung übertragen: Dein AVRDUDE erkennt an dem eingestellten Port
keinen Programmer! D.h. nochmal kontrollieren, wo der Programmer hängt.
Dabei kann der Gerätemanager und USBView helfen
"Microsoft USBView - USB Connection Viewer
USBView is a free utility from Microsoft that displays the USB
connection tree and shows the USB devices that are connected to it
together with their configuration data. This is very useful for
debugging USB enumeration errors. USBView runs under Windows 98, ME,
2000 and XP."
http://www.ftdichip.com/Support/Utilities.htm
Eventuell kann es notwendig sein, die .INF Datei für den Atmel
USB-Interface-IC neu zu installieren.
http://arduino.cc/en/Guide/Windows#toc4
3/ Arduino 1.0 enthält einen modernen (Version 5.11) AVRDUDE und benutzt
durchgängig die moderne COMx Schreibweise (\\.\COM1)
Die Ausgabe habe ich im "Done Uploading" Fenster (unten in der IDE) mit
der Maus markiert und dann mit CONTROL-C kopiert und mit CONTROL-V hier
im forum eingefügt.
Krapao schrieb:> Hmm, das "upload.verbose = true" funktioniert bei mir mit Arduino 1.0
Dafür gibts doch sogar einen Eintrag in den Einstellungen:
"File" -> "Preferences" -> "Show verbose output during: [] compilation
[] upload"
Sascha schrieb:> Nachdem ein> Arbeitskollege etwas rumexperimentiert hat funktioniert das Flashen auf> einmal nicht mehr!
Was genau hat der Kollege denn experimentiert?
Sascha schrieb:> avrdude: Send: 0 [30] [20]> avrdude: Send: 0 [30] [20]> avrdude: Send: 0 [30] [20]> avrdude: Recv: . [00]> avrdude: stk500_getsync(): not in sync: resp=0x00
Ist der Arduino "nackt" oder noch in eine Schaltung eingebunden?
Es wurde versucht ein LCD Display anzuschließen (Arduino Uno). Dabei
wurden auch die Pins Rx und Tx genutzt.
Bei dem geposteten Upload Versuch war der Arduino jedoch absichtlich
"nackt", also komplett unbeschaltet und ich habe jedicglich versucht
einen "Löscher" zu flashen:
void setup() {
}
void loop() {
// wait for a second
}
Das wars!
Die Ausgabe sagt sinngemäß: Der Bootloader im Atmega328P meldet sich
nicht. Aus der Sicht von AVRDUDE ist nix angeschlossen.
Ich setze mal voraus, dass dich der USB-IC bei Windows korrekt
angemeldet hat und eine korrekte COM Schnittstelle vergeben wurde und
dass das die COM11 ist. Wie das zu prüfen ist hatte ich ja geschrieben.
Das Nichtmelden des Bootloaders kann im Prinzip nur an drei Leitungen
liegen:
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
* RESET
* RXD
* TXD
> Es wurde versucht ein LCD Display anzuschließen (Arduino Uno). Dabei> wurden auch die Pins Rx und Tx genutzt.
Das kann entgegen meiner Meinung in
Beitrag "Re: ATMEGA328P auf Arduino Uno" doch bedeuten, dass
einer oder beide Pins am Atmega328P zerschossen wurden z.B. durch
Einstellung als Ausgabepin und direkten Anschluss an GND oder Vcc ohne
Strombegrenzung.
Der USB-IC ist durch die 1K Serienwiderstände RN4A und RN4B etwas besser
geschützt und kann das überlebt haben.
Beschaffe dir einen neuen, vorprogrammierten Atmega328P mit dem
Arduino UNO Bootloader.
http://www.watterott.com/de/ATmega328-Arduino-Bootloader
> avrdude: 1026 bytes of flash verified
Ja, das sieht von der Übertragung her doch sehr gut aus. Du kannst den
verbose Modus auch wieder abstellen (s. Beitrag von Iwo oder die
preferences.txt editieren).
Die Funktion von Blink.cpp musst du selbst beim Laufenlassen des
Programms überprüfen. Wenn es ein fertiger Arduino-Sketch war, denke ich
das funktioniert.