Ich möchte Ihren Rat bezüglich der Verwendung der Arduino IDE und avrdude zum Programmieren eines ATmega328, der mit einem Arduino Bootloader vorinstalliert ist. Ich verwende eine serielle USB-zu-TTL-Breakout-Karte, die auf einem FTDI-Chip basiert.
Ich kaufte ein "FTDI Basisprogramm Downloader USB zu TTL FT232 für Arduino ACC" off ebay
Ich habe genau dieses Setup befolgt:
Verbinden Sie den DTR-Pin über den 0,1-uF-Kondensator mit Pin 1 des ATmega.
Verbinden Sie den RX-Pin mit Pin 3 am ATmega (TX).
Verbinden Sie den TX-Pin mit Pin 2 des ATmega (RX).
Verbinden Sie den 5-V-Pin mit der 5-V-Schiene der Karte, um die Karte über die USB-Schnittstelle mit Strom zu versorgen.
Verbinden Sie den GND-Pin mit der GND-Schiene der Platine
Wenn ich versuche, eine Skizze hochzuladen, bekomme ich diesen bösen Jungen:
avrdude: stk500_getsync(): not in sync: resp=0x00
Folgendes habe ich bisher versucht:
Verbinden Sie die Header-Pins des Arduino "Shield" mit dem Chip auf dem Steckbrett. Dabei benutze ich den ATmega16U2 an Bord, um das Programm zu senden. Ergebnis: Makellos! Das Programm startet und alle sind glücklich.
Zurück zum FTDI Breakout Board. RX und TX umschalten (nie wissen?) Immer noch nichts, also zurück zur ursprünglichen TX - RX Konfiguration.
Der DTR-Pin auf der FTDI-Karte setzt den ATmega328 mit Sicherheit erfolgreich zurück, da er seine magische Blinksequenz durchläuft, wenn ich versuche, etwas hochzuladen.
Jetzt habe ich getestet, ob der ATmega328 serielle Informationen über das Breakout-Board per Computer an senden kann. Es kann.
Ich habe ein paar interessante Dinge bemerkt:
Sowohl die TX- als auch die RX-Leitung haben immer 5 V. Ich weiß das, denn wenn ich eine LED parallel zu den Leitungen anschließe, leuchten sie auf. Aber die kleinen winzigen LEDs auf der Breakout-Platine mit der Bezeichnung TX und RX leuchten nicht immer ... warum ist das so? Könnte das mein Problem erklären?
Wenn Sie weitere Informationen wünschen, lassen Sie es mich wissen, ich werde es für Sie besorgen.
---------------------------------------------BEARBEITEN---- --------------------------------------
Hallo wieder,
OK Ich habe hinzugefügt , einen 100uF Elektrolytkondensator zusammen mit einem 0,1 uF eines zwischen 5 V und GND. Dies sind nicht die empfohlenen 47uF und 0.1uF, aber ich denke, es wird trotzdem helfen, herauszufiltern. (während es dabei ist. Was würde es ändern?)
Ich habe ersetzt meinen 1k Pull-up - Widerstand mit einem 10k eines
Ich kann immer noch keine Skizze hochladen und erhalte den gleichen Fehler. Die DTR-Leitung ruft einen Reset auf und ich erhalte immer noch eine serielle Ausgabe. (Ich habe eine Skizze darauf, die inkrementierende Ganzzahlen jede Sekunde durch die Seriennummer sendet.)
Interessanterweise ist (obwohl ich vorher noch keine Skizze senden konnte) jede LED, die ich an Pin 13 (auch bekannt als 19) stecke, jetzt viel dunkler ... vielleicht hat die hellweiße LED, die ich zuvor hatte, zu viel Strom gezogen ein 270 Ohm Widerstand ... -_-)
Auf vielfachen Wunsch finden Sie hier Bilder von meinem Board und dem USB-zu-FTDI-Breakout-Board, das ich verwende.
quelle
Antworten:
Einige Vorschläge:
Wenn Sie sich das Bild ansehen, dem Sie hier folgen:
Es liegt mit ziemlicher Sicherheit ein Fehler vor, der dazu führt, dass das Zurücksetzen nicht wie erwartet funktioniert.
Ich denke, die Reset-Schaltung soll die in einem tatsächlichen Arduino nachahmen, dessen DTR über einen 100nF (0.1uF) -Kondensator mit / RESET (Pin 1) verbunden ist. Das tatsächliche Arduino-Schema (z. B. Deumilanove) zeigt einen 10k-Pullup-Widerstand von Pin 1 bis + 5V. Dies zwingt / RESET dazu, einige Zeit nach der Bestätigung, dass DTR auf Low geht, deaktiviert zu werden.
Auf dem Steckbrett auf dem Foto ist der 10k-Widerstand jedoch am falschen Ende der Kappe angeschlossen und am DTR angebracht. Dies hat keine Auswirkung und bedeutet, dass die / RESET-Wiederherstellung nur auf das eingebaute Pullup zurückzuführen ist, das angeblich einen höheren Wert wie 30 bis 60 KB aufweist und daher 3 bis 6 Mal so lange dauert, bis es zurückgesetzt wird anfälliger für Lärm sein.
Das Verschieben des 10k-Widerstands-Pullups auf Pin 1 kann das Problem sofort lösen.
Eine andere zu überprüfende Sache ist, ob tatsächlich 5 V aus dem 5 V-Pin des FTDI-Adapters entnommen werden sollen. Viele dieser Karten sind mit Jumper-Headern oder ungelöteten Jumper-Pads ausgestattet, mit denen Sie den "Power Out" -Pin entweder an den 5-V- oder den 3,3-V-Regler des FTDI-Chips anschließen können.
Fügen Sie mit jeder Ihrer LEDs Widerstände (z. B. 330 bis 1k) in Reihe hinzu, um eine übermäßige Belastung zu vermeiden. Das Foto scheint eine LED zu zeigen, die direkt über 5V-Gnd verdrahtet ist, und eine andere von Vcc nach D13. Der erste sollte sofort ausbrennen oder andere Verwüstungen anrichten. Es ist jedoch möglich, dass es sich um LEDs mit eingebauten Vorwiderständen handelt.
Es wäre auch gut, parallele 0,1 uF- und 47 uF-Kondensatoren über Gnd und VCC in der Nähe des 328 hinzuzufügen, um eine saubere Versorgung zu gewährleisten.
quelle
Ich bin auch hierher gekommen, weil mein eigenständiger, bootgeladener ATmega328 mein Programm nicht laden wollte und diesen Fehler gemeldet hat. Ich habe meine Situation gelöst und möchte sie gerne teilen, damit sie vielleicht anderen hilft.
Was sich schließlich als Problem herausstellte, war, dass der ATmega328-Chip im Steckbrett nicht richtig "angeklickt" wurde. Als ich den ATmega-Chip jedoch anfänglich direkt auf das Steckbrett legte, gab es ein Klickgeräusch von sich. Es schien wirklich so, als wäre es richtig, nicht locker, könnte nicht tiefer gehen, würde nicht herausfallen, wenn man es verkehrt herum schüttelt usw. Aber als ich versuchte, ein Programm zu laden, bekam ich die Nachricht avrdude.
Während des Hochladens blinkten einige Pins, sogar die LED, die ich an Pin 19 angeschlossen habe (Pin 13 auf der Arduino-Platine). Ich habe das Steckbrett in den Niederlanden gekauft, daher kann ich nicht sagen, ob es chinesisch ist oder nicht, aber anscheinend hat es auch einige tiefe Anschlüsse und Schwierigkeiten beim Verbinden mit den Stiften von DIP-Chips. Zum Glück hatte ich eine Chip-Sockelhalterung (IC Socket 28 Pin DIP), die ich zwischen ATmega-Chip und Steckbrett platzierte. Mein Problem wurde sofort gelöst und das Glück kehrte zurück.
Ich habe ein FTDI Basic verwendet, um es zu programmieren, fast genau wie das Bild im Link von Gwideman oben. In diesem Bild ist nur der Pull-up-Widerstand des RESET falsch angeschlossen. Wie Gwideman korrekt festlegt, muss der Widerstand zu Pin 1 und nicht zur DTR-Seite der Kappe gehen.
In der Arduino IDE habe ich das 'Arduino Uno' ausgewählt.
Hoffe es hilft jemandem.
quelle
Ich hatte ein sehr ähnliches Problem und es wurde durch miese Verbindungen auf meinem Steckbrett zwischen der DTR --- 0.1uF Keramikkappe des FTDI --- AtMega328p RESET verursacht.
Das Problem wurde gelöst, als ich die männlichen Drähte in die gleichen Löcher wie die Beine der Kappe einführte, so dass die Verbindung stärker war. Ich konnte Skizzen hochladen, aber es war immer noch nicht sehr zuverlässig. Als ich die 0,1 uF-Kappe gegen eine 10 uF-Keramikkappe austauschte, schien das Problem vollständig behoben zu sein.
BEARBEITEN: Ein weiteres Problem, das ein ähnliches Verhalten verursachte, war die Verwendung eines "USB-Überstromschutzmoduls" zwischen meinem Laptop und dem FTDI-Modul. Also habe ich aufgehört, es zu verwenden, obwohl mein vorheriger Laptop durch eine meiner Verkabelungen verbrannt wurde: o (Zusammen mit einem engeren Steckbrett funktioniert das Hochladen von Skizzen wie ein Zauber.
quelle
Das einzige, woran ich denken kann, wenn ich diesen Fehler sehe, ist, dass in der Arduino IDE die falsche Karte ausgewählt ist. Sie müssen wahrscheinlich ein Board auswählen, das atmega328p verwendet.
quelle
Ich bin hierher gekommen, um Antworten auf ein sehr ähnliches (scheinbar identisches) Problem zu suchen - 382P im Steckbrett, bereits mit einem Bootloader und Code darauf, aber nicht auf Programmierversuche über einen "billigen" Ebay-FTDI-Ausbruch reagiert - obwohl der Reset zu funktionieren schien . Viele verschiedene Fehlermöglichkeiten.
Nachdem ich überprüft hatte, ob meine Schaltung dieselbe war, und mein IDE-Setup noch einmal überprüft hatte, löste die Antwort von matthijs einen Gedanken aus - ich hatte "Arduino Uno" im Board-Menü ausgewählt, also versuchte vermutlich die IDE (oder avrdude), den ATmega16u2 zu erreichen das Uno (das selbst stk500 IIRC emuliert). Von meinen (letztendlich erfolgreichen) Versuchen, den Bootloader zuvor über einen Spender Uno zu booten, hatte ich eine Board-Konfiguration "Atmega328 on a Breadboard" heruntergeladen - die ich ausprobiert habe und die funktioniert hat. Andere Nicht-Uno-Board-Konfigurationen wie "Arduino Nano mit ATmega328" und "Duemilanove mit ATmega238" funktionierten ebenfalls.
quelle
Sie können jetzt USPasp-Programmierer für Atmega-Chips und Arduinos für 5 US-Dollar kaufen. Sie werden an den 6-poligen ICSP-Programmieranschluss von Arduinos angeschlossen, haben jedoch einen 10-poligen Anschluss für andere Geräte, wie z. B. eine reine Atmosphäre, die Sie hier haben.
Die Arduino-Software unterstützt USPasp-Programmierer, ebenso wie viele Programmierer des dritten Teils. Sie sind dem USB-TTL-Konverter elektrisch sehr ähnlich, wurden jedoch explizit entwickelt, um Bare-Chips und In-Circuit mit gängiger Software zu programmieren. Sehen:
http://www.ebay.co.uk/itm/131743272473
Ich habe einen gekauft, um einen Arduino Mega 2560-Klon erneut zu flashen, von dem bekannt ist, dass er ein schlechtes Watchdog-Timing hat. Spätere HEX-Images beheben das, aber Sie müssen den 6-poligen CPU-Programmieranschluss des Arduino verwenden.
Grüße Paul BSc Elec Eng
quelle
Ich bin auf diese StackExchange-Antwort gestoßen und habe nach einer Lösung für dasselbe Problem gesucht. Ich habe viel gelernt, indem ich alle Antworten gelesen habe, aber keine davon schien meinen Fall zu lösen. Schließlich habe ich das Problem behoben und daran gedacht, die Lösung zu teilen.
Ich habe bei Amazon ein AVR 328P + Crystal + 22pf-Kondensator-Kit als "Barebone-Arduino-Kit" gekauft, um es auszuprobieren. Der Anbieter behauptete, auf dem AVR sei ein nicht spezifizierter "Arduino Bootloader" installiert.
Ich habe die Schaltung anhand einiger Beispiele und Dokumentationen zusammengestellt, die beim Programmieren eines AVR mithilfe des FTDI-Breakouts gefunden wurden. Ich hatte die FTDI-Boards zuvor verwendet, um einige Nano-Profis erfolgreich zu programmieren, sodass ich irgendwie wusste, was mich erwartet.
Nachdem ich das FTDI verkabelt und an USB angeschlossen hatte, von dem auch der AVR Strom bezog, fügte ich am Ende das kanonische LED-Setup zu D13 hinzu, und siehe da, es begann vertraut zu blinken. Es stellte sich heraus, dass der Anbieter den AVR mit der Blink-Demo vorab geflasht hatte. Der Chip schien korrekt getaktet zu sein und wie erwartet zu funktionieren.
Ich habe die Arduino IDE gestartet und die Blink-Demo geladen. Wenn sie es können, kann ich es auch, richtig?
Nee. Egal wie sehr ich es auch versuchte, ich konnte das Programm nicht mit einer Kombination aus Board- / Programmiererauswahl auf den AVR hochladen. Triple überprüfte alle Verbindungen, googelte herum, fand diese Frage, versuchte alle Lösungen, nichts. avrdude konnte starten, den Chip korrekt zurücksetzen (ich konnte es am Blinkmuster erkennen), versuchen, Daten zu senden (FTDI tx led blinkte), aber hochladen
Zu diesem Zeitpunkt begann ich mich zu fragen, ob der Bootloader veraltet war, also entschied ich mich für die Nuklearoption:
Das "Daumen drücken" muss funktioniert haben, denn avrdude war glücklich und der Chip blinkte nicht mehr - was bedeutet, dass ich zumindest etwas hochladen konnte und wahrscheinlich nichts falsch mit dem Chip und der Verkabelung war, auch wenn es wahrscheinlich bedeutete dass ich den Chip gemauert hatte.
Ich musste es nur noch einmal versuchen, also habe ich den "Programmierer" vom AVR gelöst, bin zum "Blink" -Beispiel zurückgekehrt, das nach Auswahl des "Arduino / Genuino Uno" -Boards hochgeladen wurde, und, yay!, Da war das fröhliche Licht!
Alles in allem war es also nicht so schwierig. Ich musste nur zum richtigen Zeitpunkt die Daumen drücken.
Es gibt viele Diagramme und Artikel zum Flashen des Bootloaders auf einen nackten AVR mit "Arduino als ISP". Hier ist eine, die ich nützlich fand:
Ausführen von Atmega328 in einem eigenständigen Modus ohne Arduino Shield
quelle
Ich habe festgestellt, dass 328 und 328p in avr dude als unterschiedliche Chips erkannt werden. Bearbeiten Sie die avrdude.conf für 328p und fügen Sie stattdessen diese Signatur 0x1e 0x95 0x14 hinzu
quelle
Sie benötigen eine 10uf-Kappe, die an den Reset-Pin und den DTR angeschlossen ist. Hier ist ein funktionierendes Beispiel dafür, wie Sie verbunden sein sollten:
Die 3 anderen Kappen sind 22pF
quelle