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.