Mini Pro Bootloader ersetzen

So zurück zum Thema, die Idee mit dem Dauerplus ist zwar eine gute Idee, aber irgendwann raucht der Mikrocontroller ab und gibt den Geist auf wenn er 24Std läuft.
Zündungsplus ist auch eine nette Idee, jedoch was passiert mit Warnlicht wenn die Zündung aus ist? Nichts!
Was die Spannungsschwankungen angeht, wird vor dem Mikrocontroller ein 5V Spannungswandler gesetzt, der konstante 5V wiedergibt, da die Autobatterie je nach Wirkungsgrad/Alterung/Zündung zwischen 11,7 V und 14,5 V bringt.

Warum sollte der Mikrocontroller abrauchen? Wenn dann ist dort irgendwo am falschen Ende bei der Planung/Realisierung gespart worden. Ein Spannungswandler reicht hier nicht aus!!

http://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.23

Gute seite! Das mit dem Schweißen war mir nicht bewusst.
Nunja da es zu viele Risiken mit Zündung und Dauerplus mitbringt ist es auch keine Lösung.
Das was bei der original LED ankommt ist immer reguliert.

Also was ich jetzt vorhabe ist, ich kaufe mir einen Arduino UNO und nutze den als ISP Programmer.

Jetzt muss ich herausfinden wie ich den bootloader loswerde beim starten, ohne das er Prüft ob ein PC per IDE angeschlossen ist, sondern direkt bei 0 mit dem void setup und void loop loslegt.
Der bootloader soll ja nicht zwingend gelöscht werden, es reicht ja aus, dass er garnicht erst startet. Somit muss ich herausfinden welche Fuse ich beim 328er einstelle.

Was willst du mit dem Bootloader, wenn du über den ISP programmieren kannst?

Nichts, ich brauche ihn ja nicht, ich versuche gerade zu verstehen wie ich den Bootloader loswerde.

Kann ich mit dieser Anleitung:

Mit einem Skatch den bootloader überschreiben?
D.h. ich spiele ein Skatch per Arduino ISP auf mein Mini und dabei wird der bootloader überschrieben?
Und eine erneute nutzung des Arduino IDE meines Mini Pros ist nur mit erneuter aufspielung des Bootloaders per Arduino ISP möglich? Richtig?

Sofern der Bootloader fehlt, spielt der Arduino ohne nachzudenken mein skatch ab?

Der Bootloader ist nur dafür da, dass du den Atmega328P beim Uno, Pro Mini, ... ohne ISP Adapter über die UART Schnittstelle (Rx/Tx) programmieren kannst. Einen Vorteil sehe ich an der ganzen Bootloader Sache sowieso nicht.

Sinnvoller wäre es wie bei den neueren Arduino ARMs, dass auf dem Arduino selber bereits ein Programmer onBoard ist, der die Atmel µC beschreibt. Aber das war vermutlich irgendwo eine Kostensache. Denn man hätte einen ISP auf dem Board setzen müssen. Wobei ich mir nicht sicher bin, vermutlich wäre dazu sogar der 16U2/8U2 in der Lage.

Dann könnte mman das Board auch direkt als "Brennstation" für blanke Atmega168/328/ nutzen.

Ich habe mir die Fuse angeschaut bei der board.txt
(5V, 16MHz)

[...]=pro.menu.cpu.16MHzatmega328

[...].bootloader.low_fuses=0xFF
[...].bootloader.high_fuses=0xDA
[...].bootloader.extended_fused=0x05

Ich hänge ein Bild an mit dem Screenshot von den bereits aktivierten Fuses.
Welchen Haken muss ich entfernen?
BOOTRST, damit der Bootloader bei Spannungseingang nicht startet?
Wenn der Bootloder über Fuses ausgeschaltet ist, ist es möglich weiterhin IDE zu nutzen? Oder sind Skatches über ISP zu schreiben?

Wenn der Bootloder über Fuses ausgeschaltet ist, ist es möglich weiterhin IDE zu nutzen? Oder sind Skatches über ISP zu schreiben?

Warum "ODER"?
Das "UND" soll doch erreicht werden.

Schreib deine Programme in der Arduino IDE und übertrage sie per ISP.
Da gibts extra in der IDE einen Menüpunkt für.....

(deine Sorgen möchte ich auch mal haben)

Und zu den Fuses:
Nutze den Calculator!
Vergleiche den Atmel Auslieferungszustand mit den Arduino Fuses.

Optional:
Erstelle eine eigene boards.txt
(um dir das Leben zu vereinfachen)

Frage an die Fuse Spezialisten:

Ich flashe mit USBasp aus der IDE, ohne irgendwelche sonstige Einstellungen zu machen und es geht wie ich mir vorstelle. Sofortiger Start, kein Hochladen über Com mehr möglich, d.h. BL ist deaktiviert, aber NICHT gelöscht.

Nun, was bringt die manuelle Fuserei, wenn ich den Speicherplatz vom BL nicht für den Sketch brauche?

geht wie ich mir vorstelle. Sofortiger Start

Dein "sofortig" unterscheidet sich erheblich von meinem "sofortig".

, d.h. BL ist deaktiviert, aber NICHT gelöscht.

Falsch!
Der Bootloader ist gelöscht, aber nicht deaktiviert.

Das führt dazu, dass:

  1. du oben Speicher verplemperst (dümpelt ungenutzt oben rum)
  2. der Bootloader TROTZDEM angesprungen wird

Zu 2:
Der Platz, wo mal der Bootloader war, ist leer, also jetzt mit 0xFF gefüllt.
Atmel sei Dank, wird FF als NOP (No Operation) interpretiert.

Nach einem Reset werden also erstmal ein Haufen NOPs ausgeführt, bevor der PC (Programm Counter) seinen Wraparound (Atmel sei Dank) zur Adresse 0 macht, und die eigentliche Anwendung startet.

Du verlässt dich also 2 Mal auf "Atmel sei Dank".

wenn ich den Speicherplatz vom BL nicht für den Sketch brauche?

So lange geht es gut.... (einigermaßen)
Aber sobald die Anwendung bis da oben geht, wird nach einem Reset mitten in die Anwendung gesprungen, völlig unkultiviert.
Scherben wird es geben!

Der Bootlader kann nicht gelöscht sein, denn wenn ich danach wieder den BL brenne, schreibt er nur ein Byte und voila, der Bootlader ist wieder da und funzt.

Wenn der Bootlader wirklich geflasht wird, dauert es einige Sekunden, bis er drauf ist, z.B. bei neuen Chips.

ElEspanol:
Der Bootlader kann nicht gelöscht sein, denn wenn ich danach wieder den BL brenne, schreibt er nur ein Byte und voila, der Bootlader ist wieder da und funzt.

Ich glaube dir nicht!

Prüfe das nochmal, und du wirst sehen.....

Mehrfach schon passiert. Mit USPasp und aktuell IDE 1.6.5. Hat mich aber selber gewundert.

Werde es aber verifizieren.

Werde es aber verifizieren.

Das tu du mal....
Damit könntest du mein Weltbild erschüttern, wenn du recht hast.

Bei mir trifft das übrigens nicht zu! (gerade getestet, allerdings mit einem UNO)
Auch 1.6.5 und USBasp.

Auch:
Beim Hochladen per ISP, löscht avrdude den gesamten Flash, also auch den Bootloader.

ElEspanol:
schreibt er nur ein Byte und voila, der Bootlader ist wieder da und funzt.

Jetzt ist mir auch aufgefallen, welchen Bock du da schießt!
Das eine Byte, was du da meinst, ist das Lock Fuse Byte.

Du schaust dir nur die letzte Zeile der Meldungen an!
:wink:

Wenn ich den Bootloader neu drauf spiele kommt bei mir folgendes: (siehe Anhang)

BootloaderMeldungen.txt (8.99 KB)

Ich sehe in deinem Anhang nichts, was mehr als 0,00 Sekunden braucht. Wo also wird der BL gebrannt?

ElEspanol:
Ich sehe in deinem Anhang nichts, was mehr als 0,00 Sekunden braucht. Wo also wird der BL gebrannt?

Du willst nicht.....
Die ganzen "writing" und "erase chip" möchtest du ignorieren.....

ok. ich versuche dir es nochmal ganz langsam zu verkaufen.

Für die Zeitangaben bin ich nicht verantwortlich.
sie stammen aus dem AVR Dude.

Damit kannst du den AVR auslesen.

Nachweis 1:
Brenne mit der IDE den Bootloader drauf.
myavr zeigt dir dass der Bootloader oben hängt.
Die Anwendung ist gelöscht.

Nachweis 2:
Brenne (ohne USBasp) mit der IDE das Blink drauf.
myavr zeigt dir dass der Bootloader oben hängt.
Die Anwendung ist unten drauf.

Nachweis 3:
Brenne (Hochladen mit Programmer) mit der IDE das Blink drauf.
myavr zeigt dir dass der Bootloader weg ist.
Die Anwendung ist unten drauf.

So!
Und jetzt bist du wieder dran!
:wink:

Ich bin ja nicht unbelehrbar, und gebe auch zu, dass ich mich noch nicht wirklich tiefergehend mit dem Thema beschäftigt habe.

Aber warum dauert es manchmal etliche Sekunden, und man sieht den Fortschritsbalken langsam länger werden um den BL zu brennen und manchmal eben ist er "sofort" gebrannt. Dies hat mich verwirrt und zu entsprechnender Annahmen verleitet.

Ich werde es mal nach deiner Anleitung nachvollziehen.

Aber warum dauert es manchmal etliche Sekunden, und man sieht den Fortschritsbalken langsam länger werden um den BL zu brennen und manchmal eben ist er "sofort" gebrannt.

Tja....
Das kann ich dir leider nicht sagen...
Könnte etwas mit den momentanen Befindlichkeiten deines Computers/USB/Chipsatz zu tun haben....

Dies hat mich verwirrt und zu entsprechnender Annahmen verleitet.

Ja, es ist schwierig etwas falsches wieder aus dem Schädel zu bekommen.
Und wenn es dann noch im Schädel eines anderen steckt, ist da so gut wie kein ran kommen.

Mit Annahmen sollte man vorsichtig sein...
Aber das ist ein ganz anderes Thema.
Habe ich mich mal (mathematisch/logisch/philosophisch) mit beschäftigt...

Also, erster Versuch: Flashen mit USBasp einen kleinen Sketch:

Der Sketch verwendet 2.612 Bytes (8%) des Programmspeicherplatzes. Das Maximum sind 32.256 Bytes.
Globale Variablen verwenden 240 Bytes (11%) des dynamischen Speichers, 1.808 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
C
        

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed


Writing | ################################################## | 100% 1.31s

avrdude: 2612 bytes of flash written
\build850530977475224165.tmp/BlinkWithoutDelay.cpp.hex contains 2612 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.78s

avrdude: verifying ...
avrdude: 2612 bytes of flash verified

avrdude done.  Thank you.

2.612 Bytes dauern: Writing | #..# | 100% 1.31s
Reading | #...# | 100% 0.78s

Jetzt den Bootlader flashen:

C:\Archivos de programa\arduino-1.6.5-r2\hardware\tools\avr/bin/avrdude -CC:\Archivos de programa\arduino-1.6.5-r2\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m 

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Archivos de programa\arduino-1.6.5-r2\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbasp
   

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

C/optiboot_atmega328.hex:i -Ulock:w:0x0F:m 

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Archivos de programa\arduino-1.6.5-r2\hardware\tools\avr/etc/avrdude.conf"

        
         RETRY pulse                   : SCK
         serial program mode           : yes
Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0x05"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0x05:
avrdude: load data efuse data from input file 0x05:
avrdude: input file 0x05 contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDE"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDE:
avrdude: load data hfuse data from input file 0xDE:
avrdude: input file 0xDE contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude done.  Thank you.

         parallel program mode         : yes
         Timeout                       : 200


         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: reading input file "C:\Archivos de programa\arduino-1.6.5-r2\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against C:\Archivos de programa\arduino-1.6.5-r2\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file C:\Archivos de programa\arduino-1.6.5-r2\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file C:\Archivos de programa\arduino-1.6.5-r2\hardware\arduino\avr/bootloaders/optiboot/optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.03s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.

Ich weiss jetzt nicht, wie avrdude das zaubert:

avrdude: writing flash (32768 bytes):

Writing | #...# | 100% 0.00s

wenn er für 2612 bytes Sketch 1.31s braucht. Der BL hat ja glaub ich auch 2 Kbyte.

Die obigen Texte habe ich gekürzt, wg. des 9000 Zeichen Limits

Ich forsche weiter. Überzeugungen muss man sich ja bekanntlich erarbeiten.

Nächster Versuch:

BL brennen: ab 7E00 steht er, bis 7FFF

Sketch brennen:
ab 0000 bis 0A33 steht er. Danach zeigt das myAVRTool nix mehr an, sollte also leer sein

Flashen über Com und BL:

von 0000 bis 0A33 steht der Sketch

von 7E00 bis 7FFF steht der BL

Das dürfte Combies Weltanschauung untermauern.

Aber noch fehlt mir die erkärung, warum der BL so schnell geflasht ist und der etwa gleich grosse Sketch wesentlich länger dauert :confused: :confused: :angry: