Wiederbelebung mittels externem Oszillator

Bei einem fehlgeschlagenen Programmierversuch der FlightCtrl mit avrdude, oder durch falsches Setzen der Fusebits wird man unter Umständen von seinem Prozessor ausgesperrt, sodaß weitere Zugriffe über PonyProg oder avrdude nicht mehr möglich sind.

Oft ist das Problem nur, daß die Fusebits so "zerstört" sind (oder manuell so gesetzt wurden), daß der ATmega einen von außen vorgegebenen Takt benötigt.

Mit einem billigen Oszillator kann man diesen Takt erzeugen und damit den Prozessor retten:

Oszillator.png

Benötigt:

  • 1 Oszillator (4MHz, aber die Frequenz ist nicht besonders wichtig)
  • 1 Kondensator 100nF

Zur Verwendung kam ein handelsüblicher Oszillator. Zwischen GND und VCC-Anschluß des Oszillators wird der Kondensator gelötet. An GND (Pin 7), VCC (Pin 14) und Output (Pin 8) des Oszillators sodann jeweils ein (nicht zu langes) Kabel löten. Die anderen Enden der drei Kabel werden temporär auf die FlightCtrl gelötet, und zwar so:

  • GND an ein GND-Pad
  • VCC an ein +5V Pad
  • Output an Pin 8 des ATmega (XTAL1)

(Tipp: Anstatt Output direkt an den ATmega zu löten kann man es auch an das platinenmittige Ende von C2 löten - da ist mehr Platz und weniger Kurzschlußgefahr.)


Jetzt die FlightCtrl wie üblich über das 6-poligen Programmierkabel mit der SerCon verbinden (SerCon Jumper setzen!), und die Spannungsversorgung aktivieren. Wenn alles gut geht, kann man nun mit PonyProg wieder die Fusebits auslesen, korrigieren und zurückschreiben. Danach kann der Oszillator wieder abgelötet werden.


Retten falsch gesetzter Fuses mit dem MAX232

Eine andere Möglichkeit einen AVR wiederzubeleben ist es, von Pin 3 eines standardmässig beschalteten MAX232 (SerCon) den 27 kHz Takt abzugreifen und mit einer Draht- Brücke direkt auf XTAL1 einzukoppeln, wobei der Quarz in der Schaltung anschwingen sollte. Danach können die Fuses per ISP neu gesetzt werden, wozu unter Umständen die Schreibgeschwindigkeit herabgesetzt werden muss. Ist kein MAX232 vorhanden, kann auch ein anderer Oszillator verwendet werden. Als Beispiel sei hier die Verwendung eines anderen AVRs genannt, auf dem man ein einfaches Programm laufen lässt, welches ständig einen Pin toggelt.


Hilfe beim Setzen der Fusebits

Wer die Fusebits mit AVRdude manuell setzen möchte, für den gibt es eine komfortable Hilfe, welche die Hex- Werte automatisch aufgrund der zuvor gewählten Einstellungen berechnet: AVR Fuse Calculator