Arduino Bootloader?
Hallo zusammen,
heute sind zwei neue Mikrocontroller (ATMega328P-PU) für meinen Arduino UNO angekommen, da der eine in einer Schaltung verwendet wird. Da dort aber noch keine Bootloader drauf sind, versuche ich jetzt, diese dort drauf zu laden. Ich habe dafür folgende Anleitung gefunden
http://www.netzmafia.de/skripten/hardware/Arduino/Bootloader_Flashen/index.html
Ich habe jetzt alles richtig angeschlossen (ca. 20-mal kontrolliert) und habe auch den "Arduino as ISP"-Modus drin, das richtige Bord und den richtigen Port ausgewählt und trotzdem funktioniert es nicht. Es wird diese Fehlermeldung angezeigt:
Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
Fehler beim Brennen des Bootloaders.
Ich habe auch schon probiert, beim Hochladen des Programms auf den Arduino, das Breadboard noch nicht angeschlossen zu haben, Arduino dann nochmal vom Strom zu nehmen, das Breadboard anzuschließen, den Arduino wieder an den PC anzuschließen und erst dann den Bootloader zu brennen (wurde in einem Video dazu empfohlen) - ohne Erfolg.
Habt ihr eine Idee, woran das liegen kann?
Ich freue mich auf Antworten.
2 Antworten
Ich kann mit deiner Beschreibung überhaupt nichts anfangen.
Ein Arduino Uno hat normalerweise alles. Das Board, den Prozessor eine USB Schnittstelle, einen Schnittstellentreiber und einen Bootloader auf dem Prozessor.
Mit deiner Beschreibung, was du alles angeschlossen und ausprobiert hast, kann ich nichts anfangen, das musst du näher, verständlicher erklären.
Verstehst du überhaupt was wie ablaufen soll, wenn du ein Programm aufspielen willst. Ein Programm, nicht einen Bootloader, wohl gemerkt. Oder einen Bootlader auf den Atmega 328P?
Wenn du das USB Kabel am Board anschließt, welche Com Schnittstelle meldet dir dann Windows und welche Baudrate ist dann voreingestellt?
Dein Fehler wird wohl sein, auf deinem UNO ist ein CH340 Chip drauf und dafür hat Windows keinen Treiber. Das ist jetzt nur eine Vermutung, weil ich mangels guter Beschreibung dein Problem nicht nachvollziehen kann.
Du wirst vermutlich einiges verwechseln. Was haben deine 2 Mikrocontroller mit einem UNO Board zu tun? Normal sind solche auf dem Board drauf. Einer.
Aha, danke für deine diesmal besser verständliche Erläuterung.
Ich will mal dazu sagen, deine ursprüngliche Version war zwar gut, aber nur im Zusammenhang mit dem Wissen um diverse Dinge. Mein Uno hat keinen austauschbaren Atmega328. Mein Defizit war, ich wusste nicht dass es auch UNO Boards gibt, auf denen der Prozessor gesockelt ist. Das haben wir jetzt geklärt.
Okay, normalerweise hätte ich gesagt, wenn ein Prozessor keinen Bootloader hat, muss man ihn in der ISP Art mit einem speziell dafür geeigneten Programmer programieren. ich habe dazu den Atmel AVR MKII programmer, oder einen JTAG Programmer.
Du verwendest dafür ein Programm, das sich Arduino ISP nennt. Also soll dieses Programm und der damit programmierte Controller diese Arbeit übernehmen. Angenommen, der Controller ist entsprechend gut programmiert, könnte also diese Aufgabe übernehmen. Wenn dann etwas nicht so funktioniert wie gedacht und beabsichtigt, sollte man die sonstigen Zusammenhänge kennen.
Da wäre zuerst mal der Resetanschluss an dem zu programmierenden Controller. Damit dieser Controller nach ISP Methode programmiert werden kann, muss dessen Reset auf 0 Potential liegen. Nur dann ist er "intern" aufnahmefähig. Du müsstest prüfen, beachten ob der Reset vom zu programmierenden Controller auch auf 0 geschaltet wird. Ist das der Fall, käme Punkt zwei in Frage.
Finde heraus, wie dein Arduino ISP Programmer dafür sorgt, dass der Reset vom zu programmierenden Controller auf 0 gezogen wird. Dazu kann ein Hilfsausgang der RS232 Schnittstelle verwendet werden. Ob aber das Kabel diesen Pin auf der RS232 Schnittstelle mit führt, oder da softwaremäßig getrickst wird, habe ich noch nicht näher untersucht.
Punkt zwei betrifft das eigentliche ISP Brennprogramm. Dafür wird AVRDUDE verwendet. Das ist ein Programm ähnlich dem von früheren DOS Zeiten, also Kommandoorientiert.
Du musstes dir die Beschreibung von AVRDUDE anschauen, erkennen welche Befehle wie anzugeben sind und was in einem Brennbefehl unbedingt hinein gehört. AVRDUDE macht keine Fehlermeldungen, wenn es einen Befehl nicht versteht, oder ein Befehl falsch ist usw. Er führt dann das falsche einfach nicht aus. Somit müsstest du nachforschen, ob das was AVRDUDE als Kommandozeile verarbeitet, richtig ist.
Es gibt also diese zwei genannten Möglichkeiten, warum du einen Atmega 328 nicht mit dem Arduino ISP programmiert bekommst. Versuche raus zu finden, woran es momentan bei deinem Programmer scheitert.
Nachtrag: Betreffend Reset am zu programmierenden Controller. Falls das nicht per Hilfsmittel ausgeführt wird, probiere zwei alternative Möglichkeiten. Wenn es eh einen Reset-Taster an dem zu programmierenden Controller gibt. Drücke den, starte AVRDUDE, warte bis AVRDUDE fertig ist, dann Reset-Taster los lassen. Ansonsten, legen den Resetpin per Drahtbrücke oder ähnlichem auf Groundniveau, dann programmiere den Controller und wenn programmieren fertig, Reset wieder über 10 K Widerstand auf high-Potential bringen. Soweit diese Nachhilfe in der Sache.
zur gedanklichen Unterstützung des Funktionsprinzips ISP Programmierung hier ein Bild, das die wesentlichsten genannten Dinge schematisch zeigt.
Setze das Bild folgendermaßen gedanklich um. Links siehst du einen Atmega16. Dieser gilt symbolisch und funktionsmäßig für all das, was den ISP Programmer ausmacht, betrifft.
Der rechte Atmega328 steht für den zu programmierenden Controller, sinngemäß.
Wie du nun unschwer per farbliche Darstellung erkennbare Linien erkennen kannst, gibt es 3 Signal-Leitungen die den rechten Controller programmieren. TX, RX und Reset. Ansonsten wird ein Controller mit typischen ISP Programmern über die speziellen ISP Anschlüsse namens SCK, MISO und MOSI programmiert.
Tut mir leid, dass ich erst so spät antworten kann.
Erst einmal danke für die ausführliche Anleitung. Ich habe das mit dem Reset-Pin ausprobiert, hat sich leider nichts geändert. Da ich mich bisher nicht wirklich mit der Technik hinter dem Arduino beschäftigt, sondern nur damit programmiert habe, konnte ich mit deinem ersten Kommentar nicht wirklich viel anfangen (nicht deine Schuld :).
Da das Projekt, für den ich den ATMega brauche, bald fertig sein soll, habe ich mir einfach einen Mikrocontroller mit bereits installiertem Bootloader bestellt. Der ist heute angekommen. Daraufhin habe ich mal damit versucht, den Bootloader auf die anderen Mikrocontroller zu brennen und siehe da: Es funktioniert reibungslos!
Sehr seltsam allerdings, dass das Brennen mit meinem alten Mikrochip nicht funktioniert hat. Aber wie dem auch sei. Ich habe jetzt 4 Mikrocontroller mit Bootloader, was mir erst einmal reicht. Totzdem nochmal danke für die Hilfe.
Hast du denn auf den arduino den sketch(der ist bei der arduino IDE mitgeliefert) ArduinoISP draufgespielt? Du musst erst das programm auf den UNO laden damit du ihn als programmer nutzen kannst.
Ja, den hab ich selbstverständlich auf den Arduino draufgespielt.
beim Hochladen des Programms auf den Arduino
Hätte vielleicht noch schreiben sollen, welches Programm ich da meine.
Das programm raufspielen funktioniert ohne fehlermeldung oder ähnliches?
Pins hast du keine verwechselt? Manchmal bisschen verwirrend wie der ATmega chip und der arduino unterschiedliche pin layouts haben.
Hast du das schon direkt mit dem Quarz gemacht wie das in der anleitung ist? den brauchst du meines wissens nicht, habe ich zumindest nie gebraucht.(wobei ich eigentlich nur ATtiny's flashe, aber das funktioniert genau so eigentlich) Vielleicht mal ohne versuchen?
An der Verkabelung dürfte es nicht liegen, die habe ich eigentlich oft genug überprüft. Auch die Schaltung funktioniert einwandfrei. Ich habe dafür mal eine Platine gefräst und gelötet. Diese funktioniert, wenn ich einen programmierten Mikrocontroller mit Bootloader einbaue, perfekt. Auf der Platine ist allerdings der 16MHz Quarz verbaut. Soll ich den nochmal rauslöten obwohl die Schaltung ganz sicher funktioniert?
Du kannst dich bei der Verkabelung auch nochmal selbst vergewissern:
https://i.imgur.com/ENFmewB.jpg
Ok, dann noch einmal ganz ausführlich (hast Recht, war vielleicht etwas knapp):
Ein Arduino UNO hat einen auswechselbaren Mikrocontroller (man sagt da schon Mikrocontroller oder sagt man IC?), den ATMega328P-PU. Diesen kann man auch herausnehmen und in eine Schaltung einbauen, worauf er immer noch dieselbe Funktion erfüllt und auch programmiert werden kann, wenn man einen Arduino als Programmer nutzt.
Ich habe also, für ein Projekt in der Schule in Technik, den ATMega328P-PU mit dem Arduino programmiert und anschließend in eine Schaltung integriert.
https://www.arduino.cc/en/Main/Standalone
Natürlich fehlt jetzt der Mikrocontroller auf dem Arduino. Deshalb habe ich mir einen neuen bestellt (und einen weiteren auf Vorrat, tut aber nichts zur Sache). Auf dem ist jetzt selbstverständlich noch kein Bootloader drauf. Deshalb habe ich mir diese Anleitung herausgesucht:
http://www.netzmafia.de/skripten/hardware/Arduino/Bootloader_Flashen/index.html
Ich habe also alles exakt so nachgebaut, wie in der Anleitung beschrieben, habe das Programm "ArduinoISP" auf meinen Arduino UNO (dort ist noch ein ATMega328P-PU mit Bootloader drauf) geladen, bei Programmer "Arduino as ISP" ausgewählt, das richtige Board und den richtigen Port ausgewählt und dann aus "Bootloader brennen" gedrückt.
Jetzt müsste da eigentlich stehen "Done burning bootloader", stattdessen steht bei mir "Fehler beim Brennen des Bootloaders". Folgende Fehlermeldung wird angezeigt:
Ich hoffe, ich habe es jetzt ausführlicher erklärt. Hast du eine Idee, woran das liegen könnte? Wie gesagt, ich habe alle Kabel und Bauteile ca. 20-mal überprüft. Es dürfte an der Verkabelung also kein Fehler vorliegen.