Forum: Mikrocontroller und Digitale Elektronik ATXMega mit externem Quarz läuft nicht an


von M. K. (sylaina)


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.

von Jens (Gast)


Lesenswert?

Ich benutze die selben Programmzeilen und bei mir funktioniert es.

von M. K. (sylaina)


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.

von Arduinoquäler (Gast)


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.

von Jens (Gast)


Lesenswert?

15pF und 14745600 Mhz.

von Adib (Gast)


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.

von M. K. (sylaina)


Lesenswert?

Arduinoquäler schrieb:
> Kannst du mal mit einem Oszilloskop an den Quarz-Pins messen?

Das werde ich morgen mal machen, bin grade nicht daheim. Ich weiß nur 
nicht, ob ich einen passenden Tastkopf daheim hab. Ich hab ein Agilent 
MXO 2002...meine also schon, dass ich auch den passenden Tastkopf daheim 
hab.

von Frank K. (fchk)


Lesenswert?

Die Kapazitätswerte hängen vom Quarz ab. Hast DU auch immer den gleichen 
Quarztyp verwendet?

Ansonsten mal auf 22pF oder dann 27pF gehen.

Und als Anschwinghilfe 1MΩ parallel zum Quarz schalten.

fchk

von M. K. (sylaina)


Lesenswert?

Frank K. schrieb:
> Die Kapazitätswerte hängen vom Quarz ab. Hast DU auch immer den gleichen
> Quarztyp verwendet?

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.

von Holm T. (Gast)


Lesenswert?

Jens schrieb:
> 15pF und 14745600 Mhz.

Boah ehy, 14,7Ghz..

Gruß,
Holm

von M. K. (sylaina)


Lesenswert?

Holm T. schrieb:
> Jens schrieb:
>> 15pF und 14745600 Mhz.
>
> Boah ehy, 14,7Ghz..
>
> Gruß,
> Holm

Wenn man schon klug kacken will, dann aber richtig: es wären 14,7 
THz...aber wir wissen ja alle, dass Jens nur ein Komma vergas und 14,7 
MHz meinte ;)

von HildeK (Gast)


Lesenswert?

Du versorgst den ATMega mit 2.7V oder mehr?
Bei 1.8V oder darunter muss er nur bis 12MHz laufen. Siehe Tabelle 36-99 
im Datenblatt.

von M. K. (sylaina)


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.

: Bearbeitet durch User
von Dieter F. (Gast)


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

von Arduinoquäler (Gast)


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.
----------^^^^^^^^^^^^^^^^^^

von M. K. (sylaina)


Lesenswert?

Ah, Dieter hats gefunden, in der 1003 hab ich das mit den 10 pf gelesen 
gehabt ;)

von M. K. (sylaina)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Peter R. (pnu)


Lesenswert?

Arduinoquäler schrieb:
> Kannst du mal mit einem Oszilloskop an den Quarz-Pins messen?

Die 4..7pF eines Tastkopfs können den Oszillator derart stören, dass er 
mit dem Schwingen aufhört.
Messung direkt am Quarz: völlig verfehlt. Man darf höchstens an 
irgendwelchen Ausgängen des Kontrollers messen und daraus auf die 
Taktfrequenz schließen.

von Gerhard G. (xmega)


Lesenswert?

Hallo,


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


Gruß G.G.

von Bernhard D. (pc1401)


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

von Arduinoquäler (Gast)


Lesenswert?

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.

von aswwsssw (Gast)


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

von Peter R. (pnu)


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.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Beitrag "Re: PLL Startprobleme beim ATXmega128A1U"

Für den CCP Zugriff würde ich auch dringend ein ASM-Macro empfehlen!

Beitrag "Re: PLL Startprobleme beim ATXmega128A1U"

von Gunther G. (Firma: RPG Radiometer physics GmbH) (bigkahuna)


Lesenswert?

Moin ...
auch wenn der Thread uralt ist ... er hat mir geholfen, einen
ATXmega128A4U "zum Leben" zu erwecken.

Danke.

von Wastl (hartundweichware)


Lesenswert?

Gunther G. schrieb:
> er hat mir geholfen, einen
> ATXmega128A4U "zum Leben" zu erwecken.

Wahnsinnig hilfreich.

Sinnvoller wäre es gewesen zu nennen welches der vielen
Möglichkeiten und Tips dir geholfen hat. Was also
schliesslich und endlich das Problem war das du beseitigt
hast.

"Aufgrund der vielen Tips fährt mein Auto jetzt wieder".

von Gunther G. (Firma: RPG Radiometer physics GmbH) (bigkahuna)


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?

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

Gunther G. schrieb:
> -> C auf 10pF reduziert -> externer Quarz funktioniert

Sehr schön, nur der Vollständigkeithalber (weil ich grade gesehen hab, 
dass ich meine Lösung nicht dazu schrieb): Genau das war auch meine 
Problemlösung.

von Rainer W. (rawi)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.