Fuses falsch gesetzt

Wie im vorigem Beitrag beschrieben, kann es leicht passieren, dass man die Fuse-Bits falsch gesetzt hat. Danach ist der ATmega erstmal nicht mehr ansprechbar. Es gibt aber Hoffnung, ihn wieder zu beleben.

Für den Low-Voltage-Betrieb eines ATmega kann man den internen Quarz des Atmegas benutzen. Dazu wird der ATmega mit einem entsprechenden Bootloader geflashed und die Fuse-Bits neu gesetzt. In meinem Fall hat mein USBasp anscheinend nicht richtig funktioniert und den ATmega in einen nichtansprechbaren Zustand befördert.

Ich habe mir zuerst einen externen Oszillator besorgt Oszillator 4Mhz (Affiliate-Link). Der Takt ist nicht so wichtig. Er sollte nur zwischen 1 Mhz und der Maximalfrequenz des Atmegas liegen. Den Oszillator hab ich wie unten an VCC/GND und Out am ATmega XTAL1 (ATmega328p PIN 9) angeschlossen. Damit erhält der ATmega wieder einen Takt. Das flashen des Bootloaders kann dann wieder mit den beschriebenen Methoden erfolgen.

Bootloader_Arduino_Oscillator_Steckplatine

Quelle: www.mikrocontroller.net

Einen blanken ATmega328p in Betrieb nehmen

Da hat man ihn nun vor sich liegen, einen brandneuen ATmega328p. Was braucht ihr nun, damit er auch was sinnvolles tut?

Auf den ATmega müssen 2 Teile Software:

  1. ein Bootloader
  2. ein Sketch

Der Bootloader

Damit der ATmega irgendwelchen Programmcode ausführen kann, muss zuerst ein Bootloader installiert werden. Da gibt es mehrere Möglichkeiten:

  • den internen Taktgeber benutzen
  • einen externen Quarz benutzen
  • einen externen Oszillator benutzen

Abhängig von der gewählten Bootloaderart, müssen die sogenannten Fuses eingestellt werden. Beschreibt man den ATmega mit den falschen Fuses reagiert er unter Umständen nicht mehr und es ist schwierig ihn wiederzubeleben. Ich hab leider auch diese Erfahrung machen müssen.  Weiter unten verlinke ich auf ein paar Seiten, die weitere Hinweise dazu geben. Das werde ich leider auch ausprobieren müssen.

Für mein erstes Projekt, den Universalsensor von Dirk  musste ich den ATmega mit einem Bootloader für den internen Takt beschreiben. Diese Bootloader sind besonders energiesparend und ein ähnlicher wird z.B. auch bei diesem MySensors Projekt  eingesetzt.

Der Universalsensor ist bereits am Laufen und ich hab mich ins nächste Projekt gestützt: Einen MySensor der nur mit 2 AA-Batterien auskommen soll: Slim 2AA Battery Node

Ich habe 3 Varianten des Schreibens ausprobiert:

  1. Mit einem Arduino Uno als ISP
  2. Mit einem Raspberry Pi
  3. Mit einem USBasp Programmer

Alle 3 Varianten nutzen das gleiche Prinzip:

  • MOSI -> PIN 17
  • MISO -> PIN 18
  • SCK -> PIN 19
  • RESET -> PIN 1
  • VCC (5V) -> PIN 7
  • GND -> PIN 8

I

Variante 1: Arduino als ISP

Bootloader_Arduino_Steckplatine

Arduino als ISP

Zum Flashen des Bootloaders wird die Arduino IDE etwas erweitert.

Sucht im Arduino Verzeichnis die Datei boards.txt im Pfad hardware/arduino und öffnet sie und ergänzt folgendes:

##############################################################

apm96.name=APM Optiboot internal 1MHz noBOD 9600baud

apm96.upload.tool=avrdude
apm96.upload.protocol=arduino
apm96.upload.maximum_size=32256
apm96.upload.speed=9600
apm96.bootloader.tool=avrdude
apm96.bootloader.low_fuses=0x62
apm96.bootloader.high_fuses=0xde
apm96.bootloader.extended_fuses=0x07
apm96.bootloader.path=optiboot_v50
apm96.bootloader.file=atmega328_1a.hex
apm96.bootloader.unlock_bits=0x3F
apm96.bootloader.lock_bits=0x2F
apm96.build.mcu=atmega328p
apm96.build.f_cpu=1000000L
apm96.build.core=arduino
apm96.build.variant=standard

##############################################################

Die Zeile

apm96.bootloader.file=atmega328_1a.hex

beschreibt den Namen des Bootloader-Files. Das File und die Fuses (low, high, extendet) müssen zusammen passen.

Die oben genannte Kombination wird z.B. für das MySensors Projekt verwendet. Den Bootloader bekommt ihr aus dem MySensors Forum. Ihr kopiert das hex-File in den bootloader-Ordner im Arduino Verzeichnis.

In der Arduino IDE taucht dann ein neuer Eintrag unter den Boards auf. Danach wird der Arduino (z.B. ein UNO) mit dem Sketch „ArduinoISP“ aus den Beispielen bespielt.

Wählt dann das neue Board „APM Optiboot internal 1MHz noBOD 9600baud“ aus und betätigt: „Bootloader Brennen“ aus dem Werkzeug-Menu.

Hat es geklappt ist der ATmega bereit für den ersten Sketch.

Variante 2: Rasperry Pi und avrdude

Weiterlesen