ein wichtiges, aber auch oft heikles Thema, gerade wenn man nicht weiß was man tut. Darum nehmen wir dieses Thema gleich mal zu Anfang mit dran. Die Fusebits sind eine Art Grundeinstellung des µC, mit denen man bestimmte Funktionen einstellen kann. Heikel daran ist, daß man sich durch falsche Einstellungen "aussperren" kann, d.h. man kann mit dem normalen ISP nicht mehr drauf programmieren und somit auch nicht mehr die Fusebits ändern. Das STK500 bietet zwar noch die Möglichkeit der "High-Voltage"-Programmierung (nachfolgend "HV"-Programmierung" genannt) und hat auch noch 2 Taktquellen drauf, jedoch wenn der µC in der Zielschaltung verlötet ist, kann z.B. "High-Voltage"-Programmierung nicht mehr möglich sein. Hintergrund: während der HV-Programmierung liegen am Reset-Pin 12V an. Kann sein, daß dort angeschlossene Bauteile diese Spannung nicht überleben, oder andere Bauteile leiten die Spannung ab, so daß am µC nicht mehr die vollen 12V ankommen und damit die HV-Programmierung nicht mehr funktioniert. Also gaaaanz wichtig: bevor man an den Fuse-Bits was verstellt, !!!GEHIRN EINSCHALTEN!!!
Wenn man jedoch weiß was man tut, ist´s halb so schlimm.
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
los geht´s... Verbindet euer STK mit dem PC und startet Bascom. Dann gibt´s oben die Schaltfläche "Programm CHIP" und gleich nebendran ist ein kleiner Pfeil. Wenn ihr da drauf drückt, kommt eine kleine Auswahl und dort drückt ihr „manuell Programmieren“. Im folgenden Fenster wechselt ihr auf die dritte Registerkarte „Lock and Fusebits“: Fusebits.png - Bild entfernt (keine Rechte)
Die wählabren Möglichkeiten sind je nach µC verschieden, was jeweils dahinter steckt, steht im Datenblatt. Ich beschreibe mal die Einstellungen in der Reihenfolge, wie im Fenster dargestellt:
Calibraion Bytes: Damit kann man den internen RC-Oscillator kalibrieren. Dieser kann im Auslierferungszustand um ± 10% abweichen. Dort spielen die Temperatur und die Spannung eine große Rolle. Hab ich selbst noch nicht gemacht, wenn´s genau gehen sollte, hab ich mich immer auf einen externen Quarz verlassen.
Lockbit 65 und Lockbit 43 da geht’s darum, ob die Assembler Befehle SPM und LPM tun dürfen. Grob gesagt kann man mit diesen Befehlen den Flash-Speicher zur Laufzeit verändern. Werden wir hier bestimmt nicht brauchen
Lockbit 21: Memory Lock hiermit kann man das Programm vor dem Auslesen schützen, wenn dies nicht erwünscht ist. Drei Sicherheitsstufen sind wählbar: 1. No Memory Lock: Das Programm und der Eeprom-Inhalt könne ohne weiteres ausgelesen werden. Das Programm liegt dann aber im Hex-Format vor. Es gibt zwar Disassembler die aus dem Hex ein Assembler Programm machen. Dies ist dann mit vieeel Mühe und Know-How wieder lesbar. 2. Further programming of the Flash and Eeprom is disabled... Programm und Eeprom-Inhalt sind geschützt. Auch die Fuse- und Lockbits können nicht mehr verändert werden. Verification, also das Vergleichen mit einem Programm auf dem PC soll noch funktionen. 3. Further programming an verification... da ist dann alles gesperrt. Was aber immer noch geht, ist den Speicher auf dem µC zu löschen. Danach hat man einen Jungfräulichen µC im Auslieferungszustand (auch Inhalt Eeprom und Einstellungen der Fuse- und Lockbits sind gelöscht)
Fusebit C und B, Brown-Out-Detection (Abkürzung BOD) Fällt die Versorgungsspannung unter die im Datenblatt angegebene Untergrenze, kann es zu Fehlverhalten des µC kommen. Manch Funktion mag dann streiken, Pins können ein Eigenleben entwickeln. Um diese Unterspannung zu erkennen, wurde der BOD eingebaut. Tritt dieser in Kraft, wird ein Reset ausgelöst, das Programm wird abgebrochen und startet wieder neu. Am Anfang des Programms fragt man dann ab, ob ein Reset für den Start schuld war und kann darauf reagieren. Eingeschaltet wird der BOD im Fusebit B: Enable BOD = Ein im Fusebit C kann man die Spannungsschwelle einstellen
Fusebit KLA987: Auswahl der Taktquelle und Frequenz: der µC braucht einen Taktgenerator, der ihn antreibt. Bildlich kann man es sich wie den Trommler auf einem Ruderboot vorstellen. Jedes mal, wenn die Trommel ertönt, folgt der nächste Ruderschlag. Der µC macht dann halt einen Arbeitsschritt. Grundsätzlich können 3 verschiedene Taktquellen ausgewählt werden: - interner RC-Oscillator mit seinen verschiedenen Frequenzen und Startzeiten - externer RC-Oscillator mit verschiedenen Frequenzbereichen - externer Quarz (=Crystal) mit verschiedenen Frequenzbereichen Ich finde diese Auswahlmöglichkeiten mehr als bescheiden erklärt. Es fehlt die Angabe der Startzeiten völlig. Darum bin ich zum Fuse- und Lockbits setzen auf ein anderes Programm umgestiegen: MyAVR Workpad SE. Ich nutze hier nur die Demo, die nur 15 Minuten am Stück nutzbar ist. Aber diese Zeit ist für meine Zwecke völlig ausreichend.
Fusebit High M: Pin PC6 is Reset Hier kann man Einstellen, daß man den Reset-Pin als normalen Ein/Ausgang nutzen möchte. ACHTUNG: Programmierung über die ISP-Schnittstelle ist dann nicht mehr möglich. Es nutzt dann nur noch die HV-Programmierung
Fusebit High J: WDT enabled by WDTCR der WDT, ausgeschrieben WatchDogTimer, ist der „Wachhund“ eures AVRs. Mit ihm kann man überwachen, ob das Programm in der Ausführung irgendwo hängengeblieben ist, weil es z.B. ewig auf eine Eingabe wartet. Dieses Hilfsmittel werden wir gegen Ende des Kurses mal an einem Beispiel durchkauen.
Fusebit High I: SPI enabled Hiermit kann die SPI-Schnittstelle ausgeschaltet werden. Auch hier gilt: ACHTUNG: Programmierung über die ISP-Schnittstelle ist dann nicht mehr möglich. Es nutzt dann nur noch die HV-Programmierung
Fusebit High H: CKOPT 1 Dies ist ein Bit, daß bei bestimmten Einstellungen der Frequenz und Taktquelle gesetzt werden muß → Datenblatt !!!
Fusebit High G: Erase Eeprom when Chip erase der Eeprom-Inhalt wird beim übertragen eures Programms auf den µC normalerweise gelöscht, außer ich schützt es hiermit: „Preserve Eeprom...“ ist dann die richtige Einstellung
Fusebit High FE und D: Einstellungen für Nutzung Bootloader ein Bootloader ist ein auf dem µC gespeichertes Programm, das es z.B. ermöglicht, ein neues Programm ohne Programmiergerät auf den µC zu übertragen. Dieses kann z.B. über die serielle Schnittstelle übertragen werden. In den Fusebits muß man Einstellen, wie groß der durch den Bootloader belegte Speicherplatz ist und an welchen Speicherort der µC nach einem Reset springen soll.
Das wären erstmal die Fusebits von unserem Mega8. Andere µC haben andere Möglichkeiten und Funktionen, die in den Fusebits eingestellt werden können. Ich möchte hier nur noch kurz auf die JTAG-Schnittstelle eingehen. JTAG ist eine Schnittstelle mit der man den µC während der Laufzeit debuggen kann. Sie ist meist in den Grundeinstellungen aktiv, bestimmte Pins funktionieren dann nicht wie gewohnt, z.B. beim Atmega16 auf dem PortC. Wer es also nicht nutzt, muß es deaktivieren.
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
auf der rechten Seite findet man noch paar Schaltflächen:
Refresh liest die Fuse- und Lockbits nochmals aus dem µC aus. Nicht übertragene Änderungen werden verworfen
4 Write Buttons damit kann man einzelne Teile der Fusebits übertragen
Write PRG damit werden die gerade eingestellten Fusebits im Programm abgespeichert. Es wird dazu am Ende des Programms eine Zeile eingefügt.
Oben in den Symbolleisten sind diverse Befehle, z.B. - Write Buffer to Chip: die Fusebits werden zum µC übertragen - Read Code into Buffer: liest die Fusebits aus dem µC
Bitte laßt euch von den vielen neuen Begriffen nicht abschrecken. Ich habe die meisten nur angeschnitten, um euch nicht gleich zu überrumpeln. Aber ich möchte auch nichts verschweigen. Ihr habt jetzt zumindest mal was davon gehört, falls ihr mal eine der Funktionen braucht, hilft das Datenblatt und ganz häufig diverse Internet-Foren und Artikel.
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
im Anhang 3 Bilder vom MyAVR Workpad SE, das ich zum Fusebits-Setzen verwende. Dort ist es besser gelöst, viel übersichtlicher. Die Einstellungen sind dort auf 3 "Registerkarten" verteilt.
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
Angefügte Bilder:
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden! workpad1.png workpad2.png workpad3.png
wer es dann mal geschafft hat, in den Fusebits eine andere Taktquelle auszuwählen, der muß auf dem STK auch die passende Taktquelle verwenden. Dazu sind auf dem STK zwei Jumper, die richtig gesteckt werden müssen: "OSCEL" und "XTAL1". Hier ein Bild aus dem "AVR Tools User Guide" aus der Hilfe vom AVR-Studio: STK500_Takt.png - Bild entfernt (keine Rechte) Damit kann man 3 Möglichkeiten für die Taktquelle wählen: 1. bei Verwendung des internen RC-Oscillators öffnet ihr den Jumper XTAL1 und trennt damit die externe Taktquelle. Den entsprechenden Pin kann man dann für was anderes verwenden. 2. Bei Verwendung des externen Quarzes muß XTAL1 gesteckt werden und mit dem Jumper OSCEL die Verbindung 2-3 hergestellt werden. 3. Man verwendet den Taktgenerator vom STK500, dessen Geschwindigkeit über das AVR-Studio einzustellen ist. Hierfür muß OSCEL auf 1-2 gesteckt und XTAL1 ebenfalls gesteckt sein
So weit sollte für´s erste mal alles zum Thema geschrieben sein. Fragen?
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
Nö, meinerseits erstmal keine Fragen. Ich wollte nur ein Lob loswerden: Du machst das echt klasse mit dem Kurs. Was Du da für Arbeit reinsteckst. Respekt! Gerade die Fuses werden ja oft stiefmütterlich behandelt. Dabei sind die doch so wichtig!
Kleiner Tip am Rande: Das speichern der Fuses im Programm halte ich für nicht empfehlenswert. Man schreibt das einmal rein. 'Nen Jahr später holt man den Code wieder raus, ändert ihn und will ihn brennen. Natürlich schön die Fuses angepasst, weil man jetzt z.B. mit internem Takt arbeiten will. Und... nix geht mehr, da die im Code gespeicherten Fuses die händisch eingestellten überschreiben und man natürlich vergessen hat die alten zu löschen und nochmal PRG zu drücken. Da hilft dann nur eine externe Taktquelle anzuschließen oder HV-Programmierung, die ja, wie Gerhard schon geschrieben hat, nicht immer möglich ist.
Das ganze ist mir schon mehrfach passiert (bis ich überhaupt kapiert hatte wie der Hase läuft). Zum Glück hatte ich noch einen Keramikoszillator um den Chips wieder leben einzuhauchen.
Zitat von xenton im Beitrag #7Ich wollte nur ein Lob loswerden: Du machst das echt klasse mit dem Kurs. Was Du da für Arbeit reinsteckst. Respekt!
Naja, ich versuch da nur den Spagat zu schaffen, einerseits möglichst viele Dinge zu vermitteln um nicht halbe Sache zu machen und andererseits den Neueinsteiger nicht gleich mit den vielen neuen Begriffen zu überfordern. Ich beschränke mich meist eh nur auf das Wichtigste. Wirklich jedes Thema können wir hier eh nicht ausführlich behandeln, aber zumindest sollte man schon mal was davon gehört haben. Weitere Infos findet der Neugierige zu Hauf im Web. Aaaaber, wir sind ja erst am Anfang...
Zitat von xenton im Beitrag #7Das ganze ist mir schon mehrfach passiert (bis ich überhaupt kapiert hatte wie der Hase läuft). Zum Glück hatte ich noch einen Keramikoszillator um den Chips wieder leben einzuhauchen.
Willkommen im Club :-)
Gruß Gerhard
------------------------------------------------------------------------------------------- hier mein aktueller TinyKatalog
ich werde wohl erst am Wochenende wieder dazu kommen mich mit dem Programmieren zu befassen. Aber schon einmal vielen Dank für die umfangreichen Informationen zu diesem Thema.
Zitat von diezel im Beitrag #11macht sonst keiner mit?
Gruß Gerhard
Hallo Gerhard, doch, doch... hatte jetzt nur ein wenig andere Sachen um die Ohren. Die Erklärung der Fuse Bits finde ich sehr gut. Auch von mir ein Lob für Deine Arbeit.
@Tüftler_Senior welche Bascom Version hast Du? Ich hab zwei unterschiedliche Versionen und wenn ich bei beiden die Einstellungen gleich mache, hab ich bei der einen Version nur ein schwarzes DOS Fenster welches kurz auf geht und bei der anderen Version geht das Fenster, welches von Gerhard beschrieben wurde, auf. Gruß Ingo