Wie kann ich einen AVRdude-Not-in-Sync-Fehler beheben, wenn ich Arduino über ein USB-zu-Seriell-Kabel programmiere?

Ich versuche, diese Umgebungsbeleuchtung für den PC zu bauen. Auf meinem Arduino Uno funktionierte das einwandfrei. Mein nächster Schritt war, es mit "Arduino auf einem Steckbrett" zu machen . Also kaufte ich einen leeren ATmega328-Chip und brannte den Arduino-Bootloader (für das Board "Arduino Duemilanove w/ ATmega328") mit der Arduino IDE und USBasp darauf; und ich weiß, dass dies richtig geladen wurde, da dieser ATmega-Chip auf dem Uno einwandfrei funktioniert.

Dann habe ich den USB-zu-Seriell-Konverter mit FT232RL erstellt ; aber die Treiber wurden nicht auf meinem PC installiert (Windows 7 x64). Ich vermute, ich habe den oberflächenmontierten FTDI-Chip überhitzt und ihn beim Handlöten getötet.

Also habe ich es beiseite gelassen und mir diese USB-zu-Seriell-Konverterbrücke besorgt: (Entschuldigung für die beschissenen Bilder) Ich habe einen zusätzlichen ST232CN auf meinem Steckbrett verwendet, um die Spannungspegel von RS232 auf TTL umzuwandeln, wie hier gezeigt Seite . Und das funktioniert gut, wie ich anhand eines Loopback-Tests verifiziert habe. Und ich habe Pin 9 von ST232 mit Pin 2 von ATmega und Pin 10 mit Pin 3 verbunden.

Als ich versuchte, ein Blink- Beispiel von Arduino IDE hochzuladen, erhalte ich diesen Fehler:

Binary sketch size: 1026 bytes (of a 30720 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00

Wenn ich den ausführlichen Upload (Umschalt+Upload) durchführe, erhalte ich diesen Fehler/diese Meldung:

avrdude: usbdev_open(): did not find any USB device "usb"

Außerdem habe ich versucht, 1k-Pullup-Widerstände an den Pins 2 und 3 von ATmega hinzuzufügen, aber es hat nicht geholfen. Ich denke, das Problem liegt jetzt in der seriellen Kommunikation vom ST232 zum ATmega? Und gibt es eine spezielle Verbindung zum Reset-Pin von ATmega? Ich habe es mit einem 10k-Widerstand auf 5 V hochgezogen.

Ein Schaltplan und / oder ein Bild Ihres Steckbrettaufbaus würde helfen.
Sie wissen auch, dass Sie, wenn der Bootloader auf dem Chip ist, ihn nur mit dem Arduino programmieren können, oder? Siehe electronic.stackexchange.com/questions/30908/…
@sptrks Dies ist mein Steckbrett-Setup.
@sptrks das wusste ich nicht. Danke dir. Da dieses Projekt aber ständig mit dem PC kommunizieren soll, muss ich die serielle Schnittstelle zum Laufen bringen. Ich denke, es würde nicht helfen, nur einmal eine Skizze auf den ATmega zu laden.
Ich kann mir jetzt zwei Dinge vorstellen - TX und RX sind falsch herum (Loopback würde funktionieren, aber die Kommunikation mit Arduino würde nicht) oder Arduino-Kristall oszilliert nicht, weil es sich in einem Steckbrett befindet. Laden Sie Blink mit diesem Chip auf dem UNO auf und überprüfen Sie, ob Blink auf dem Steckbrett funktioniert.
@geometrisch Blink funktioniert gut auf dem Steckbrett. Und versuchte, den Kristall so nah wie möglich an den Pins des Chips einzusetzen. Bekomme immer noch den gleichen Fehler. Auch mit allen Kombinationen von TX- und RX-Pins versucht, vergebens :(
Haben Sie den Chip kurz vor, gleichzeitig mit oder direkt nach dem Befehl zum Hochladen zurückgesetzt? Wann immer ich den Fehler „nicht synchron“ erhalten habe, hing dies mit diesem relativen Timing zusammen. Für mein Steckbrett und Eclipse/AVRDude ist das Aufheben der Erdung des Reset-Pins kurz vor oder während ich auf den Upload-Befehl klicke, das richtige Timing. Prüfen Sie aber auch, ob Ihr PC den Adapter wirklich sieht, wenn Sie ihn einstecken.
@JRobert Vielen Dank für diesen Tipp!! Ich habe es mit Blink versucht und es hat gut funktioniert! Wenn in der Arduino IDE auf Upload geklickt wird, dauert das Kompilieren 5-6 Sekunden. Ich habe dann die Reset-Taste gedrückt und gerade als "Uploading" angezeigt wird, höre ich auf, sie zu drücken. Jetzt werde ich es mit meinem Projektcode versuchen und hoffen, dass die serielle Kommunikation auch funktioniert. Beifall!
Update: Projekt funktioniert gut auf Steckbrett. Der Zeitpunkt der Erdung des Reset-Pins hat den Trick gemacht. Danke für deine Hilfe!
@potato_in_my_ear - Das richtige Format zum Posten einer Lösung ist keine Bearbeitung, sondern eine Antwort. Schauen Sie unten nach und Sie sehen ein Feld mit dem Titel "Ihre Antwort", in das Sie sie eingeben können. Nach der Eingabe stimmen die Leute über Ihre Antwort ab und Sie können sie „akzeptieren“, indem Sie auf das Häkchen links neben der Antwort klicken.
@KevinVermeer Ich wollte die Anerkennung nicht in Anspruch nehmen, da JRobert die Lösung bereitgestellt hat. Trotzdem danke!
@potato_in_my_ear: Ich bin froh, dass das geholfen hat. Sie sind ein Gentleman und ein Gelehrter - ich werde meinen Kommentar zu einer Antwort machen.
Die Lösung besteht darin, dass die Leute keine Antworten mehr in Kommentaren geben!

Antworten (6)

Wann immer ich den Fehler „nicht synchron“ erhalten habe, hing das damit zusammen, dass ich einfach das Reset-Timing verpasst habe (oder das Reset ganz vergessen habe!). Für mein Steckbrett und Eclipse/AVRDude ist das Aufheben der Erdung des Reset-Pins kurz vor oder gleichzeitig mit dem Klicken auf die Upload-Schaltfläche das richtige Timing. Prüfen Sie aber auch, ob Ihr PC den Adapter wirklich sieht, wenn Sie ihn einstecken.

Spätere Arduino-Boards werden so gebaut, dass sie zurückgesetzt werden, wenn eine serielle Verbindung hergestellt wird, und programmgesteuert durch den Bootloader. Dieser Blogartikel beschreibt, wie es funktioniert und noch interessanter, wie man es auf frühere Boards hackt. Es sollte nicht zu schwer sein, es auf ein Steckbrett zu legen, wenn Sie wollten. Der Chip muss natürlich einen kompatiblen Bootloader haben (den Sie bereits in Ihren eingebaut haben). Für Steckbretter mache ich einfach den Reset-Button / Mausklick-Tanz.

Ich habe jemanden gefunden, der sagt, dass Sie die avr-Toolkette dazu bringen können, das Zurücksetzen selbst durchzuführen, indem Sie avrdude.conf bearbeiten . hier (in den Kommentaren). Aber ich bin mir nicht sicher, wie ich das machen soll. Kannst du helfen. Ich hasse es, die ganze Zeit auf Reset zu drücken.
Dies erfordert Hardware-Unterstützung auf dem Arduino-Board oder Steckbrett, das später von Aduino eingebaut wurde; Code allein kann es nicht tun. Es basiert auf einem Kondensator vom seriellen DTR zum Reset und einem Reset-Pull-up. Wenn Sie ein älteres oder ein Steckbrett haben, müssen Sie es hinzufügen. Diese EE StackEx-Frage und der von mir zitierte Blog-Artikel sollten Sie in die richtige Richtung weisen.

Wie @JRobert in den Kommentaren sagte, hat das richtige Timing des Erdens und Aufhebens des Reset-Pins auf ATmega den Trick gemacht. Erden Sie den Reset-Pin des ATmega weiter, wenn Sie auf "Upload" klicken, und erden Sie ihn, sobald "Uploading" angezeigt wird.

Ich habe gerade einen Arduino Mini bekommen und ich wusste, dass ich die Reset-Taste drücken musste, um den Code hochzuladen, aber ich konnte nicht herausfinden, wann !!! Das hat bei mir funktioniert. Vielen Dank.

Ich hatte die gleichen Fehler, die ich auf mehreren Seiten gesehen habe RE: Arduino-Nachricht "avrdude: stk500_getsync(): not in sync: resp=0x00" oder ähnliches.

Ich habe festgestellt, dass, wenn ich alles entferne, was in D0 gepatcht ist ([D0] DIGITAL Pin Zero, am weitesten von USB- und Power-Buchsen entfernt, auch "RX" lautet).

Ich habe zwei verschiedene Computer ausprobiert und die gleichen Fehler erhalten und festgestellt, dass, wenn: 1- ich das Kabel von [D0] entferne oder den Stromkreis öffne 2- auf Arduino hochlade 3- das entfernte Kabel erneut flicke oder den offenen Stromkreis schließe [ D0]

Ich habe diesen Fehler nur beim Hochladen festgestellt und dies ist meine Lösung. zur Zeit.

Ich hoffe es hilft.

Fühlt sich gut an, einer Community endlich einige nützliche Informationen zurückzugeben!

Die Antwort ist etwas unklar: Der Satzanfang "Ich habe festgestellt, dass, wenn ich ..." ist unvollständig, ich bin mir nicht sicher, was Sie damit sagen wollen. Bitte bearbeiten, danke.
Diese Antwort bezieht sich darauf, dass widersprüchliche Schaltkreise an die seriellen Pins der Atmega-Hardware angeschlossen sind.

So beheben Sie den Fehler „avrdude: stk500_getsync(): not in sync: resp=0x00“. Installieren Sie einfach die FTDI-Treiberversion 2.8.24.0. Es gibt einige Probleme mit dem neuen Treiber v2.8.28.0.

Dies hat mein Problem behoben, gehen Sie zu Treiber und Setup, ersetzen Sie Boards.txt in Arduino IDE ...

Ich habe Arduino MEGA 2560 R3 und hatte das gleiche Problem

avrdude: stk500_getsync(): nicht synchron: resp=0x00

http://arduino.cc/en/Main/ArduinoBoardADK

Während Sie die Codes von Arduino IDE auf Ihren Computer hochladen, ziehen Sie bitte den RX-Pin 0 der Arduino-Karte heraus. Sie erhalten einen Erfolgscode, der hochgeladen wird. Stecken Sie den RX-Pin aus und versuchen Sie es. Oder Sie können (vielleicht) den RX von Bluetooth mit dem RX von Arduino verbinden, damit die TX miteinander verbunden sind.