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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. K. (sylaina)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Ich benutze die selben Programmzeilen und bei mir funktioniert es.

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
15pF und 14745600 Mhz.

von Adib (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Jens schrieb:
> 15pF und 14745600 Mhz.

Boah ehy, 14,7Ghz..

Gruß,
Holm

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von M. K. (sylaina)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.