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
Hallo erstmal. Bei dem XMega ist es unmöglich, sich per Fuseumstellung auszusperren. Sämtliche System-Clock-Einstellungen werden per Firmware zur Laufzeit gemacht. Lediglich die Startup-Zeit der Clock kann per Fuses geändert werden. Der Controller selbst startet immer mit dem internen 2Mhz Oszillator.
>>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?
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!
CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc) ist die Funktion die Assmbler enthält, ich vergaß sie zu nennen ;)
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?
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....
achso im AVR Studio in der I/O view das "Clock System" anschauen, da steht ja dann deine Einstellung schön lesbar drin, dann weisst du auch das es wirklich geklappt hat !
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
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!
Die externe Clock muß keine Rechteckspannung sein, sie muß nur mindestens +-0.5V um Vcc/2 herum schwingen und einen Duty-Cycle um 50% haben. Die Signalform ist relativ egal.
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!
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.
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 ;)
Das Umschalten der Main Clock Source ist geschützt durch das CCP-Register. Bevor das nicht $D8 entriegelt ist, geht hier gar nichts.
Verstehe ich jetzt nicht. Im Example von Atmel wird dieser Schritt nicht zuvor gemacht.
Du meinst wahrscheinlich diese Zeile, die bei mir ganz offensichtlich fehlt: CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc);
Jetzt sehe ich bei System Clock Selection: undefined value Clock Source: auch bei 1 Khz internal
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.
Mein Fehler: jETZT PASST ALLES, hab den Debugger laufen lassen und die Register werden richtig beschrieben. Danke für die Hilfe
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.