erstellt  21.11.2011
Taktfrequenz und Fusebit
Grundsätzlich läuft ein Atmega Prozessor im neuen Zustand mit dem internen RC Oszillator dessen Frequenz sich auf ca. 1 MHz beläuft.
Da die Frequenz für einige Anwendungen nicht genau genug ,oder zu niedrig ist, kann die Standard Frequenz durch einen extern angeschlossenen Quarz
in Höhe und Genauigkeit angepasst werden.

Nehmen wir als erstes einmal an, das wir die Standard Frequenz von 1 Mega Herz zur Verfügung haben.
Wie kann man nun feststellen ob es wirklich 1 MHz ist ?
Im einfachsten Fall erzeugen wir eine Programmschleife in der nur eine Led an und wieder ausgeschaltet wird.
Um eine Programmzeile ab zu arbeiten werden immer je zwei Takte benötigt, in unserem Fall also 6 Takte für insgesamt 3 Programmzeilen.
Messe ich nun mit einem Oszilloskop die Frequenz an der Led, komme ich auf ca. 167,8 KHz.
Wenn ich diesen gemessenen Wert nun mal nehme mit der Anzahl der benötigten Takte komme ich auf einer Oszillator Frequenz von 1,006800 MHz.
 
Programmzeile
Anzahl der Takte
do

portb1=1
2 Takte
portb.1=0
2 Takte
loop 2 Takte




Um nun beispielsweise die Frequenz des Internen RC Oszillator zu erhöhen müssen die sogenannten Fusebits angepaßt werden,
dies kann man mit diversen Tools,in meinen Fall mit dem Programmiertool MYAVR  machen.
Zuerst werden einmal die Standardeinstellungen ausgelesen:(Alte FuseBit)
Die markierte Stelle zeigt das die Default ( Standard) Einstellung bei 1 MHz liegt, außerdem werden noch andere
Werte angezeigt die das Startverhalten beeinflussen, so die Start-Up time, was etwas mit dem Einschwingverhalten
beim Einschalten der Schaltung zu tun hat was ich aber hier nicht weiter erläutern möchte.
Um beispielsweise die Oszillator Frequenz auf 2 MHz zu erhöhen, wählen wir die passenden Zeile aus und aktivieren diese,
um dann anschließend diese neue Einstellung im Atmega ab zu speichern.

Alte FuseBit Einstellung
Neue FuseBit Einstellung

Starten wir nun den Atmega neu und messen abermals die Frequenz an der angeschlossenen Led, so messen wir
ca. 330,595 Khz, die wir wieder mit den benötigten Taktzyklen, sechs an der Zahl multiplizieren.
So weil kommen wir auf einer Frequenz von 1,983570 MHz.
Wir erkennen  also das diese Frequenz nicht sehr genau ist .
Bei vielen Anwendungen mag es aber eine nicht so bedeutende Rolle spielen so das die Lösung für viele Anwendungen akzeptable ist.

Allerdings ist die Frequenz von großer Bedeutung wenn Daten über die UART ( Serielle Schnittstelle) Schnittstelle versendet oder empfangen werden sollen.
Diese Schnittstelle ist eine sogenannte asynchrone Schnittstelle, was bedeutet das die Daten beim Übertragen nicht mittels eines Synchronisierungs Signal übertragen wird.
Dadurch wird eine Synchronisierungsleitung eingespart, und die Schnittstelle benötigt nur noch 3 Leitungen.
Eine Sende, eine Empfangsleitung und eine Masseleitung.
Eine fehlerfreie Übertragung setzt dann aber voraus das Sender und Empänger eine nahezu identische Geschwindigkeit nutzen.
Diese Geschwindigkeit ist in der Hauptsache abhängig vom Systemtakt und von der Länge des Datenworts.

Die Daten sollen mit der gebräuchlichen Bezeichnung von 8N1( 8 Datenbits + 1 Stop Bit) übertragen werden.
Aus der Bezeichnung ist aber nicht ersichtlich das für 8 Datenbits auch noch ein Startbit hinzukommt
Diese kompletten Daten   ( 1 Start, 8 Datenbits , 1 Stopbit )nennt man auch Frame.
Somit besteht ein Farme aus 10 Bit.
Und je nach Übetragungsprotokoll kommen noch weiter Daten hinzu, z.B Cheksummen, oder Fehlerkorekturen usw.
Um also Daten mit 9600 Baud zu übetrragen wird eine Spezielle Oszillator Frequenz bevorzugt um die Fehler bei der Übetragung gering zu halten.
In der Regel sind das aber keine gerade Frequenzen wie sie mit dem internen RC Glied des Atmegas eingestellt werden können.
Es biete sich also an einen externen Quarz an zu schließen weil es diese Quarze auch mit ungeraden Frequenzen gibt, die für eine Serielle Datenübetragen angepasst sind.
Für eine Übertragung mit 9600 Baud bieten sich folgende Quarze an:
Quarzfrequenz
Fehlerquote %
2,4576
0
3,6864
0
4,433619
0
7,3728
0
8,0000
0,2
9,216
0














8N1 sind 9 Bit







Die hier veröffentlichen Informationen betreffen den Atmega 32 sind bis auf wenige Einschränkungen auch auf Atmega 8 und Atmega 16 Mikroprozessoren anzuwenden.
Der Atmega erzeugt standardmäßig intern  eine Frequenz von 8 MHz die aber durch Teiler auf 1 MHz heruntergeteilt werden, und dann als Systemtakt dienen.
Damit der Atmega nicht nur im Standard Modus mit der ihm vorgegeben Taktfrequenz von 1 MHz arbeitet , was in den allermeisten Fällen aber durchaus ausreichend sein wird,
haben wir die Möglichkeit das Teilerverhältnis zu verändern und so die Taktfrequenz in vorgegebenen Grenzen anzupassen.
Mögliche Frequenzen sind noch 2 MHz - 4 MHz- und 8MHz.
Die interne Frequenz wird über ein RC Glied hergestellt, womit die Genauigkeit und der Gleichlauf der Frequenz bestimmte Grenzen gesetzt werden.
Wenn wir eine höhere Genauigkeit erreichen wollen , sind wir besser bedient einen externen Quarz als Frequenz bestimmendes Glied zu benutzen.
Es könnte beispielsweise von Relevanz sein wenn wir eine Uhr Programmieren oder andere Zeitkritischen Aufgaben erledigen wollen.
Also schließen wir einen externen Quarz zwischen beim Atmega 32 Pin 12 und Pin 13 an und  , beim Atmega 8 Pin 9 und Pin 10 und legen beide Seiten des Quarzes mit einen Kondensator von 22 pf
nach Masse ,dabei sollten die  Kondensatoren möglich gleich sein.
Die Kapazität darf laut Datenblatt zwischen 12 und 22 pf liegen.
Der Quarz hat zu einem den Vorteil dass der Atmega mit einer höheren Taktfrequenz  bis zu 16 MHz je nach verwendeten Quarz arbeitet und zum anderen mit einer erheblich höheren Genauigkeit
taktet, allerdings haben wir den Nachteil das mit ansteigender Geschwindigkeit auch die Stromaufnahme des Atmega zunimmt.
Wenn also ein Gerät auf Batteriebetrieb laufen sollte, und es nicht auf Geschwindigkeit ankommt, sollte man mit der Standard Frequenz von 1 MHz arbeiten.

Quarz


rr
Zu sehen ein zusätzlich eingesetzter Quarz und 2 Kondensatoren die sich hinter dem Quarz verbergen.
Angeschlossen über zwei Jumper zum besseren Experimentieren, somit kann ohne großen Aufwand wieder auf die Interne Taktquelle zurück gegriffen werden.
Kompletter Plan mit zusätzlichen Quarz am Beispiel Atmega 32
Fusebit
Der Atmega  verfügt über so genannte Fusebits, die für die Chipeinstellungen zuständig sind, und Lockbits mit denen man zum Beispiel ein weiteres Programmieren des Chips verhindern kann.
Hier soll nun näher auf die Funktion dieser Bits und deren Handhabung eingegangen werden, da unbedachte Veränderungen der Fuses und Locks unerwünschte Auswirkungen haben können
und im schlimmsten Fall der Atmega  danach nicht mehr ansteuerbar
ist sollte man vorsichtig mit dieser Einstellung umgehen.
Mit den Fusebits teile ich dem Atmega unter anderen mit das er mit einen externen Quarz arbeiten soll.

Zuerst sollte man erst einmal die Fuse-Bits auslesen um bei einen evtl später auftretenden Problem wieder die ursprünglichen Werte einstellen zu können.
Um die Fusebits auszulesen starten wir beispielsweise das Programm Ponyprg um dann unter dem Menübefehl " Befehl / Security and Configuration Bits.
die bestehenden Fusebiteinstellungen auszulesen, indem wir auf dem " Read" Button klicken.

Hier werden die Fusebits beispielsweise bei einen Fabrikneuen  Atmega 8 angezeigt. Das Bild rechts zeigt also den Originalen Standard Zustand der Fusebit's beim Atmega 8 an.
ik
Folgendes Bild zeigt die Fusebits eines Atmega 8, bei einen extern
angeschlossenen Quarz, daran erkennt man das sich ingesamt 5 Bits geändert haben.
Fusebits 8 MHZ
Im Register „Lock and Fuse Bits“ im Programm Ponyprg als "Security Bits" bezeichnet können grundsätzliche Einstellungen des Prozessors vorgenommen werden, z. B. die Festlegung
der Taktfrequenz (bis 8 MHz reicht der interne Oszillator).
Die Parameter werden aktuell aus dem angeschlossenen Prozessor gelesen und können dann verändert werden; sie haben also keinerlei Zusammenhang mit dem geschriebenen Programm und werden auch nicht mit dem Code
gespeichert.
Diese Bits dienen zur Manipulation der Chip-Einstellungen.
Man sollte sie nur anfassen, wenn man wirklich weiß, was man tut, da das Verändern dieser Bits leicht dazu führen kann dass man sich aus dem Chip aussperrt.
Fusebits sind Konfigurationsbits des Chips, die bei der Auslieferung teilweise schon gesetzt sind.
Hier lässt sich zum Beispiel die externe Taktfrequenz einstellen. Lockbits werden gesetzt, wenn die Software fehlerfrei funktioniert und der Mikrochip, für welche Aufgabe auch immer,
freigegeben wird.
Es ist dann möglich, die Lockbits so zu setzen, dass niemand mehr auf den Code zugreifen kann.
Es ist darauf zu achten, dass aktivierte Fusebits im Programm Ponyprg den Wert 0 haben, und deaktivierte den Wert 1 allerdings nur wenn man mit dem Programm "Ponyprg" arbeitet,
bei anderen Programmen ist es teilweise umgekehrt.
Folgende Bedeutungen haben die einzelnen Fusebits:
BODLEVELM auslösendes Spannungslevel für den Brown-Out
BLB02-BLB01 Boot0 Lockbit Mode Diese Bits betreffen den Zugriff über die Assemblerbefehle
BLB12-BLB11 Boot1 Lockbit Mode Diese Bits betreffen den Zugriff über die Assemblerbefehle
BODEN Brown-Out ist aktiviert In der Voreinstellung ist dieses Fusebit nicht gesetzt Das Bit sollte aktiviert werden, wenn das interne EEPROM verwendet wird, da dieses ohne Brown-Out bei starken Spannungsschwankungen unter Umständen gelöscht werden kann
SUT1 und SUT0 Vorlaufzeit des Mikroprozessors In der Voreinstellung ist SUT1 nicht gesetzt und SUT0 gesetzt, wodurch eine maximale Vorlaufzeit
von 65ms gewährleistet ist.
CKSEL0 bis CKSEL3 Clock Select Über diese 4 Fusebits wird die Taktquelle bestimmt.
BOOTRST
Auswahl des Resetvektors
In der Voreinstellung ist dieses Fusebit nicht gesetzt. Führt man am Chip einen Reset durch, dann liegt die Wiedereinsprungadresse normalerweise bei 0x00. Wird dieses Fusebit gesetzt, dann startet die Ausführung nicht an dieser Adresse sondern im Bootloader-Bereich
LB2-LB1

Lockbit Mode
Wird LB2 gesetzt (0), dann ist es nicht mehr möglich den Chip zu programmieren.
Werden beide Bits gesetzt, dann kann auf den Mikrocontroller nicht mehr schreibend zugegriffen

BOOTSZ1 und BOOTSZ0 Größe des Bootloader-BereichsDie Größe des Bootloaderbereichs liegt zwischen 128 und 1024 Words und kann über diese beiden Fusebits festgelegt werden. Da in der Voreinstellung diese beiden Bits gesetzt sind, liegt die Größe des Bootloaderbereichs bei 1024 Words.
EESAVE EEPROM wird beim Chip-Erase nicht beeinflusst In der Voreinstellung ist dieses Fusebit nicht gesetzt. Das heißt, dass bei jedem Chip-Erase (löschen) das EEPROM auch mit gelöscht wird. Hat man Daten darin gespeichert, die auch über einen Chip-Erase hinweg erhalten werden sollen, oder greift man gar nicht auf das EEPROM zu, sollte dieses Bit gesetzt ("0") werden.
OCDEN On Chip Debugging aktivieren
In der Voreinstellung ist dieses Fusebit nicht gesetzt, also 1. Es muss aktiviert werden, wenn über
die JTAG Schnittstelle debugged werden soll.
JTAGEN JTAG aktiviert In der Voreinstellung ist dieses Fusebit gesetzt, also 0.
Die JTAG-Schnittstelle belegt 4 Bits des Mikrocontrollers (Atmega 16) (TDI/PC5, TDO/PC4, TMS/PC3,
TCK/PC2). Benötigt man keine JTAG-Schnittstelle, da man zum Beispiel den Mikrocontroller nicht
debuggen will, deaktiviert man JTAGEN und hat dann am Chip 4 zusätzliche I/O-Pins zur Verfügung.
SPIEN Programmierung über SPI aktiviert
In der Voreinstellung ist dieses Fusebit gesetzt
Wird dieses Fusebit auf 1 gesetzt (deaktiviert) dann lässt sich der Chip nicht mehr über den ISP
programmieren sondern nur noch über einen Adapter der den Mikrocontroller nicht seriell sondern
parallel programmiert (z.B. ATMEL STK500).
Dieses Bit kann unter AVR Studio nicht verändert werden, wenn man den Chip seriell mit einem ISP
programmiert.
CKOPT Verstärkung der Oszillator-Frequenz
Wird der Quarz nicht direkt neben dem μC platziert sondern etwas weiter entfernt, dann kann es
sein, dass das Signal der Frequenz zu schwach am Chip ankommt. Tritt dieser Fall auf, kann man
das Signal über dieses Fusebit verstärken, wodurch allerdings der Stromverbrauch erhöht wird.
Fusebit beim Atmega 32

Laut Datenblatt kann der Atmega 32 einen Externen Quarz bis zu einer Taktfrequenz von 16 Mhz verkraften , hier wurde ein 12 Mhz Quarz eingesetz weil der gerade verfügbar war.
Um den neuen Quarz auch zu benutzen muss er erst einmal aktiviert werden . Dies geschieht indem wir im Programm Ponyprg unter dem Menübefehl " Befehl / Security and Configuration Bits.

Erst einmal die bestehenden Fusebiteinstellungen auslesen, indem wir auf dem " Read" Button klicken
Anschließend können wir bestimmte Einstellungen ändern und dann mit dem
"Write" Button wieder abspeichern.
555

Folgende Optionen sind für die Art des Taktes ( interner oder externer usw )und der damit verbundenen Möglichkeiten relevant und im Augenblick von Interesse,
und auch nur diese sollten zum jetzigen Zeitpunkt gegebenenfalls verändert werden .
Achtung : Hie sollte man genau wissen was man macht, sonst kann es sein das man sich selber aus dem Mikroprozessor aussperrt. Und Keinen Zugang mehr zu ihm hat.

1. CKOPT (  wird beim internen Takt nicht verwendet)
2. CKSEL3
3. CKSEL2
4. CKSEL1
5. CKSEL0

Folgende Tabelle zeigt die Takt-Optionen an die beim Atmega 32 im Programm Ponyprg angezeigt und verändert werden können.
Wie im oberen Bild ( Configuration and Security bits) dargestellt kann man die Werte aus der Tabelle unterhalb entnehmen und sie eintragen ,
und durch anschließendes (Write) neu im Atmega 32 brennen.
Die in der Tabelle dargestellten X entsprechen einen Haken in der Configuration.
Die neu gebrannten Optionen werden allerdings erst nach einem Reset bzw Aus und wieder Einschalten des Atmega aktiv.
Der Kalibrierte interne RC-Oscillator hat fest eingestellte Taktfrequenzen die über folgende Optionen eingestellt werden können .
Die Frequenzangaben beruhen auf einer Betriebsspannung von 5 Volt und einer Temperatur von 25° und haben eine Genauigkeit von plus-minus 3 %

Option
CKOPT CKSEL3 CKSEL2 CKSEL1 CKSEL0
           
           
1 Mhz interner RC Oscillator ( Standard bei Fabrikauslieferung)   X X X  
2 Mhz interer RC Oscillator   X X   X
4 Mhz interner RC Oscillator   X X    
8 Mhz interner RC Sozialster   X   X X
Externer Quarz 0,4 bis 0,9 Mhz     X    
Externer Quarz 0,9 bis 3 Mhz       X  
Externer Quarz 3 bis 8 Mhz          
           
Fusebiteinstellung bei Verwendung eines Externen Quarz von 8 MHz beim Atmega 8

Die rechts dargestellten Einstellungen führen dazu, dass ein Quarz von 8 MHz angeschlossen sein muss, weil der interne Takt abgeschaltet wird.
Sollte aber kein Quarz angeschlossen sein , verweigert derAtmega nach dem Brennen seine Dienste, weil er ohne Takt nicht mehr leben kann.

88
Ausgesperrt ?

Aber aufgepasst, hier sollte man genau wissen was zu tuen ist, denn bei einer falschen Einstellung kann man sich selber aussperren, so das der Atmega so ohne weiters nicht mehr zu Programmieren ist.
Wenn man in den Einstellungen für die Taktrate etwa den falschen Takt angibt, hat man möglicherweise keinen Zugriff mehr , weil der Takt des Prozessors nicht mehr vorhanden ist.

Man hat allerdings noch die Möglichkeit durch einen von außen angelegten Takt wieder Zugriff auf den Atmega 32 ( gilt auch für alle anderen Atmega's) zu bekommen.
Dazu muss man allerdings den schon angeschlossenen Quarz entfernen und dann ein externen Takt erzeugen und an Pin 13 und Masse anlegen.
Aber Achtung die Spannung des Taktes darf die der Prozessor Betriebsspannung nicht übersteigen.

Ich habe hier einen Taktgenerator verwendet der einen 8 Volt Ausgang besitzt. Durch die Wiederstand / Zenerdiode Kombination werden die 8 Volt auf 5,1 Volt begrenzt,
 damit war ich in der lage wieder Zugriff auf den Atmega 32 zu gelangen, und auch wieder die Fusebits einstellen zu können.
Die Höhe des Taktes sollte bei einem Versuch selber herausgefunden werden, ich habe es einmal mit 200 KHz , aber auch auch einmal mit 270 KHz erfolgreich ändern können.
Bei einem Atmega 8 hab ich das gleiche gemacht indem ich einen Taktgenerator TTL Ausgang , also max. 5 Volt mit 276 KHz mit Plus auf Pin 9 und Minus auf Pin 10 gelegt habe
Fabrik neue Atmegas können auf jeden Fall ohne Quarz betrieben werden
Wie die geänderte Taktfrequenz feststellen ?
Eine Möglichkeit die geänderte Taktfrequenz festzustellen besteht darin, einer der Ausgänge mit einer Led zu bestücken und diese dann blinken zu lassen.
Nach ändern der Taktfrequenz durch einen Quarz oder durch den internen Takt , und anschließender Änderung der Fusebit's, kann ich anhand der sich jetzt schneller oder
verlangsamender blinkenden Led festellen das sich in der Geschwindigkeit etwas geändert hat.
Diese Änderung wird man aber nicht mehr erkennen können wenn wir die Anweisung $chrystal  im Bascom Programm der neuen Quarzfrequenz angepasst haben.
Wenn der Quarz abgeklemmt wird ?
Achtung wenn der Mikroprozessor mit einem Quarz läuft , und dieser Quarz plötzlich abklemmt wird , läuft der Mikroprozessor nicht mehr, man sollte darauf achten bevor man den Quarz ab klemmt ,
das man die Fusebit Einstellungen noch ändert bevor man den Quarz abgeklemmt. Sonst hat man keinen Zugang mehr zum Prozessor.
RS232 und Quarzfrequenz

Die Übetragungsgeschwindigkeit über die RS232 Schnittstelle ist abhängig von der Tacktfrequenz, also nicht vergessen , wenn die Taktfrequenz geändert wird muss auch zwangsläufig die Baudrate ,
also die Übertragungsgeschwindigkeit der RS232 Schnittstelle angepasst werden.
Dies muss man nicht unbedingt berechnen können, es reicht wenn man einige Baudrate einfach ausprobiert.
Bei einem 8 Mhz Quarz funktioniert z.B. die Baudrate von 9600, und bei einer 1 Mhz Frequenz z.b. 2400.

In der unten stehenden Tabelle sehen wir bei welcher Taktfrequenz die möglichen Baudraten für einen Fehler in Prozent aufweisen.




Aktualisiert 19.12.2020