Fusebits XMEGA

Gast #1407190
Lesenswert?

Hallo Leuts,

ich habe ein Board mit einem XMEGA128A1 jetzt aufgebaut und kann mittels 
PDI auf den Controller zugreifen. Dabei lese ich nun die aktuellen 
Einstellungen der Fuse Bits aus (siehe Screenshot).

Ich möchte meine Mühen nicht zerstören indem ich nun die Fusebits falsch 
programmiere und habe deswegen die Frage wie ich nun die Fusebits 
richtig setzte.

Ich habe einen externen Quarz 16 MHz und die zwei 27 pF Kondensatoren.
JTAg würde ich disablen nur was muss ich bei den

FUSEBYTE0
FUSEBYTE1
FUSEBYTE2
FUSEBYTE4
FUSEBYTE5

angeben.

Vielen Dank für eure Hilfe.

Matthias
Angehängte Dateien:
Gast #1407761
Lesenswert?

>>Hallo erstmal. Bei dem XMega ist es unmöglich, sich per Fuseumstellung
>>auszusperren.

Danke für jemanden wi mich eine gute Sache ;-)

>> Der Controller selbst startet immer mit dem
>> internen 2Mhz Oszillator.

OK, nur nachdem er gestartet ist, werde ich doch nach wie vor die Clock 
Source angeben müssen oder realisiert der uC von alleine dass ein 
externen Quarz mit 16 MHz der Taktgeber ist?
Gast #1408067
Lesenswert?

du musst zur laufzeit die Clock Source einstellen, am besten bevor du in 
die Endlosschleife in main() gehst.

Hast du dir die Treiber bzw. Beispiel C-Files von Atmel runtergeladen? 
Da kann man sich das anschauen was man machen muss um die gewüsnchte 
Clock einzustellen. Da man die CCP Sequenz benötigt um an der Clock 
rumzuspielen.

z.B. benutze ich einen 8MHz Resonator.

CLKSYS_XOSC_Config( OSC_FRQRANGE_2TO9_gc, FALSE, 
OSC_XOSCSEL_XTAL_1KCLK_gc );
CLKSYS_Enable( OSC_XOSCEN_bm );
CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
do
{
    // Wait for Ready Flag
}while( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );

CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc);

oder halt alles aus den entsprechenden Registern raussuchen und von Hand 
in C oder ASM schreiben, ich fand's so deutlich angenehmer, vor allem 
weil in der Funktion schon in optimiertem Assembler Code geschrieben 
wurde, da die CCP Sequenz meines Wissens nach nur 4 Clock Zyklen lang 
sein darf!
Gast #1408157
Lesenswert?

CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_EXTCLK_gc );
  CLKSYS_Enable( OSC_XOSCEN_bm );
  do {}
  while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
  CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );
  CLKSYS_Disable( OSC_RC32MEN_bm );

So müsste das gehen, wenn ich es aus dem Beispiel richtig verstanden 
habe oder?
Gast #1408162
Lesenswert?

Achtung! CLKSYS_Disable( OSC_RC32MEN_bm );
--> im Beispiel Code war der interne 32MHZ zuvor aktiv! Deswegen wird 
der Disabled nachdem der externe Clock gewählt wurde!!
Also falls es überhaupt nötig ist dann den OSC_RC2MEN_bm deaktivieren.
ansonsten sollte das wohl funktionieren....
Gast #1408170
Lesenswert?

Ich habe wie bei den Megas zuvor an XTAL 1 und XTAL 2 die Anschlüsse des 
Quarzes und die 2 27 pF Kondensatoren. Interpretiere ich das in dem DB 
falsch oder wird ein externer Quarz nun beim XMEGA nur noch an XTAL 1 
angeschlossen (Figure 7.3). Ich habe den Aufbau von Figure 7.2 gewählt 
nur komme ich mit dem Begriff "0.4 - 16 MHz Crystal Oscillator" nicht 
klar. War das bei den MEgas nicht immer NICHT der normale Quarz (fix)? 
Verwirr
Gast #1408214
Lesenswert?

Figure 7.3 stellt den Anschluss eines "Rechtecksignals" dar, also quasi 
Freuqenzgenerator z.B.
Dein Crystal liefert ja ne Sinusschwingung, daher XTAL1 und XTAL2 
anschliessen.
Klar ist das dann keine interne Quelle sondern extern, aber es gibt halt 
auch die Möglichkeit einen Externen Clock (rechteck!) draufzugeben!!!

Nicht verweirren lassen!
Gast #1408340
Lesenswert?

Ich mache bei der Initialisierung folgendes:

  CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_XTAL_256CLK_ 
gc);
  CLKSYS_Enable(OSC_XOSCEN_bm);
  do {}
  while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
  CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );


Dann wollte ich testen ob eine LED am Port eingeschalten werden kann 
mit:

PORT_SetPinsAsOutput( &PORTE, 0xFF );
PORT_SetOutputValue( &PORTE, 0x06 );

Wenn ich in das I/O Fenster schaue, steht da immer noch der interne 2 
MHz Clock und die LED geht nicht an. Was mache ich falsch, programmmiere 
geht!
Gast #1408350
Lesenswert?

Doch geht sry war ein kleiner Fehler, jedoch sehe ich in dem I/O Fenster 
immer noch nicht die externen Angaben, die Source wird aber erkannt, 
sonst würde ich die nochfolgend nach der Initialisierungsroutine 
geschaltete LED Blinkfolge nicht angezeigt bekommen.
Gast #1408444
Lesenswert?

also ich bin dennoch der Meinung das du bei System Clock 
Selection:External Crystal Oscillator sehen soltlest!? Bei mir ist das 
jedenfalls so.
Clock Source steht auf 1kHz from internal .. Keine Ahnung warum, dem 
messe ich jedoch keine Bedeutung zu ;)
Gast #1409538
Lesenswert?

So also komischerweise sehe ich im I/O Viewer:

SCLKSEL[2:0] = 111

wobei bei der External Oscillator or Clock ein 011 stehen müsste.

Diese Funktion:
CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_XTAL_256CLK_ 
gc);
muss diesen falschen Eintrag generieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren