Moin, ich lese mich zur Zeit in das AVR-Tutorial ein und bin dabei das gelesene auch Praktisch umzusetzen. Aus Kostengründen konnte ich mir kein teures AVR Evaluierungsboard leisten, sondern habe mich stattdessen für einen Arduino Uno rev 3 entschieden (genauer gesagt für den hier: https://store.arduino.cc/arduino-uno-rev3). Nun lese ich in letzter Zeit immer häufiger etwas vom Bootloader. So wie ich es verstanden habe, soll das Programm im Bootloader dafür sorgen, dass der Flash über den USB Anschluss beschrieben werden kann. Problem sollte jetzt sein, dass wenn ich von der Arduino IDE zu AVR Studio wechsel um den uC in Assembler (nicht C!) zu programmieren, dass das Programm im Bootloader resetet wird. Irgendwie umständlich das ganze. Wie dem auch sei, ich würde halt gerne mein erstes Programm über AVR Studio laufen lassen. Kann ich das jetzt einfach so machen oder geht das Bootloader Programm zu nichte? Was gibt es noch zu beachten? Schönen ersten Advent wünscht euch int 21h :D
Ein Bootlader programmiert den Flash über die serielle Schnittstelle/USB, AVR-Studio unterstützt den Arduino Bootlader nicht. Programmiert man per ISP, dann wird der Bootlader überschrieben, die Arduino IDE kann den Uno dann nicht mehr ansprechen. Der Bootlader kann aber bei Bedarf wieder per AVR-Studio draufgeladen werden.
IIRC kannst du via avrdude den bootloader mitnutzen. Dafür musst Du in Atmelstudio den dude als externes Tool einbinden. Beschreibungen dafür gibt es im Netz
Man kann es sich auch leichter machen um sich nicht ständig mit Bootloader-Kommandozeilen (die sowieso nie stimmen und kryptisch sind) herumärgern zu müssen. Man kauft sich einen ISP Programmer, nicht gerade den billigsten, und kann mit wenigen Klicks und ganz ohne externe Tools aus dem AVR Studio heraus seinen Controller flashen. Ich finde es gerade für einen Anfänger furchtbar umständlich und fehleranfällig mit einem Bootloader zu arbeiten. Dazu kommt noch die immer wieder auftretende Stolperfalle von ver-fusten Controllern (durch "kryptische" Fuse-Hexzahlen) was hier im Forum immer wieder kilometerlange Problemlösungs-Threads verursacht.
Bootloader Hater schrieb: > Ich finde es gerade für einen Anfänger furchtbar umständlich und > fehleranfällig mit einem Bootloader zu arbeiten. Keiner interessiert sich dafür ob du Bootloader hasst, oder liebst. Aber es ist nunmal auf dem Arduino einer drauf. So ist die Situation, alles andere ist ein "Wünsch dir was" Darum, wird man sich also kümmern müssen. Zumindest mal den ein oder anderen Gedanken dran verschwenden dürfen. Ich halte die Frage des TO für berechtigt! Wobei ich bezweifle, dass ein Assemblerprogrammierer solche Fragen stellen muss. OK, vielleicht ganz am Anfang.... MWS schrieb: > Programmiert man per ISP, dann wird der Bootlader überschrieben, die > Arduino IDE kann den Uno dann nicht mehr ansprechen. Der Bootlader kann > aber bei Bedarf wieder per AVR-Studio draufgeladen werden. Natürlich kann die Arduino IDE dann weiterhin Programme per ISP aufspielen, und so auch den Bootloader reparieren. int 21h schrieb: > Was gibt es noch zu beachten? Was gerne dabei vergessen wird: Dann sollte man aber auch die (Bootloader) Fuses so setzen, dass später keine Probleme zu erwarten sind. Schlussendlich: Ja, man kann den Arduino UNO, seines Bootloaders berauben, in dem man die Anwendung per ISP aufspielt. Und dann bitte noch die Fuses korrigieren.
int 21h schrieb: > kein teures AVR Evaluierungsboard Beitrag "Pollin AVR Board Programmierung per USB-to-RS232 Converter DOCH möglich" Verwende dieses billige Board seit vielen Jahren mit AVR Studio 4.16...9 Studio7 geht auch, aber für den Zweck überzogen, denke ich. Flashen mit Ponyprog bzw avrdude.
Hallo, ich benutze für ein paar alte ASM-Projekte auch AVR-Studio 4.18, bei der 4.19 gab es die ersten größeren Umbauten und irgendwas klemmte damals dann bei mir. Programmer ist, auch aus alten Zeiten, entweder ein Dragon oder ein STK500. Ein China-Programmer, den mir ein Bekannter vererbt hat, wird vom Studio aber auch sauber erkannt. Ein Arduino-UNO oder Nano als Mega328 Plattform ist einfach kostengünstig, ein Arduino-Pro Mini eigentlich noch besser, da hat man auch die serielle komplett frei. https://www.amazon.de/IZOKEE-ATmega328-Mikrocontroller-Entwicklerboard-Arduino/dp/B078HJDFLB/ref=sr_1_3?ie=UTF8&qid=1543742578&sr=8-3&keywords=arduino+pro+mini Bootloader Fuses raus, ISP ran und fertig. Gruß aus Berlin Michael
Zusammenfassend: * Klar geht ein Arduino als Eval Board für AVR Controller * Du benötigst einen ISP Programmer, um ohne Bootloader und aus AVR Studio Programme auf das Board zu flashen. Dabei ist es egal, ob es sich um Assembler oder C Programme handelt. * Du kannst einen zweiten Arduino zum ISP Programmer machen, indem du ihn einmalig aus der Arduino IDE heraus als solchen programmierst. Den Sketch findest du sicher. AVR Studio möchte von sich aus nur Atmel Programmiergeräte unterstützen, es gibt aber Fremdprodukte, die so tun, als wären sie der alte AVRISP (Mark 1). M.W. macht das z.B. der USBASP von Kollege Fischl. Viele Fremdprogrammer benötigen allerdings den Schritt, das man sie extra aufruft und das von AVR Studio produzierte HEX File per Kommandozeile oder eigener GUI auf den MC bringt. Das beste Tool für solche Operationen ist vermutlich avrdude, das eine Unmenge Geräte unterstützt.
:
Bearbeitet durch User
Ok, also komme ich an einen USBASP nicht drum herum (Ich werde mir wahrscheinlich diesen hier zulegen: https://guloshop.de/shop/Mikrocontroller-Programmierung/guloprog-der-Programmer-von-guloshop-de::70.html und: https://guloshop.de/shop/Kabel-und-Adapter/Programmieradapterkabel-6-polig-lang::8.html , brauche ich nicht noch einen Oszillator zum beschreiben?) Aber welchen Zweck erfüllt dann eigentlich der andere uC auf dem Arduino Uno Board (Atmega16u2)? Der soll doch die Kommunikation zwischen USB und uC herstellen. Der ist dann sozusagen der Bootloader denke ich. Wird das Programm darin beim reset/programmieren auch entfernt? Ist der Chip ab dann auch nutzlos? Im Prinzip ist dann der ganze Arduino Uno überflüssig XD (z.B. der USB Anschluss, der zweite uC, der Quartz Oszillator, etc.) Aber wegen der Einfachheit (und Geldmangel) habe ich mir den Arduino doch überhaupt gekauft. Sehe ich das so richtig?
int 21h schrieb: > Ok, also komme ich an einen USBASP nicht drum herum (Ich werde mir > wahrscheinlich diesen hier zulegen: Sparen koste es was es wolle? Lieber einen zu "AVR ISP MKII" kompatiblen. Macht viel mehr Freude da AVR Studio sich freut.
Asdf schrieb: > IIRC kannst du via avrdude den bootloader mitnutzen. Dafür musst Du in > Atmelstudio den dude als externes Tool einbinden. Beschreibungen dafür > gibt es im Netz Habe mich noch mal auf die Suche gemacht und bin auf dieses Video hier gestoßen: https://www.youtube.com/watch?v=zEbSQaQJvHI Hat alles funktioniert... Problem gelöst :D Kein usbasp oder sonstiges Nötig!!!
int 21h schrieb: > Kein usbasp oder sonstiges Nötig!!! Irgendwann wirst du einen ver-fusten Controller haben und reuemütig hier zurückkehren bzw daran denken was du hier geschrieben hast.
USBASP wird vom AVR Studio und ATmel Studio nicht unterstützt. Du kannst diesen Programmieradapter aber trotzdem mit zusätzlicher Software verwenden. Zum Beispiel avrdude und AVR8-Burn-O-Mat.
> Irgendwann wirst du einen ver-fusten Controller haben und reuemütig > hier zurückkehren bzw daran denken was du hier geschrieben hast. Ein Atmega328 kostet ca €2,20. Also kann er locker 10 "verfusen " und liegt immer noch unter den Kosten eines ISPs (Arduino mit DIP angenommen) Und mit avrdude kann er gezielt nur das Flash ohne die Fuses brennen.
Beitrag #5644485 wurde von einem Moderator gelöscht.
Beitrag #5644833 wurde von einem Moderator gelöscht.
MWS schrieb: > Ein Bootlader programmiert den Flash über die serielle > Schnittstelle/USB... > Programmiert man per ISP, dann wird der Bootlader überschrieben, die > Arduino IDE kann den Uno dann nicht mehr ansprechen. So ganz verstehe ich es noch nicht. Den Bootloader programmiert man doch auch über die serielle Schnittstelle, genauso wie den Flash. Also ist der Bootloader, wenn man mit einem ISP programmiert, erstmal nicht nötig. Wenn ich aber den uC über den USB Eingang programmieren möchte (was ja auch seriell geschieht) dann muss im uC bereits eine kleine Software enthalten sein, die diese eine spezielle Kommunikation ermöglicht (Der Bootloader in dem Fall). Wenn ich den uC jetzt über AVR-Studio programmieren möchte, sollte doch schlimmstenfalls gar nichts passieren, da der Bootloader die Bits die aus dem USB Ausgang kommen nicht interpretieren kann. Wieso wird dann aber der Bootloader gelöscht? Der sollte dann, wenn ich die Firmware geschrieben hätte, einfach nichts machen, fertig. Oder sehe ich das falsch? ____________________________________ Zweite Frage: Befindet sich das Bootloader Programm jetzt im kleinen Atmega16u2 oder im Atmega328? Falls es sich im Atmega16u2 befindet, was ich auch denke, ist es dann im Bootloader vom Atmega16u2 oder im Flash Speicher. Und dann müsste der Bootloader vom Atmega328 ja leer sein richtig? ____________________________________ (3. Wer/Wie/Was sind diese Fuse Bits? Falls ich das wissen muss) Ich warte gespannt auf eure Antworten und wünsche euch noch einen schönen Nikolaus Tag :D
1. Programmspeicher und und Bootloader liegen im gleichen Flash. Hinter dem Programmspeicher kommen noch ein paar Bytes für den Bootloader. Bevor du ein neues Programm aufspielst, wird der Flash komplett, einschließlich Bootloader gelöscht, damit keine Artefakte vom alten Programm bleiben, falls das neue kürzer ist. Dementsprechend wird bei jedem ISP-Flashen auch der Bootloader plattgemacht. 2. Der Bootloader befindet sich im 328. Der 16U2 ist nur ein FT232-Ersatz, er macht also nur USB auf seriellen UART. Du kannst den Bootloader auf dem 328 auch mit einer echten RS232-Schnittstelle mit Pegelwandler bespaßen. 3. Ja, die solltest du kennen, denn dort nimmst du grundlegende Einstellungen des Controllers vor, die für den Betrieb erforderlich sind und nicht in deinem Flash stehen können. Über diese Konfiguarionsbits gibst du z.B. an, woher der Takt des Controllers kommt. Quarz, interner Oszillator,... Und dort wird auch angegeben, ob ein Bootloader vorhanden ist und wie viel Platz der Bootloader braucht, damit der Controller beim Start an der richtigen Adresse startet.
int 21h schrieb: > So ganz verstehe ich es noch nicht. Den Bootloader programmiert man doch > auch über die serielle Schnittstelle, genauso wie den Flash. Der Satz ist für mich nicht eindeutig. Der Bootloader von dem bei AVR allgemein gesprochen wird ist ein Stück Software, dass man über die ISP Schnittstelle in den Flash Speicher des Mikrocontrollers installiert. Der Zweck des Bootloaders besteht darin, das eigentliche Hauptprogramm über andere Schnittstellen, als ISP installieren zu können - normalerweise eine serielle Schnittstelle. Manchmal auch USB. Wenn du einen ISP Programmieradapter verwendest, brauchst du keinen Bootloader. > Wenn ich den uC jetzt über AVR-Studio programmieren möchte, sollte doch > schlimmstenfalls gar nichts passieren, da der Bootloader die Bits die > aus dem USB Ausgang kommen nicht interpretieren kann. Du verwechselst dabei vermutlich zwei unterschiedliche USB Anschlüsse:
1 | USB 1-------ISP programmieradapter------------ISP |
2 | PC AVR |
3 | USB 2-------USB-UART Adapter (oder Chip)------UART |
Das AVR/Atmel Studio unterstützt ausschließlich ISP Programmieradapter. Mit Bootloadern kann das AVR/Atmel Studio nichts anfangen. Die sind eher aus dem Arduino Umfeld bekannt. Wie gesagt kann man aber z.B. avrdude benutzen, um Programme auf den µC zu übertragen. Avrdude unterstützt praktisch alle Schnitsttellen-Varianten und Adapter, die es dazu gibt. Wenn man ein Programm über den ISP Anschluss installiert, geht der vorher Installierte Bootloader normalerweise verloren. > Befindet sich das Bootloader Programm jetzt im kleinen > Atmega16u2 oder im ATmega328? Ich vermute, dass du ein Arduino Uno Board meinst. Dort dient der kleine ATmega16u2 als USB-UART Adapter. Das Board wird mit vorinstallierter Firmware geliefert, so dass dieser Chip sofort einsatzbereit ist. Andere Boards haben an dieser Stelle meistens einen Chip von FTDI oder den chinesischen CH340/341. Dein eigenes Anwendungsprogramm kommt auf den ATmega328. Dieser ist beim kauf schon mit einem Bootloader ausgestattet und seriell mit dem USB-UART Adapter (ATmega16u2) verbunden. Somit kann die Arduino IDE deinen Sketch seriell (über USB) drauf laden. Das ARV/Atmel Studio kann mit dem Arduino Bootloader nichts anfangen. Es installiert dein Programm üblichgerweise mit einem ISP programmieradapter, der mit der ISP Schnittstelle des ATmega328 verbunden ist. Also: 1) Der ATmega16u2 hat keinen Bootloader, aber ein Programm, dass ihn zum USB-UART Adapter macht. Daran sollst du nichts ändern - niemals. 2) Der ATmega328 ist dein Target, darauf sollst du dein eigenes Programm installieren. Und zwar wahlweise über USB mit Hilfe des dort vorinstallierten Bootloaders oder über ISP, dann geht der Bootloader verloren. Die Fuses sind im Datenblatt des Mikrocontrollers beschrieben. Ich empfehle Dir dazu das Tool http://www.engbedded.com/fusecalc/ . Damit kannst du unter Anderem einstellen, woher der µC seinen Systemtakt bezieht und mit welcher Taktfrequenz er starten soll. Die Taktfrequenz kannst du aber auch später in deinem Programm durch Schreibzugriff auf das OSCCAL Register ändern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.