Forum: Mikrocontroller und Digitale Elektronik PLL Startprobleme beim ATXmega128A1U


von Falk B. (falk)


Lesenswert?

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.
1
   // PORTR init, kickstart for XO
2
    PORTR.DIR=PIN0_bm;      // XTAL2
3
4
    // CLK init
5
    // external XO with 16.384 MHz
6
    // internal PLL x4
7
    // 65.536 MHz PER2 clock 
8
    // 32.768 MHZ CPU clock
9
    
10
    //TODO workaround for startup trouble
11
    STATUS_LED_RED
12
    OSC.XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCPWR_bm | OSC_XOSCSEL_XTAL_16KCLK_gc;
13
14
    PORTR.OUT=PIN0_bm;      // kickstart for XO
15
    PORTR.OUT=0;      // kickstart for XO
16
    PORTR.OUT=PIN0_bm;      // kickstart for XO
17
    PORTR.OUT=0;      // kickstart for XO
18
19
    OSC.CTRL |= OSC_XOSCEN_bm;
20
    while(!(OSC.STATUS & OSC_XOSCRDY_bm));      // wait for XO startup
21
    //OSC.CTRL |= OSC_RC32MEN_bm;
22
    //while(!(OSC.STATUS & OSC_RC32MRDY_bm));      // wait for RC startup
23
    _delay_ms(1);
24
    STATUS_LED_YELLOW
25
26
    CCPWrite( &CLK.PSCTRL, CLK_PSBCDIV_1_2_gc );// Prescaler B/1 C/2
27
    
28
    OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 0x04;    // PLL x4, XO input
29
    //OSC.PLLCTRL = OSC_PLLSRC_RC32M_gc | 0x08;    // PLL x8, RC input
30
    OSC.CTRL |= OSC_PLLEN_bm;                   // enable PLL
31
    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

von Stefan F. (Gast)


Lesenswert?

Bist du sicher, dass die Kapazitäten richtig gewählt wurden? Ich glaube, 
es sollen 100pF sein.

http://www.atmel.com/images/doc8072.pdf

von Dieter F. (Gast)


Lesenswert?

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

von Klaus R. (klaus2)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

Ach so, na dann halt ich besser mal die Klappe.

von Falk B. (falk)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

Pack den mal vor Deine CCP-Write-Anweisungen

CCP = CCP_IOREG_gc;                                          // 
Ermöglicht das Beschreiben geschützter IO-Register

von Falk B. (falk)


Lesenswert?

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

von Dieter F. (Gast)


Lesenswert?

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" :-)

von Falk B. (falk)


Lesenswert?

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.
8
 */
9
void CCPWrite( volatile uint8_t * address, uint8_t value )
10
{
11
  volatile uint8_t * tmpAddr = address;
12
#ifdef RAMPZ
13
  RAMPZ = 0;
14
#endif
15
  asm volatile(
16
    "movw r30,  %0"        "\n\t"
17
    "ldi  r16,  %2"        "\n\t"
18
    "out   %3, r16"        "\n\t"
19
    "st     Z,  %1"       "\n\t"
20
    :
21
    : "r" (tmpAddr), "r" (value), "M" (CCP_IOREG_gc), "i" (&CCP)
22
    : "r16", "r30", "r31"
23
    );
24
}

von Dieter F. (Gast)


Lesenswert?

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.

1
/*
2
 * Falks_ATXMEGA.c
3
 *
4
 * Created: 02.01.2015 15:23:26
5
 */ 
6
7
8
#include <avr/io.h>
9
#include "clksys_driver.h"
10
11
12
13
int main(void)
14
{
15
   PORTC.DIR=PIN7_bm;      // 
16
   PORTC.OUT=PIN7_bm;      //  
17
  
18
   PORTCFG.CLKEVOUT = PORTCFG_CLKOUT_PC7_gc; 
19
20
   _delay_ms(10000);
21
22
23
        
24
   OSC_XOSCCTRL = OSC_XOSCSEL_XTAL_16KCLK_gc | OSC_FRQRANGE_2TO9_gc;
25
   OSC.CTRL |= OSC_XOSCEN_bm;
26
   while(!(OSC.STATUS & OSC_XOSCRDY_bm));      // wait for XO startup
27
   
28
   CCP = CCP_IOREG_gc;
29
   CLK.CTRL = CLK_SCLKSEL_XOSC_gc;
30
   
31
   _delay_ms(10000);
32
33
   
34
   
35
   CCPWrite( &CLK.PSCTRL, CLK_PSBCDIV_1_2_gc );// Prescaler B/1 C/2
36
   
37
   OSC.PLLCTRL = OSC_PLLSRC_XOSC_gc | 0x04;    // PLL x4, XO input
38
   OSC.CTRL |= OSC_PLLEN_bm;                   // enable PLL
39
   while(!(OSC.STATUS & OSC_PLLRDY_bm));       // wait for PLL startup
40
   
41
   CCPWrite( &CLK.CTRL, CLK_SCLKSEL_PLL_gc );  // select PLL as clock source
42
   OSC.CTRL &= ~OSC_RC2MEN_bm;                 // 2M RC OSC OFF
43
44
  
45
  
46
   while(1)
47
   {
48
        //TODO:: Please write your application code 
49
   }
50
}

von Falk B. (falk)


Lesenswert?

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

von Dieter F. (Gast)


Lesenswert?

Falk Brunner schrieb:
> Danke für den Test

Gerne - aber ich danke auch, wieder etwas gelernt ...

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von Dieter F. (Gast)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

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?

von isidor (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

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?

von isidor (Gast)


Lesenswert?

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.

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von isidor (Gast)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

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

von isidor (Gast)


Lesenswert?

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)

von Dieter F. (Gast)


Lesenswert?

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

von isidor (Gast)


Lesenswert?

Dieter Frohnapfel schrieb:
> kannst Du mir ja mal zeigen, da
> mein Oszi da nicht so recht mitspielt ...

Wie soll das gehen?

von Dieter F. (Gast)


Lesenswert?

isidor schrieb:
> Wie soll das gehen?

Hardcopy, Foto, ...

von isidor (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dieter F. (Gast)


Lesenswert?

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

von isidor (Gast)


Lesenswert?

Ich muss mich offensichtlich wiederholen:

isidor schrieb:
> Aber einen anderen Quarz löte ich dir jetzt nicht ein ....

von Dieter F. (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ Simon K. (simon) Benutzerseite

>Welchen Quarz hast du denn dort angeschlossen?

Den hier.

http://www.digikey.de/product-search/de?x=0&y=0&lang=de&site=de&KeyWords=887-1105-1-ND

>Hast du keinen Zugriff auf eine Heißluftstation zum Auslöten?

Leider nein.

von Ulrich H. (lurchi)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

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.