Programmieren eines ATmega328 mit Arduino Bootloader über einen FTDI USB-Seriell Adapter


7

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

FTDI USB zu TTL F1232

Ich habe genau dieses Setup befolgt:

  1. Verbinden Sie den DTR-Pin über den 0,1-uF-Kondensator mit Pin 1 des ATmega.

  2. Verbinden Sie den RX-Pin mit Pin 3 am ATmega (TX).

  3. Verbinden Sie den TX-Pin mit Pin 2 des ATmega (RX).

  4. Verbinden Sie den 5-V-Pin mit der 5-V-Schiene der Karte, um die Karte über die USB-Schnittstelle mit Strom zu versorgen.

  5. Verbinden Sie den GND-Pin mit der GND-Schiene der Platine

Installieren( von Anweisungen befolgt )

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.

Breakout-Board

Mein Steckbrett - Bild 1

Mein Steckbrett - Bild 2


TX und RX werden im Allgemeinen hochgezogen (oder angetrieben). Ich glaube nicht, dass Ihr Problem da ist ...
bitsmack

Gibt es einen bestimmten Grund, warum Sie sich für serielle Programmierung anstelle von ISP entschieden haben?
Ignacio Vazquez-Abrams

1
So erweitern Sie den Kommentar von bitsmack: Die TX- und RX-Leitungen sind standardmäßig hoch und für Daten kurz niedrig. Kann auf einem Zielfernrohr gesehen werden, aber nicht auf einem Messgerät. Sie können es sehen, wenn Sie einen LED + Widerstand von 5 V an TX oder RX (Anode an 5 V) anschließen. Die TX- und RX-Anzeigen der Breakout-Karte sind nicht direkt mit den tatsächlichen TX / RX-Kabeln verbunden.
Gwideman

1
Ignacio: Ich glaube, die ISP-Fähigkeit dieses Boards ist nur eine Notlösung - ich denke, Bitbang zu verwenden. Es ist keine richtige SPI-E / A. Durch das Programmieren über den Bootloader wird außerdem vermieden, dass versehentlich Dinge programmiert werden, die ISP programmieren kann und die normalerweise nicht beabsichtigt sind.
Gwideman

Wie auch immer, fügen Sie einen Widerstand für die LED hinzu, sie werden nicht lange dauern ...
Vladimir Cravero

Antworten:


8

Einige Vorschläge:

Wenn Sie sich das Bild ansehen, dem Sie hier folgen:

Geben Sie hier die Bildbeschreibung ein

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.


An den LEDs in der höher auflösenden Version dieses Fotos scheinen Widerstände unter einem roten Schrumpfschlauch angelötet zu sein.
RedGrittyBrick

Ah, richtig, das erste Foto mit dem teilweise fertiggestellten Steckbrett zeigt das deutlicher. Vielen Dank für den Hinweis. Sehr irreführend für "junge Spieler"!
Gwideman

Danke für die Hilfe. Ich hatte Widerstände für die LEDs auf meinem Board. Ja, es tut mir leid, dass ich mein aktuelles Board nicht gepostet habe. Zum Zeitpunkt meiner Veröffentlichung hatte ich keine Kameras an. Ich habe nicht einmal bemerkt, dass der Kondensator auf dem Bild nicht unangemessen verdrahtet ist! Das heißt, ich habe mir zunächst das eigentliche Arduino-Schema angesehen, damit ich wusste, dass ich die Kappe nicht in Reihe mit dem Knoten schalten sollte, der den Pullup-Widerstand und den Cap-DTR verbindet, sondern einen 1k-Pull-up-Widerstand anstelle eines 10k. Könnte das das Problem sein? Ich werde es ausprobieren. und Hinzufügen zusätzlicher Kappen für GND und VCC. Danke noch einmal.
Ethienne

Bitte posten Sie eine Skizze dessen, was Sie tatsächlich getan haben, da aus Ihrer verbalen Beschreibung nicht hervorgeht, dass das, was Sie getan haben, praktikabel ist.
Gwideman

Ja, werde den Moment tun, in dem ich ein bisschen Freizeit habe. Wenn die Korrekturen nicht funktionieren, ist das
Ethienne

7

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.


Willkommen bei EE.stackexchange! Du hast eine nette erklärende Antwort geschrieben, mach weiter so!
WalyKu

1

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.

DTR, Kappe und RESET auf einem Steckbrett


0

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.


Ich habe die UNO ausgewählt.
Ethienne

0

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.


0

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


0

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:

  • hat das ArduinoISP-Beispiel in die Arduino IDE geladen
  • schloss ein Ersatz-Arduino an, um als Programmierer verwendet zu werden
  • unkommentiert "#define USE_OLD_STYLE_WIRING"
  • verdrahtet D11, D12, D13 bis D11, D12 D13 des bloßen AVR-Chips
  • verdrahtet D10 des Programmiergeräts mit dem Reset-Pin des AVR-Chips
  • Fügen Sie am Reset-Pin einen 10-kOhm-Pull-up-Widerstand zu V + hinzu
  • ArduinoISP auf den "Programmierer" hochgeladen
  • wählte "Tools / Programmer" -> "Arduino als ISP"
  • Ich drückte die Daumen
  • drücke "Burn Bootloader brennen"

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


0

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


-1

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

ATmega328 FTDI Bootloader


1
Bitte entfernen oder schreiben Sie dieses völlig falsche Posting neu, was die Leser nur frustrieren kann. Ein großer Kondensator zwischen Reset und Masse würde verhindern, dass die Auto-Reset-Schaltung in den Bootloader gelangt. Dieses Bild zeigt auch nicht, dass es einen Kondensator zwischen DTR und Reset zeigt. Darüber hinaus ist 22pf für die Umgehung der Versorgung absolut unzureichend.
Chris Stratton

1
Nein, das ist falsch! Das Problem mit Ihrem Beitrag ist, dass Sie eine "10uf-Kappe, die mit dem Rücksetzstift und Masse verbunden ist" angeben . DIES IST NICHT ARBEITSFÄHIG . Die richtige Position für den Kondensator liegt zwischen DTR und Reset, aber das haben Sie nicht angegeben. Außerdem ist 22pf praktisch das Gleiche wie überhaupt kein Power-Bypass-Kondensator - es funktioniert zwar immer noch, ist aber kein solides Design. Sie müssen auch den passenden, ebenso falschen Kommentar zu der Frage entfernen.
Chris Stratton

1
Sie geben immer noch eine fehlerhafte Empfehlung zum Versorgungsbypass ab. Wir beschäftigen uns hier mit technischen Fakten - es spielt keine Rolle, ob Sie diese Idee von woanders haben, sie ist immer noch falsch.
Chris Stratton

1
Ihr anscheinend grundlegendes Missverständnis von Bypass-Kondensatoren können Sie mit jedem Hinweis zu diesem Thema korrigieren. Hier gibt es nichts zu "plaudern".
Chris Stratton

1
Wenn Sie sich die Bypass-Kappen C4, C5, C6, C7 auf dem Referenzdesign ansehen, mit dem Sie verknüpfen, sind sie 100 nF und nicht 22 pF.
Pete Kirkham
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.