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.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
|
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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Quarz |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Folgendes Bild zeigt die Fusebits eines Atmega 8, bei einen extern angeschlossenen Quarz, daran erkennt man das sich ingesamt 5 Bits geändert haben. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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, 1. CKOPT ( wird beim internen Takt nicht verwendet) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Folgende Tabelle zeigt die Takt-Optionen an die beim Atmega 32 im Programm Ponyprg angezeigt und verändert werden können. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. 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. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 , |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||