Hallo Allerseits,
ich habe hier ein Startproblem mit der PLL im ATxmega128A1U. Dort ist
ein 16,384MHz Quarz angschlossen mit 2x22pF. Dieser Takt soll per PLL
vervierfacht werden. Folgender Code wird benutzt.
while(!(OSC.STATUS&OSC_PLLRDY_bm));// wait for PLL startup
32
33
CCPWrite(&CLK.CTRL,CLK_SCLKSEL_PLL_gc);// select PLL as clock source
34
//CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc ); // select XO as clock source
35
OSC.CTRL&=~OSC_RC2MEN_bm;// 2M RC OSC OFF
36
37
STATUS_LED_GREEN
38
_delay_ms(100);
Das Problem liegt darin, dass nach dem Einschalten oder externen Reset
per Programmieradapter die Sequenz bei der gelben LED hängen bleibt,
sprich, die PLL scheint nicht einzurasten. Wenn man jedoch den IC bzw.
den Quarz mit dem Finger berührt, scheint er anzuschwingen und dann zu
laufen. Manchmal scheint er nicht ganz sauber anzuschwingen, weil auf
meinem Terminal (UART @ 115k2) komische Zeichen ankommen. Meisten klappt
es aber.
Sehr komisch.
Das Anschwingen nach dem Berühren (manchmal reicht es, ca. 5mm nah an
den IC heranzugehen!) deutet auf einen sehr empfindlichen Oszillator
hin, der durch minimale kapazitive Einstreuung scheinbar erst loslegt.
Das sollte aber nicht so sein.
Als Test habe ich versucht, das XTAL2 Pin zuerst auf Ausgang zu schalten
und ein wenig zu wackeln, damit der Quarz schon gedämpft schwingt, wenn
der Oszillator aktiviert wird. Scheint aber keine Wirkung zu haben.
Wenn man anstatt des externen Quarzes den internen 32 MHz RC Oszillator
nutzt, schwingt die PLL problemlos an.
Ich habe auch schon alles optisch geprüft, ob vielleicht Lötfehler
vorliegen. Ich hab auch alles nochmal nachgelötet (Pins am ATXmega,
Quarz, Kondensatoren),. Hilft alles nix.
Man muss dazu sagen, dass es bei der Inbetriebnahme ein Problem gab. Die
VCC/GND Pins 83/84 waren verpolt, damit gab es dort einen satten
Kurzschluss der 3,3V Versorgung. Der Strom wurde nur vom Spannungsregler
auf ~1A begrenzt und ist dort minutenlang reingeflossen, die Spannuung
brach auf ca. 500mV ein. Ggf. ist dabei etwas zu Schaden gekommen. Den
IC will ich aber jetzt nicht wechseln, das ist eine Scheißarbeit. Die
Pins habe ich von den Leitungen gelöst und mittels Drähtchen richtig
angeschlossen, sprich, der zugehörige 100nF Entkoppelkondensator ist
immer noch aktiv an der Stelle.
Hat jemand ähnliche Erfahrungen gemacht?
Irgendwelche Ideen?
Als Workaround könnte ich einen externen Quarzoszillator anschließen,
das wäre für meinen Prototypen OK. Aber wird dann die neue Version mit
Quarz ordentlich laufen? Hmmm?
MFG
Falk
Stefan Us schrieb:> es sollen 100pF sein
Eher 10 pF, wenn ich richtig lese:
AVR1003
5
8072E-AVR-11/09
Table 2-1.
Recommended Capacitor Values
Frequency Range
Capacitor Value (C1 and C2)
0.4 – 2 MHz
100 pF
2 – 9 MHz
15 pF
9 – 12 MHz
15 pF
12 – 16 MHz
10 pF
Ich habe nach diesem Tutorial erfolgreich initialisiert ...
http://www.jtronics.de/avr-projekte/xmega-tutorial/xmega-tutorial-clock.html
...ein Falk würde dich jetzt erstmal darauf hinweisen, wie dämlich man
sein muss um das zu verpolen und dir dann dazu raten, den chip zu
wechseln.
Klaus.
Moment mal. Ich war von 16kHz ausgegangen. Wenn er 16Mhz vervierfachen
würde, dann käme er ja auch 64Mhz Taktfrequenz! So viel kann der doch
gar nicht. Oder doch?
@ Stefan Us (stefanus)
>Moment mal. Ich war von 16kHz ausgegangen.
Es sind 16 MHz, steht auch so in meinem Beitrag. Einen 16 kHz Quarz muss
man erstmal finden ;-)
> Wenn er 16Mhz vervierfachen>würde, dann käme er ja auch 64Mhz Taktfrequenz!
Das ist auch so, es sind sogat 65,536 MHz.
> So viel kann der doch gar nicht. Oder doch?
Oder doch. Diese 65 MHz werden nur für den SDRAM benutzt, die CPU
bekommt nur die Hälfte, also ~32 MHz. Das ist voll OK.
Die Frage ist, warum scheint der Xmega zu meinen, dass der XO normal
läuft,
while(!(OSC.STATUS & OSC_XOSCRDY_bm)); // wait for XO startup
_delay_ms(1);
STATUS_LED_YELLOW
wo er das anscheinend doch nicht tut. Messen kann ich im Moment leider
auch nicht, ich hab im Moment kein Oszi para :-0
Stochern im Nebel.
@ Dieter Frohnapfel (jim_quakenbush)
>Pack den mal hinter Deine "gelbe-LED-Anweisung">CCP = CCP_IOREG_gc; //>Ermöglicht das Beschreiben geschützter IO-Register
Wozu? Dafür gibt es die Funktion CCPWrite, dort steckt ein ASM-Makro
drin, damit das Timing unabhängig von der Optimierungseinstellung des
Compilers sichergestellt ist. Und die funktioniert auch, sieht man auch
im Assemblerfile.
Falk Brunner schrieb:> CCPWrite
O.K. - wusste ich nicht :-(.
Also wird über CCPWrite automatisch das CCP-Register gesetzt?
Ich suche mal mein kleines board und übe "Versuch mach kluch" :-)
Wie gesagt, mit internem 32 MHz RC Takt als Quelle für die PLL läuft es
problemlos. D.h. auch der Zugriff auf CCP funktioniert. ISt aus eine
App-Note rauskopiert.
1
/*! \brief CCP write helper function written in assembly.
2
*
3
* This function is written in assembly because of the timecritial
4
* operation of writing to the registers.
5
*
6
* \param address A pointer to the address to write to.
7
* \param value The value to put in to the register.
Hier mal ein Zwischenstand. Ich habe einen ATXMega32A4 mit einem 8Mhz
Quarz. Ich prüfe am Oszi an C7. (Die _delay sind natürlich ein Witz, da
kein F_CPU angegeben ist / angepasst wird).
OSC_XOSCPWR_bm kennt mein Atmel-Studio für meinen Prozessor nicht - habe
ich mal weggelassen.
Gestartet wird mit 2MHz internem Takt. O.K.
Dann wird der externe 8Mhz Quarz als Taktquelle genommen -> 8 MHz Takt
O.K.
Dann schaltet er auf 16 MHz ... O.K.
Würde also bei einem 16,384 MHz Quarz auf 32,768 MHz gehen. Passt aus
meiner Sicht - scheinbar doch die Hardware.
@ Dieter Frohnapfel (jim_quakenbush)
>Würde also bei einem 16,384 MHz Quarz auf 32,768 MHz gehen. Passt aus>meiner Sicht - scheinbar doch die Hardware.
Danke für den Test, ich werde wohl als Workaround erstmal nen XO
dranpappen, den IC wechseln ist mir zuviel Arbeit.
> ich habe hier ein Startproblem mit der PLL im ATxmega128A1U. Dort ist> ein 16,384MHz Quarz angschlossen mit 2x22pF.> Hat jemand ähnliche Erfahrungen gemacht?> Irgendwelche Ideen?
Wir hatten Ende letzten Jahres ein ähnliches Problem bei einer Baugruppe
mit dem gleichen Chip und einem 16Mhz Quarz. Mit 2x10pF lief diese aber
dann problemlos. Die meisten ATXmega-Baugrupppen laufen bei uns mit
einem 8MHz Quarz und dann x4 per PLL, was bisher völlig unempfindlicher
war gegen nicht 100%ig angepasste Quarzbeschaltungen. Nur auf der
besagten Platine waren sowieso schon 16MHz Quarze verbaut, weswegen sich
das anbot, alles einheitlich zu bestücken.
Welchen Quarz hast du denn dort angeschlossen? Vor allem bei den kleinen
SMD Quarzen kann es vorkommen, dass diese wesentlich weniger
Lastkapazität benötigen. Möglicherweise liegt es daran. Bedenke auch,
dass der Chip alleine schon eine parasitäre Last besitzt (z.B. 3.16 bei
einem ATxmegaA4U) und auch noch auf der Platine das eine oder andere
Picofarad dazu kommt.
Hast du keinen Zugriff auf eine Heißluftstation zum Auslöten? Damit geht
es wirklich fix.
Falk Brunner schrieb:> nen XO> dranpappen
Damit ich noch mehr lerne :-)
Wenn da irgend etwas im ATXmega... (durch den unorthodoxen Anschluss :-)
) hin ist, wie soll dann ein Quarzoszillator das heilen? Ich gestehe -
ich bin KEIN Elektroniker ...
Dieter Frohnapfel schrieb:> wie soll dann ein Quarzoszillator das heilen? Ich gestehe -> ich bin KEIN Elektroniker
Heilen tut das nix, aber der Oszillator schwingt auf jeden Fall und
treibt den XMega sicher an.
Matthias Sch. schrieb:> Oszillator schwingt auf jeden Fall und> treibt den XMega sicher an
Hmm, ja, nur wenn da drin viel "Schmurgel" ist, dann kann nichts
angetrieben werden - oder?
Wenn ich (bei einem ATMega oder ATTiny) "verfused" habe - O.K., aber bei
einem ATXMega... ? Nun , ich bin da etwas unbedarft - kannst Du mir das
bitte erklären?
Ich fahre seit gut einem Jahr den ATxMega128A1 mit 16 Mhz (siehe
Bild, Standard-Billig-Quarz) mit 2x 18pF ohne Probleme. Sogar
in der Klima-Kammer bei -10°C bis +80°C.
Interne Taktfrequenz 32 Mhz.
isidor schrieb:> Sogar> in der Klima-Kammer bei -10°C bis +80°C.
So etwas (Klima-Kammer) habe ich nicht - aber ich denke auch, dass
gewisse Toleranzen O.K. sind. Warum nimmst Du 18 pF Kondensatoren und
keine 10 pF Kondensatoren - wie empfohlen?
Sind die gängiger?
Dieter Frohnapfel schrieb:> Warum nimmst Du 18 pF Kondensatoren und> keine 10 pF Kondensatoren - wie empfohlen?
Bewährter Erfahrungswert, never change a running system.
Your mileage may vary.
isidor schrieb:> Ich fahre seit gut einem Jahr den ATxMega128A1 mit 16 Mhz (siehe> Bild, Standard-Billig-Quarz) mit 2x 18pF ohne Probleme. Sogar> in der Klima-Kammer bei -10°C bis +80°C.> Interne Taktfrequenz 32 Mhz.
Wie Simon es bereits beschrieben hat, ist das Anschwingproblem bei
kleinen Bauformen tendenziell stärker ausgeprägt. Denn je kleiner das
Gehäuse ist, desto höher ist meist der ESR-Wert. Wir haben auf
Baugruppen, die vom Platz her unkritisch sind, zum Beispiel noch oft
HC49U-Quarze. Die haben bei gleicher Frequenz oftmals nur die Hälfte des
ESR-Wertes als beispielsweise 3,2x2,5mm² Quarze. Mit (zu) großen
Lastkapazitäten schwingen die dann oftmals garnicht mehr an.
Christoph Budelmann schrieb:> Wie Simon es bereits beschrieben hat, ist das Anschwingproblem bei> kleinen Bauformen tendenziell stärker ausgeprägt.
Habe ich selbst schon nachgemessen und kann das somit bestätigen.
Man messe einfach mal den Pegel an XTAL1/XTAL2 bei verschiedenen
Quarzen und staune.
isidor schrieb:> Man messe einfach mal den Pegel an XTAL1/XTAL2 bei verschiedenen> Quarzen und staune.
Gerne - und wie mache ich das? Entweder bin ich zu doo.. oder mein Oszi
spielt
da nicht mit ..
Dieter Frohnapfel schrieb:> Entweder bin ich zu doo.. oder mein Oszi> spielt da nicht mit ..
Das ist Analog-Technik! Da kommt kein Rechteck mit 3.3V Pegel.
Vermutlich musst du deinen Oszi stark "aufdrehen" (emfindlicher
machen), eine gute Masse in der Nähe deines Controllers verwenden.
Dann, nach langem Suchen wirst du irgendeinen kleinen Sinus finden
(wenn der Oszillator sich nicht durch die Last des Tastkopfes
zu Tode erschrocken hat)
isidor schrieb:> Das ist Analog-Technik! Da kommt kein Rechteck mit 3.3V Pegel.
Das habe ich mir auch schon gedacht - kannst Du mir ja mal zeigen, da
mein Oszi da nicht so recht mitspielt ...
Ich weiss nicht was das bringen soll, aber gut, hier schnell
ein Screeenshot mit dem Photoabbarat .....
Aber einen anderen Quarz löte ich dir jetzt nicht ein ....
isidor schrieb:> Man messe einfach mal den Pegel an XTAL1/XTAL2 bei verschiedenen> Quarzen und staune.
Das fehlt mir jetzt irgendwie ... das Staunen stellt sich bei den Fotos
nicht ein ...
isidor schrieb:> Ich muss mich offensichtlich wiederholen:>> isidor schrieb:>> Aber einen anderen Quarz löte ich dir jetzt nicht ein ....
O.K., dann bleibt mir das Staunen wohl verwehrt ... :-( schade ...
@ Dieter Frohnapfel (jim_quakenbush)
>> Oszillator schwingt auf jeden Fall und>> treibt den XMega sicher an
Genau.
>Hmm, ja, nur wenn da drin viel "Schmurgel" ist, dann kann nichts >>angetrieben werden - oder?
so viel Schmurgel wird es nicht sein, denn die PLL läuft ja mit einer
anderen Taktquelle (interner 32 Mhz RC Oszillator) problemlos.
Ich vermute, dass durch die Verpolung der Verstärker des XOs gelitten
hat und nun einige kritische Parameter arg verändert sind. Mit einer
sanften Berührung kommt er allerdings in Trab.
Es kann auch einfach ein schlechter Quarz sein. Auch da gibt es ggf.
Ausreißer oder halt Typen die weniger Kapazität brauchen.
Das nachmessen am Quarz ist gar nicht so einfach. Das Oszilloskop ist
nicht das Problem, sondern die Kapazität des Tastkopfes. 5 pF und etwas
Dämpfung vom Tastkopf können da einen großen Unterschied ausmachen.
Ok, kurze Rückmeldung. Mit 2x10pF anstatt 2x22pF läuft der Oszillator
zuverlässig an! Machmal sollte man einfach machen, was im Datenblatt
steht . . 8-0
Danke für die Diskussion und die zielführenden Hinweise.