ATXMega mit externem Quarz läuft nicht an

OP #4832467
Lesenswert?

Ich habe einen ATXMega128A4U, den ich mit einem externen Quarz mit 
14,7456 MHz betreiben will. Als Kapazitäten habe ich, wie immer, 18 pF 
Keramik-Kondensatoren benutzt.
Die Taktquelle habe ich wie folgt eingestellt
1
OSC_XOSCCTRL = OSC_XOSCSEL_XTAL_16KCLK_gc |
2
OSC_FRQRANGE_12TO16_gc;
3
OSC.CTRL |= OSC_XOSCEN_bm;
4
while(!(OSC.STATUS & OSC_XOSCRDY_bm));
5
CCP = CCP_IOREG_gc;
6
CLK.CTRL = CLK_SCLKSEL_XOSC_gc;
In der Main-Loop lasse ich nur einen Pin toggln. Leider zuckt der 
ATXMega nicht. Ändere ich obigen Code auf
1
OSC.CTRL |= OSC_RC32MEN_bm;
2
while(!(OSC.STATUS & OSC_RC32MRDY_bm));
3
CCP = CCP_IOREG_gc;
4
CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
dann läuft auch der ATXMega. Jetzt frage ich mich: Habe ich bei obigen 
Zeilen etwas vergessen oder sind meine Kapazitäten zu groß gewählt? Ich 
mein in einer Anleitung (AppNote) gelesen zuhaben, dass man beim ATXMega 
bei diesem Frequenzbereich eine Kapazität von 10 pf benutzen soll, ich 
finds nur grade nicht mehr wo das war. Aber vielleicht klemmts auch 
woanders.
Auch über die PLL zu gehen hat bisher nicht geholfen.
OP #4832520
Lesenswert?

Welche Kapazitäten benutzt du? Ich schätze eigentlich auch, dass da das 
Problem liegt. Mit 18 pf am Atmega328p hab ich damit noch nie Probleme 
gehabt, wie gesagt hab ich aber irgendwo (weiß nicht mehr wo) gelesen, 
dass es beim ATXMega nur 10 pf sein sollen. Könnte mir vorstellen, dass 
die Lastkapazitäten bei mir also zu groß gewählt sind.
Gast #4832575
Lesenswert?

M. K. schrieb:
> Ich schätze eigentlich auch, dass da das Problem liegt.

Ich behaupte daran liegt es nicht.

M. K. schrieb:
> Ich habe einen ATXMega128A4U, den ich mit einem externen Quarz mit
> 14,7456 MHz betreiben will.

Ich fahre den 128A1 mit 16 MHz und 18pF Lastkapazitäten und
das funktioniert einwandfrei.

Kannst du mal mit einem Oszilloskop an den Quarz-Pins messen?
Der Oszillator sollte auch ohne Programmierung schwingen.
Allerdings kann es auch noch an deinem speziellen Aufbau
liegen. Zeig den doch mal.
Gast #4832674
Lesenswert?

Du must bei den Befehlen Aufpassen, dass nach dem CCP Register, das 
gescützte Register innerhalb ein Paar Takten gesetzt wird.
Normalerweise passiert das bei -O2 oder-Os nicht aber bei -O0.


Ich habe mir ein inline asm gebastelt.

Hth, Adib.
OP #4833018
Lesenswert?

3,1 Volt hab ich als Versorgung, wie gesagt, mit dem internen Oszilator 
32 MHz funktioniert es ja problemlos ;)

Den Quarz brauch ich jetzt nur weil das System später in einem Bereich 
von -20 bis +40 Grad funktionieren soll und der Uart hier mit mindestens 
115k laufen soll zur Datenübertragung. Auf dem Arbeitstisch funktioniert 
das auch ohne Quarz bei 20 Grad nur auf den internen Oszilator will ich 
mich hierbei nicht drauf verlassen.
Gast #4833068
Lesenswert?

Hast Du mal versucht, Deinen erzeugten Takt auszugeben und mit Deinem 
Oszilloskop oder Frequenzzähler etc. zu messen?

"Der Xmega bietet die Möglichkeit den internen Controllertakt an 
verschiedenen Pins auszugeben. Die Taktfrequenz kann über das Register 
CLKEVOUT direkt auf einen Pin des Controllers ausgegeben werden. Im 
folgenden Beispiel wird der Takt des Xmegas auf den Pin 7 des Port C 
ausgegeben. Welche weiteren Pins für die Ausgabe verwendet werden 
können, findet man in dem jeweiligem Datenblatt des Controllers."


#include "clksys_driver.h"

PORTCFG.CLKEVOUT = PORTCFG_CLKOUT_PC7_gc;

Im Übrigen - 10 pF wären angebracht (AVR 1003):

Table 2-1. Recommended Capacitor Values
Frequency range Capacitor value (C1 and C2)
0.4 – 2MHz 100pF
2 – 9MHz 15pF
9 – 12MHz 15pF
12 – 16MHz 10pF
Gast #4833072
Lesenswert?

M. K. schrieb:
> Hab ich. Wie gesagt, hab den Quarztyp auch Atmega328P und da läuft er
> immer zuverlässig. Ich werd erstmal prüfen mit dem Oszi, ob er auch
> wirklich nicht anläuft.

Wie schon gesagt, das sollten "wir" auch noch überprüfen:

Arduinoquäler schrieb:
> Allerdings kann es auch noch an deinem speziellen Aufbau
> liegen. Zeig den doch mal.
----------^^^^^^^^^^^^^^^^^^
OP #4833082
Lesenswert?

Arduinoquäler schrieb:
> M. K. schrieb:
>> Hab ich. Wie gesagt, hab den Quarztyp auch Atmega328P und da läuft er
>> immer zuverlässig. Ich werd erstmal prüfen mit dem Oszi, ob er auch
>> wirklich nicht anläuft.
>
> Wie schon gesagt, das sollten "wir" auch noch überprüfen:
>
> Arduinoquäler schrieb:
>> Allerdings kann es auch noch an deinem speziellen Aufbau
>> liegen. Zeig den doch mal.
> ----------^^^^^^^^^^^^^^^^^^

Das kann ich euch zeigen wenn ich daheim bin. Aber mal ehrlich: ich 
sagte schon, dass es mit dem internen Oszi geht, mit dem externen gehts 
nicht. Der Quarz ist vielleicht 10 mm von den Pins entfernt, am 
Atmega328 funktioniert es stets. Ich postuliere also: Am Aufbau wird es 
definitiv nicht liegen. Höchstens an der Wahl der Lastkapazitäten.

EDIT: Dropbox ist ne tolle Erfindung, da liegt noch ein Layoutentwurf 
und am Quarz hab ich nichts geändert, so wie im Bild hängt der Quarz am 
ATXMega.
Angehängte Dateien:
#4833191
Lesenswert?

M. K. schrieb:
> Arduinoquäler schrieb:
>>> Allerdings kann es auch noch an deinem speziellen Aufbau
>>> liegen. Zeig den doch mal.
>> ----------^^^^^^^^^^^^^^^^^^

Die Masserückleitungen von C1 und C2 zum Controller hin sind arg lang, 
auch wenn Atmel das so empfiehlt.

Besseres Beispiel:
http://www.infineon.com/dgdl/Infineon-ap2402633_EMC_Guidelines.pdf-AN-v03_05-EN.pdf?fileId=5546d46255dd933d0155e32392f1090e

Seite 17.

Vermutlich liegt das Problem aber eher an der Kapazität von C1/C2.

Gruß,
Bernhard
Gast #4833235
Lesenswert?

Arduinoquäler schrieb:
> Der Oszillator sollte auch ohne Programmierung schwingen.

Nein, der muss erst eingeschaltet werden.
Und wenn Du da schon so falsch liegst, ist der Rest:

Arduinoquäler schrieb:
> Peter R. schrieb:
>> Die 4..7pF eines Tastkopfs können den Oszillator derart stören, dass er
>> mit dem Schwingen aufhört.
>
> Nö.
>
> Der Ausgangspin des Prozessors ist ein niederohmiger Treiber,
> der schafft den Tastkopf gaaaaanz locker.
>
> Peter R. schrieb:
>> Messung direkt am Quarz: völlig verfehlt.
>
> Käse.

auch unglaubwuerdig.

aswwsssw
#4833372
Lesenswert?

Selbst erlebt,als Prüfer in einer Abschlussprüfung IHK:

Prüfling, bei der Fehlersuche, mit Tastkopf an einem Quarzpin: "Der 
Quarz tuts nicht mehr". Der Oszillator im Kontroller hatte eben wenig 
Schwingreserve.
Dabei hatte eben noch, vom Kontroller her geschaltet, eine LED 
geblinkt.Und auch direkt nach der Messung blinkte sie weiter.

Arduinoquäler schrieb:
> Der Ausgangspin des Prozessors ist ein niederohmiger Treiber,
> der schafft den Tastkopf gaaaaanz locker.

Wer weiß, wenn er gerade den Tastkopf an einem der Quarzpins hat, ob 
daran  der Ein- oder der Ausgang des Oszillators ist?
So niederohmig ist der Treiber nicht, sonst bräuchte man nicht per fuses 
den Treiber je nach Frequenzbereich umschalten

Gerhard G. schrieb:
> habe mehrere Tastköpfe die bei der Stellung (Teilung_10) stabile
> Ergebnisse am Quarz anzeigen. Diese Messwerte liefern exakt die
> Schwingungszahl des Quarzes.

exakt? Da hab ich meine Zweifel. Vielleicht für einen Kontrollertakt 
ausreichend. Selbst ein 1:10-Tastkopf hat mehrere pF, die den Quarz 
recht deutlich "ziehen" können auch wenn sie keinen  sichtbaren Einfluss 
auf die Amplitude haben. Mess mal das C eines 1:10-Teilers nach.

Außerdem verändert der Tastkopf das C1/C2-Verhältnis, ändert also den 
Rückkopplungsfaktor des Oszillators. Gerade an der oberen Grenzfrequenz 
des Kontrollers kann das zum Schwingungseinbruch führen.
(Firma: RPG Radiometer physics GmbH) #7618708
Lesenswert?

Klar, ich kopiere jetzt alles nochmal hier rein, was oben steht ... und am Besten das alles aus dem Link von Frank B. .... geht's noch, oder was ? Jeder hat doch andere Probleme/Symptome und nicht alles hilft bei jedem.

Aber wenn es gewünscht ist .... bei MIR hat geholfen :

a) der Code von sylaina aus dem ersten Beitrag -> erstmal internen Oszillator zum Laufen gebracht

b) der Hinweis auf die unterschiedliche Kapazitäten für die verschiedenen Frequenzen bei externen Quarzen -> -> C auf 10pF reduziert -> externer Quarz funktioniert

Und nun? Zufrieden?

#7619223
Lesenswert?

Gunther G. schrieb:

b) der Hinweis auf die unterschiedliche Kapazitäten für die verschiedenen Frequenzen bei externen Quarzen -> -> C auf 10pF reduziert -> externer Quarz funktioniert

Die erforderliche Kapazität hängt vom Typ des Quarzes ab, wobei die parasitären Kapazitäten des Aufbaus noch von den Angaben des Quarzherstellers abgezogen werden müssen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren