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.
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.
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.
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.
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.
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
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.
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 ;)
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.
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
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.
----------^^^^^^^^^^^^^^^^^^
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.
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.
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.
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.
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
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.
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".
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?
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.
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.