Externen Quarz an Attiny anschließen - wie macht man das?

AVR Neuling

Mitglied
31. Juli 2013
38
0
6
Sprachen
Ich habe folgendes vor: Der Tiny empfängt per SoftwareSerial über RX Daten. Diese werden über I²C auf ein LCD ausgegeben. Um Timingprobleme und falsch angezeigte Zeichen zu umgehen, möchte ich erstmalig einen externen Quarz nutzen. Bisher habe ich die Tiny immer intern mit 8Mhz betrieben.

Die Suche im Netz hat mich aber nicht wirklich weiter gebracht. Ich weiß jetzt, dass ein Quarz über zwei Kondensatoren angeschlossen wird und die Pins 2 und 3 (XTAL1 und XTAL2) dafür genommen werden müssen. Aber weiter bin ich nicht gekommen, weil ich keine Seite gefunden habe, auf der das (für Einsteiger) mal vernünftig erklärt wird.

Daher habe ich mehr Fragen als Antworten.
Welche Frequenz müsste dieser Quarz haben? Auch 8Mhz oder doch besser 18,432 MHz, weil es besser zur seriellen Kommunikation passt?
Ist es sinnvoller, einen Quarz mit zwei Kondensatoren zu nehmen oder einen Quarzoszillator? Was ist der Unterschied?
Wie bringe ich dem Tiny bei, dass er jetzt einen externen Quarz nutzen soll?
Muss ich im Sketch (ich nutze ausschließlich die Arduino IDE zum programmieren) etwas Besonderes berücksichtigen, damit die Taktfrequenz stimmt? Damit meine ich nicht die Baudrate, die für SoftwareSerial einzustellen ist.
Wie kann ich schlussendlich überprüfen, ob der Tiny jetzt wirklich über den externen Quarz betrieben wird?

Ich hoffe ihr könnt Licht in mein Dunkel bringen.
 
Ich weiß jetzt, dass ein Quarz über zwei Kondensatoren angeschlossen wird und die Pins 2 und 3 (XTAL1 und XTAL2) dafür genommen werden müssen. Aber weiter bin ich nicht gekommen, weil ich keine Seite gefunden habe, auf der das (für Einsteiger) mal vernünftig erklärt wird.

Die Systemtaktquelle wählst du über die Fusebits aus. Hierfür sind folgende Fusebits wichtig:
CKSEL3..0, SUT1..0, CKDIV8

Man müsste wissen, welchen ATtiny Mikrocontroller du einsetzt. Infos zu den notwendigen Fusebiteinstellung findest du im Datenblatt des Mikrocontrollers im Kapitel "ClockSystem" oder "Memory Programming / Fusebytes".

Wenn du eine genaue Baudrate benötigst, ist es sinnvoll, einen entsprechenden Quarz (mit "krummem Wert") einzusetzen. Ansonsten sind aber auch Abweichungen von einer Nennbaudrate zulässig.

Wenn du einen Oszillator einsetzen möchtest (halte ich für zu teuer und wahrscheinlich unnötig), musst du die Fusebits so einstellen, dass die Systemtaktquelle auf "External Clock" eingestellt ist. Bei einem Quarz ist die Taktquelle "Crystal Oscillator / Ceramic Resonator" gewählt.

Wegen Arduino, dies könnte dir eventuell weiterhelfen (Stichwort "f_cpu").



Dirk :ciao:
 
Schau mal ins Datenblatt des verwendeten Tinies, da gibts das Kapitel "Clock Options". Viele (aber nicht jeder) AVR besitzen einen internen Oszillator, der einen angeschlossenen Quarz schwingen lassen können. Letzterer bestimmt dann die Frequenz. Welche maximale Frequenz für einen sicheren Betrieb garantiert ist (auch abhängig von der Versorgungsspannung), steht auch je im Datenblatt.
Ein externer Quarzoszillator enthält neben dem Quarz eben auch den Oszillator. Dadurch wird nur eine Leitung zum AVR benötigt, wodurch ggf ein I/O mehr verfügbar bleibt.
Externe Quarzoszillatoren sind ggf größer oder teurer als ein Quarz, außerdem kann sich ein Quarz einfacher wechseln lassen wenn man 'ne andere Frequenz braucht.

Beides bestimmt die Geschwindigkeit, mit der der AVR arbeitet - sowohl das Programm, als auch die interne Hardware. Wenn im Programm irgendwas mit Zeiten eingestellt werden soll, muß deine IDE die tatsächliche Frequenz kennen. Der AVR besitzt keinen Chronometer. Wenn Dein Programm sagt "warte 'ne Stunde", macht die IDE daraus irgendwas wie "setze zichhundert Takte aus". Um also zichhundert genau bestimmen zu können, mus die IDE wissen wie lange ein Takt dauert. Klar?
 
Das ist mal wieder viel komplizierter als ich dachte. Aber ich bin guter Dinge das mit eurer Hilfe hin zu bekommen. Ob ich dafür jetzt ein oder zwei Euro ausgeben muss ist nicht wirklich kritisch. Insofern wäre mir ein freier I/O wichtiger als die Preisdifferenz zwischen Quarz und Quarzoszillator. Aber von mir aus bleiben wir mal beim Quarz und meiner angedachten Anwendung. Ich habe hier einige 12Mhz und 16Mhz Quarze liegen. Die könnte ich also dafür nehmen.

Gehen wir mal von 16Mhz aus. Wie genau müssen denn dann die Einstellungen der Fuses lauten? Aus dem Datenblatt werde ich nicht wirklich schlau.
Es soll ein Attiny85 sein. Das hätte ich wohl besser dazu geschrieben. Ich habe hier noch eine Seite gefunden, die euch sicherlich geläufig ist: http://www.engbedded.com/fusecalc/

Aber auch damit komme ich nicht weiter. Die Fuses bekomme ich im Burn-O-Mat eingestellt. Aber ich muss wissen welche. Die verschiedenen Auswahlmöglichkeiten innerhalb der (ersten) Klappliste verstehe ich nicht wirklich. Die ersten drei Einträge beim Attiny85 heißen Ext. Clock... Würde ich einen Quarzoszillator nehmen, welche der drei Einstellung wäre dann die Richtige?

Die Einträge zu "Ext Crystal Osc.", was laut Dirk die richtige Wahl wäre, sind für mich undurchschaubar. Ich nehme an, dass die letzten 6 Einträge bei 16Mhz möglich wären. Aber welcher davon wäre sinnvoll?

Die Schaltung muss nicht sonderlich stromsparend konzipiert werden. Daher ist es egal, ob bei 16Mhz etwas mehr Strom benötigt wird als bei 8Mhz, etc. Wie schon geschrieben kommt es dabei auch nicht auf den letzten Euro an. Wichtig wäre mir nur, dass die Anwendung nachher fehlerfrei läuft.
 
Zuletzt bearbeitet:
Also in den meisten Fällen (nicht allen) relativiert sich das mit dem Stromverbrauch eh wieder.
Wenn du mit Idle/PowerDown etc. arbeitest nimmt sich der Controller zwar mehr Strom bei höheren Frequenzen, ist aber auch schneller fertig.

Int. RC Osc. ist halt der interne Takt. 8MHz, ggf. geteilt durch 8
Ext. Clock wäre der Oszillator. Der bekommt VCC und GND und gibt ein Rechteck Signal am Ausgang aus, mit dem du denn den AVR füttern musst.
Ext. Crystal Osc. wäre mit Quarz und den 2 Kondensatoren.
WD Osc. wäre der 128kHz Takt vom Watchdog. Vorsicht hierbei: Wenn der gewählt ist läuft der AVR schon grenzwertig langsam, wenn dazu auch noch die Clock durch 8 geteilt wird wird er von einigen ISP Programmern nicht mehr erkannt (da zu langsam).

Der Rest ist relativ egal (also die Startzeit). Ich nehme meistens das höchste, auch wenn es unnötig ist. So gibt man dem System erstmal Zeit sich einzuschwingen. Sprich der AVR wartet erst x ms bevor er anfängt zu arbeiten.

Ob nun Oszillator (die 4poligen) oder Quarz und 2 Kondensatoren bleibt jeden selber überlassen. Bei ersterem hättest du ein Pin mehr frei, aber der Oszi ist teurer. Was die Genauigkeit angeht, da hast du ebenfalls in dem Datenblatt eine Tabelle drin, welcher Quarz (oder Oszi) bei welcher Baudrate wie stark von abweicht. Danach solltest du dich richten, sofern du die Wahl hast. Aus persönlicher Erfahrung kann ich sagen geh nicht über 115.000 Baud. Alles was drüber liegt wirft schnell mal Fehlerhafte Daten.
 
Danke für die Infos. Jetzt verstehe ich das so langsam. Es geht also bei den ganzen Variationen nur darum, dem µC die Möglichkeit zu geben, sich einzuschwingen, bevor er los legt. Na das kann von mir aus der höchste Wert sein. Denn bemerken werde ich das (in der Anwendung) garantiert nicht. Auch wenn er 0,8 Euro mehr kostet, sagt mir der Oszillator immer mehr zu, da noch ein Pin frei bleibt. Jetzt habe ich auch das Prinzip des Bauteiles verstanden. Aber testen werde ich das wohl erst mal mit einem Quarz, denn den habe ich hier liegen.

Gibt es denn eine simple Möglichkeit, zu überprüfen, ob der Tiny korrekt vom externen Quarz getaktet wird?
 
Das ist ganz simpel. Nehm z. B. einen 14MHz Quarz (also fernab der internen 8MHz / 1MHz) und schreib ein kleines Programm was einen Port Pin alle 500mS toggelt.

Also Pin = 1
500mS warten
Pin = 0
500mS warten
und neustart.

Und dann LED dran und pi*Daumen abschätzen :)

Wäre zumindest das schnellste.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)