Neuen Bootloader erstellen/editieren

Hallo zusammen,

ich habe zwar schon versucht über Google mehr in Erfahrung zu bringen, ich komme aber einfach nicht weiter. Ich möchte mir auf einen 'nackten' Atmega328 den UNO-Bootloader brennen. Soweit alles kein Problem, habe einen separaten ISP-Programmer.

Kann mir jemand aber sagen, wie ich den originalen UNO-Bootloader editieren bzw. modifizieren kann? Ich würde gerne die standardmässige LED von D13 an einen anderen Pin legen.
Im Installationspfad der Arduino-IDE liegt im Hardware-Ordner eine Datei namens "optiboot_atmega328.hex", ich denke das wird der Bootloader für den UNO sein? Kann man diese hex-Datei öffnen und bearbeiten, oder wir kann ich mir eine neue (modifizierte) erstellen?

Über ein paar Tipps wäre ich dankbar :slight_smile:

Spexx:
Im Installationspfad der Arduino-IDE liegt im Hardware-Ordner eine Datei namens "optiboot_atmega328.hex", ich denke das wird der Bootloader für den UNO sein? Kann man diese hex-Datei öffnen und bearbeiten, oder wir kann ich mir eine neue (modifizierte) erstellen?

Es ist wie bei Sketchen auch: Du kannst NICHT "die HEX-Datei öffnen und bearbeiten", sondern Du mußt den Quellcode bearbeiten und zu einer neuen HEX-Datei kompilieren und hochladen.

Da ein Bootloader kein "Sketch" ist, gibt es von der Arduino-IDE keine Unterstützung dafür, sondern Du mußt die Bearbeitung mit Quellcode-Editor und Makefile durchführen. Dazu benötigst Du ein tiefgehendes Verständnis für den AVR-GCC Compiler, die Atmel AVR-Hardware, Details der Controller-Hardware, über Makefiles und wie man an der Kommandozeile AVR-Programme kompiliert.

Wenn Dir irgendwas von diesem tiefgehenden Verständnis fehlt und Du einen Programmer besitzt, dann bist Du im allgemeinen besser damit bedient, den Bootloader plattzumachen und Sketche nur mit dem Programmer hochzuladen, als zu versuchen, einen modifizierten Bootloader zu erstellen.

Was jurs nicht sagt Du mußt auch Assembler/Maschienensprache programmieren können.
Grüße Uwe

Ich möchte keinen eigenen Bootloader entwickeln, sondern lediglich die LED von D13 auf einen PWM-Ausgang legen. Ich vermute mal, das kann man relativ leicht hinbekommen, ohne großartige Kenntnisse von Assembler/Maschinensprache zu haben.

Folgende Schritte wären also notwendig:

  • Quellcode öffnen --> Wo finde ich den Quellcode? Womit kann man diesen öffnen?
  • Portzuweisung ändern
  • Code kompilieren/hex-Datei erzeugen --> mit Makefile??
  • Modifizierte hex-Datei (Bootloader) aufspielen --> glücklich sein :slight_smile:

Wie erwähnt, ich möchte nur eine winzige Änderung vornehmen, nichts weiter. Glaubt ihr nicht, das wäre auch ohne tiefgehendes Verständnis machbar?

Wie man auf dem Schaltplan des UNO (http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf) sehen kann, hängt die gelbe LED über einen OPV am SCK Pin (PB5 oder eben digital13) des Atmegas. Meines Wissens kannst du also so viele Sprachen können, wie du willst, die lässt sich nicht an einen anderen Pin hinprogrammieren, sondern müsste wennschon umgelötet werden.

Eines vorab: Helfen kann ich dir dabei nicht. Es drängt sich nur die Frage auf, wofür du das machen willst. Ich sehe keinen Sinn darin, eine LED blinken zu lassen, wenn im Normalfall sowieso ein anderer Sketch auf den Mikrocontroller gebügelt wird. Kannst du kurz erklären, warum du das ausgerechnet so haben willst?

Ich habe mir ein paar "Moteinos" (http://lowpowerlab.com/moteino/) bzw. Moteino-Clones erstellt. Auf dem Board befindet sich ein Atmega328 (inkl. Spannungsregler) sowie ein zusätzliches RF-Modul (RFM12B oder RFM69).

Mit der LED sieht man einfach, wenn ein neuer Sketch hochgeladen wird oder wenn der Mikrocontroller neu bootet. Man hätte genauso gut darauf verzichten können. :slight_smile: Es ist halt ansonsten keine weitere Anzeige vorhanden. Die LED ist nicht an D13 angeschlossen, da dieser Ausgang kein PWM kann.
Ich habe aber gerade beim Kopieren des Links gesehen, dass es sogar in einem Beitrag in den Kommentaren steht, wie man das ändern kann (siehe hier: http://lowpowerlab.com/blog/2013/02/04/custom-optiboot-for-moteino/). Hätte ich wohl vorher nochmal alles durchlesen sollen :cold_sweat:
Werde das mal testen aber ich denke, das Thema wäre somit erledigt.