Fuses im ATtiny2313 

aber allgemein gültig für AVR

von Rudolf Drabek
Elektronik-Labor   Projekte   AVR 

 


Jetzt hat es mich auch erwischt! Nachdem ich schon mehrere Jahre mit AVR uC’s Projekte realisiere vom RC5-Übersetzer über LC-Meter, Frequenzzähler bis 120 MHz und den DDS-Generator, habe ich mich zum ersten mal mit den Fuses vertan und der t2313 rührte sich nicht mehr. Natürlich nimmt man an alles richtig gemacht zu haben und eine Minute später rührte sich der nächste t2313 nicht mehr.

 

Guter Rat ist ja nicht teuer. Es gibt ja genug Info wie man dieses Problem wieder löst und ich hatte genug Material zu Hause um in 25 Minuten beide t2313 wieder aus dem Koma zu holen.

 

Es muss aber nicht immer so einfach sein, wie in meinem Fall, wo ich 0 mit 1 verwechselt habe in dem Sinn, dass speziell bei den AVR Fuses gilt:

 

                        0 = programmiert und hat im Feld des Programmtools ein Häkchen.

 

                        1 = nicht programmiert, kein Häkchen, nicht in Funktion

 

Bei mir habe ich die CKSEL 3:0 Fuses auf 0 statt auf 1 gesetzt. Der Quarzoszillator war abgeschaltet und mit dieser Einstellung wartet der t2313 auf einen externen Takt.

Den hat er mit Bauteilen aus der Schatzkiste wieder bekommen:

           

1.      Ein Quarzoszillator um 20 ct mit 16 MHz und

2.      Ein Bandkabel von einer defekten PC-Karte.

 

Als Programmierumgebung verwende ich das Pollin Board, wo ich einen Steckplatz für das Bandkabel verwendete. Siehe folgende Bilder:

 

Der Quarzoszillator mit dem Bandkabel und etwas Heißkleber

 

 

 

            Anwendung im Programmiertool. Der Takt vom Quarzoszillator geht zum

Pin Xtal1 des t2313 Steckplatzes. Mit Ponyprog die Fuses richtig stellen und

der t2313 ist aus dem Koma erwacht.

 

 

Das war mehr oder weniger die Einleitung zu den Fuses. AVR hat ja mehrere Möglichkeiten zur Programmierung ihrer Produkte vorgesehen. Es wäre günstig sich die Dokumentation von AVR zu holen unter: http://atmel.com/dyn/products/datasheets.asp?family_id=607 und "tinyAVR" zu klicken. Dort finden sie die Dokumentation zum t2313, eine Datei mit 226 Seiten, updated August 2010. Etwas Englisch ist im uC Bereich Voraussetzung.

 

 

 

Ehe man ein Programm, ob in Assembler, GCC oder Bascom erstellt, muss man sich ja Gedanken machen welche Geschwindigkeit ich für die Ausführung brauche, also welche Taktfrequenz soll vorgesehen werden. Soll also das CKDIV8 Bit, Defaultwert 0 = aktiv so bleiben oder will ich 8x schnelleren Takt haben, d.h. das CKDIV8 Bit ohne Häkchen verwenden.

 

Genügt der interne RC Oszillator, oder soll es ein Quarz für höhere Genauigkeit sein?

( Seite 160 Tabelle 68). Trotzdem bitte um höchste Aufmerksamkeit!

 

Welche Setupzeit soll verwendet werden, d.h. es geht um die Frage wie lange die Betriebsspannung braucht um den Betriebswert zu erreichen. Das sind im Prinzip die wesentlichen Fragen zu den Fuse Bits.

 

1.     Serial Downloading ( Seite 172 )

 

Vorausetzung dafür ist ein programmiertes SPIEN Fuse Bit. (Seite 159 Tabelle 67)

 

 

Dann kann man das übliche Programmierverfahren über MOSI, MISO und SCK angewendet werden. Ich verwende dazu als Entwicklungsumgebung für die Programme AVR 4.16, die kostenlos von Atmel verfügbar ist, das Pollinboard als Hardwareplattform und Ponyprog um die HEX-File in den uC zu bringen.

 

Falls das SPIEN Bit aus irgend einem Grund umgefallen ist, so versagt das Serial Verfahren völlig, da ja die Voraussetzung für das Funktionieren nicht mehr gegeben ist.

Darum kann man, mit Programmen die dieses Verfahren benützen, das

SPIEN Fuse-Bit gar nicht verändern, um sich nicht irrtümlich selbst auszusperren. Leider ist in verschiedenen Foren zu lesen, dass dies doch öfter passiert, aber immer durch irgendeine Unzulänglichkeit. Viele schimpfen dann etwa auf Ponyprog. Zu haben von:  http://www.lancos.com/prog.html

 

 Das ist in etwa so zu verstehen wie Münchhausen, der sich am Zopf selbst aus dem Sumpf zieht. Kein Zopf, der uC bleibt im Koma!

Aber noch ist nichts verloren. Es gibt ja noch die Möglichkeit des Parallel Programming.

 

Übrigens: Sind sie bitte vorsichtig mit dem RSTDISBL Bit. Reset ist ja nötig für serielle Programmierung. Auch hier hilft nur Parallel Programming.

Vorher noch kurz zu den Lock Bits ( Seite 158 Table 64. Lock Bits)

 

 

Software ist ja für Viele die Quelle ihres Einkommens. Programme, also Software ist wertvoll. So wie es bei Büchern und Musik das Copyright diese Angelegenheit rechtlich regelt ist es bei Software noch nicht so eindeutig und Atmel hat mit den Lock Bits eine Möglichkeit vorgesehen sich gegen „Gedankendiebstahl“ zu schützen.

Sind diese Fuse Bits gesetzt, so ist es nicht möglich die Software aus dem uC herauszubekommen, mit Riesenaufwand aber doch, wie z.B. das „die“ freisetzen und die Mikro Verdrahtung am Chip zu verändern.

Hat man einen solchen uC und will ihn für eigene Zwecke verwenden, so ist dies durch das Kommando „Chiperase“ im Rahmen des verwendeten Programmiertools möglich.

Ist das Kommando ausgeführt, z.B. im Serial Modus, fass SPIEN aktiv ist, so hat man dann einen leeren uC, der wie jeder andere neu programmiert werden kann.

 

2.     Parallel Programmimg ( Seite 161 )

 

Es wird oft auch als HV-Programming bezeichnet mit HV = High Voltage, da am Reset Pin des uC 12 Volt angelegt werden müssen. Professionelle Lösungen gibt es natürlich auch von Atmel.

 

Auch hier gibt es aber billige Lösungen, die im Internet zu finden sind.

Es gibt die Hardware und Software dazu. Ich habe diese Möglichkeit noch nicht gebraucht. Siehe folgende kurze Info:

 

http://elm-chan.org/works/avrx/avrxp8.png

HV Parallel Programming

Für den Fall, dass die Lock Bits aktiviert sind und SPIEN deaktiviert ist.

Durch das Chiperase Kommando werden die Lock Bits deaktiviert.

Das SPIEN Bit kann im ISP Programmiermode nicht auf "1" = nicht programmiert gesetzt werden.

Es würde ja die weitere serielle Programmierung verhindern.

Falls es passiert, durch ???, hilft nur noch "Parallel Programming"

http://www.b-redemann.de/hvprog1.shtml Software zur HV-Programmierung

http://www.mikrocontroller.net/topic/112219 Ein Thread über ATmega8 Wiederbelebung

http://www.gtkdb.de/index_18_1044.html mit info wie:

Durch das SPIEN Fuse-Bit kann die ISP-Schnittstelle deaktiviert werden.

Dieses Fuse-Bit kann nur über die parallele Programmierung reaktiviert werden.

 

 

 

3.     Self Programming  ( Seite 153 )

 

Hier hat Atmel eine Möglichkeit der Programmierung vorgesehen, die das

SELFPRGEN Fuse Bit voraussetzt. ( Seite 159 Tabelle 66).

 

Diese Art den Flashspeicher zu laden wird von proprietären Programmen gerne benützt, weil Fuses nur gelesen werden können ( Seite 156 ).

Das ist also eine sichere Methode um speziell Einsteigern Verzweiflung zu ersparen.

Im Franzis Lernpaket Mikrocontroller wird dies u.a. benützt.

Mit einem ISP Programm in diesem Lernpaket ist es übrigens nur möglich die Taktfrequenz via Fuses zu ändern und sonst nichts um Anfänger nicht zu überfordern.

 

Ich habe übrigens auch mit diesem Lernpaket begonnen uC’s zu verwenden, obwohl in meiner Berufszeit in meiner Abteilung eine Menge Leute mit der Programmierung von uC’s beschäftigt waren. Damals gab es noch keine Flashspeicher und öfters kam es vor, dass knapp vor Produktionsbeginn eine neue Software, weil man einen Bug entdeckte, notwendig wurde. Heutzutage ist dies ein Kinderspiel. In einer Minute ist die neue Software bereit zum Test und kann kurzfristig eingesetzt werden.

 

Immer wieder wird in der ATMEL Dokumentation auf die Polarität der Fuses hingewiesen, dass „1“ nicht aktiv also nicht programmiert bedeutet.

Ich hoffe damit eine kurze Einführung gegeben zu haben und unbegründete Ängste zum Verschwinden gebracht zu haben.

 

Siehe auch:  AVR Fuse Calculator www.engbedded.com/fusecalc


Elektronik-Labor   Projekte   AVR