AVR Troubleshooting

ISP Programmierung funktioniert nicht

Es kommt gelegentlich vor, das die Programmierung via ISP Schnittstelle nicht funktioniert. Hier werden verschiedene Ursachen und deren Lösung gezeigt.

ISP Clock zu hoch

Die ISP Programmierung funktioniert nur dann, wenn der Takt der ISP Schnittstelle maximal 1/4 des CPU Taktes beträgt. Da alle neueren AVR mit einem internen Takt von 1MHz ausgeliefert werden darf der Takt in diesem Fall maximal 250kHz betragen. Da der interne Takt durch einen relativ ungenauen RC Oszillator erzeugt wird sollte man aber sicherheitshalber einen kleineren Takt als 250kHz wählen. Beim AVR Studio wären das 125kHz.

Reset disabled

Die meisten AVR bieten die Möglichkeit, den Reset Pin als normalen IO Pin zu verwenden. Hierzu muss die Fuse RSTDISBL programmiert werden. Wurde dies, beabsichtigt oder nicht, getan, ist der AVR weder über ISP noch debugWire zu erreichen. Diese Fuse lässt sich normalerweise nicht über die ISP Schnittstelle programmieren.

Man kann das am einfachsten überprüfen wenn sich noch ein lauffähiges Programm im Controller befindet. Läuft es, wenn man den Reset Pin auf Low zieht, hat man Pech. In diesem Fall hilft nur noch JTAG oder die parallele Programmieren. Dazu benötigt man ein STK500, ein JTAGICE, den AVR Dragon oder etwas ähnliches.

ISP abgeschaltet

Mit der Fuse SPIEN lässt sich die Programmierung über die SPI Schnittstelle deaktivieren. Wurde diese Fuse, beabsichtigt oder unabsichtlich, gelöscht, ist eine Programmierung über ISP nicht mehr möglich. Diese Fuse lässt sich normalerweise nicht über die ISP Schnittstelle programmieren. Der AVR lässt sich nur über JTAG oder parallele Programmierung zurücksetzen.

Kein Takt

Damit der AVR überhaupt arbeiten kann benötigt er einen Takt. Ohne Takt auch kein ISP. Der CPU Takt kann entweder durch den internen RC Oszillator erzeugt werden oder durch eine externe Quelle. Als externe Quellen kommen Quarze, Quarzoszillatoren oder RC Oszillatoren in Frage (siehe AVR Clock Source). Man muss jedoch festlegen um welche Quelle es sich handelt. Dies geschieht mit den CKSEL Fusebits. Sollte hier eine falsche Quelle eingestellt sein erhält der Controller keinen Takt.

Sonderfall CKOPT

Ältere AVR wie der ATmega8 und der ATmega32 haben noch die CKOPT Fuse. Wenn ein externer Quarz mit mehr als 8MHz verwendet wird muss diese Fuse unbedingt programmiert werden. Im unprogrammierten Zustand wird der Oszillator mit geringerer Leistung betrieben was dazu führen kann das die Leistung nicht ausreicht um den Quarz zum schwingen zu bringen. Das gemeine dabei ist, das es durchaus eine ganze Weile funktionieren kann.

ISP Leitungen blockiert

Befindet sich der AVR in einer Schaltung besteht die Möglichkeit, das eine oder mehrere der ISP Leitungen durch einen Teil der Schaltung gestört werden. So kann zum Beispiel ein betätigter Taster eine der Leitungen auf ein festes Potential legen oder eine zu große Kapazität verschleppt das Signal zu stark. Man sollte bereits beim Entwurf der Schaltung Wert darauf legen, das den ISP Pins keine Funktion zukommt, die die Programmierung beeinträchtigen können. LEDs wären zum Beispiel eine gute Möglichkeit.

Fusebits falsch programmiert

CKSEL falsch programmiert

In diesen Fällen hilft es, ein Rechtecksignal mit einer nahezu beliebigen Frequenz (ideal wären 250kHz bis 2MHz) an XTAL1 anzulegen. Als Quelle kann ein Quarzoszillator, ein anderer AVR, eine Schaltung mit NE555 oder jede andere Quelle dienen, die ein entsprechendes Signal liefert. Kürzlich habe ich einen Tiny25 dazu verwendet indem ich die CKOUT Fuse programmiert habe. Der Tiny25 hat dann seinen internen Takt von 1MHz an Pin 3 (PB4) ausgegeben. Wie ich das gemacht habe steht im Forum.

CKOPT falsch programmiert

Wenn bei einem ATmega8, ATmega32 oder vergleichbaren Controller vergessen worden sein, die CKOPT Fuse zu programmieren, hilft es unter Umständen schon, einen kleineren Quarz zu verwenden. Es sollte ein Quarz mit maximal 8MHz sein. Damit dürfte der Oszillator wieder anschwingen.

Diskussion

Geben Sie Ihren Kommentar ein (Wiki-Syntax ist zugelassen):
Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.
/www/htdocs/w00645de/dokuwiki/data/pages/mikrocontroller/avr/troubleshooting.txt · Zuletzt geändert: 2009/01/24 18:38 von burli
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0