Die Wahl des richtigen Quarzes hängt von verschiedenen Faktoren ab. Die wichtigsten Entscheidungskriterien sind Versorgungsspannung, Stromverbrauch, benötigte Rechenleistung und Genauigkeit für verschiedene Anwendungen.
Der maximal mögliche Takt ist abhängig von der Versorgungsspannung. Ein ATmega8 sollte bei 2,7V nur mit maximal 8MHz arbeiten. Übertaktet man den Controller, kann es zu Fehlfunktionen kommen. Insbesondere beim Programmieren des Flash Speichers oder des Eeproms kann es zu Fehlern kommen. Die maximale angegebene Frequenz ist erst ab einer Spannung von 4,5V zulässig.
Die Xmega arbeiten ab einer Spannung von 1,8V. Auch hier gilt, dass die maximale zulässige Frequenz auf ca 12MHz reduziert ist. Erst ab etwa 3V sollte man einen Xmega mit den maximalen 32MHz betreiben.
Hier gilt eine einfache Regel: je höher der Takt, umso höher der Stromverbrauch. Braucht man nur wenig Rechenleistung sollte man von Anfang an einen Quarz mit möglichst kleiner Frequenz wählen. Wenn man zeitweise zwar Rechenleistung benötigt, aber nur für kurze Zeit, kann man mit den Sleep Modi arbeiten, um den Controller in den Pausen in einen Modus mit geringem Stromverbrauch zu schalten.
Der Xmega besitzt die Möglichkeit, im Betrieb per Software zwischen verschiedenen Taktquellen zu wählen. Man sollte von dieser Möglichkeit immer dann Gebrauch machen, wenn der Controller von einer Batterie versorgt wird.
Die Rechenleistung verhält sich proportional zum Stromverbrauch. Benötigt man permanent viel Rechenleistung wählt man von Beginn an einen möglichst hohen Takt. Dann ist jedoch für eine ausreichende Stromversorgung zu sorgen. Im Batteriebetrieb muss der Akku entsprechend dimensioniert werden.
Für viele Anwendungen reicht bereits der interne RC-Oszillator der AVR Controller. Dieser ist jedoch nicht besonders genau und ist stark abhängig von der Spannung und der Temperatur. Er eignet sich daher nur für einfache Aufgaben ohne hohe Anforderungen.
Die Xmega haben eine weitaus bessere interne Taktversorgung. Es stehen insgesamt 4 interne Taktquellen zur Verfügung, die einen großen Teil der Anwendungen abdecken können. Durch die Möglichkeit einer automatischen Kalibrierung sind hier Abweichungen von <1% möglich. Ein externer Takt ist nur für Aufgaben nötig, für die eine höhere Genauigkeit benötigt wird.
Möchte man Daten über die serielle Schnittstelle versenden oder empfangen benötigt der USART ein bestimmtes Timing. Dieses wird aus dem CPU Takt erzeugt. Dabei ist es wichtig, dass dieses Timing möglichst exakt ist. Wird die Abweichung zu groß, kommt es zu Übertragungsfehlern. Die Wahrscheinlichkeit für Übertragungsfehler steigt mit der Abweichung vom Standardwert, mit der Zahl der unmittelbar hintereinander gesendeten Zeichen und mit Anzahl und Länge der Pausen zwischen den Zeichen.
Für ein exaktes Timing mit einer Abweichung von 0% benötigt man einen Baudratenquarz. Damit erzielt man exakt die geforderten Werte. Nur damit ist es möglich, große Datenmengen bei hoher Baudrate ohne Fehler zu übertragen
typische Baudratenquarze sind z.B.: (Angaben in MHz)
Verwendet man einen anderen Quarz mit beispielsweise 16MHz kann man keine exakte Baudrate erzielen. Es ist dann zwar immer noch möglich, serielle Daten zu senden oder zu empfangen, aber die Wahrscheinlichkeit für Datenfehler steigt mit der Abweichung von der Norm und mit der Anzahl der hintereinander gesendeten Zeichen.
So kann es z.B. durchaus möglich sein, bei einer Baudrate von 19200 Baud und einem Takt von 16MHz 10 Zeichen hintereinander fehlerfrei zu senden, aber nach 15-20 Zeichen kann es zu Fehlern kommen. Dies liegt daran, dass RS232 ein asynchrones Protokoll ist. Es ist ein bestimmtes Timing gefordert. Ist der Sender nun z.B etwas schneller als der Empfänger erwartet laufen Sender und Empfänger nach einer gewissen Zeit nicht mehr synchron. Man kann das Problem umgehen, indem man nur kurze Datenpakete sendet und zwischen den Paketen eine kurze Pause einfügt. Nach dieser Pause hat der Empfänger die Möglichkeit, sich für die nächsten Daten neu zu synchronisieren.
Die Xmega sind hier nicht so problematisch. Der komplett überarbeitete USART besitzt im Baudrate Generator ein sogenanntes BScale Register, mit dessen hilfe sich die Baudrate wesentlich feiner einstellen lässt. So ist bei nahezu jedem Takt eine Baudrate mit einer Abweichung kleiner 0,1% möglich. Als Berechnungshilfe gibt es den Online Baudrate Calculator
Möchte man exakte Zeiten messen kann man ebenfalls nicht jeden beliebigen Quarz verwenden. Das AVR-Timerberechnungstool von Bunbury hilft bei der Auswahl und der Berechnung. Man sieht zum Beispiel, dass eine Genauigkeit von 1µs nur mit 8, 10 oder 16MHz problemlos ohne Fehler zu erzielen sind.
Diskussion