mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fusebits XMEGA


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc) ist die Funktion die Assmbler 
enthält, ich vergaß sie zu nennen ;)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok, hatte ich mir halt mal so auf die schnelle zusammengereimt ;)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Xmega Rookie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Umschalten der Main Clock Source ist geschützt durch das 
CCP-Register. Bevor das nicht $D8 entriegelt ist, geht hier gar nichts.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich jetzt nicht.
Im Example von Atmel wird dieser Schritt nicht zuvor gemacht.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst wahrscheinlich diese Zeile, die bei mir ganz offensichtlich 
fehlt:

CCPWrite( &CLK.CTRL, CLK_SCLKSEL_XOSC_gc);

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt sehe ich bei System Clock
Selection: undefined value

Clock Source: auch bei 1 Khz internal

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Fehler: jETZT PASST ALLES, hab den Debugger laufen lassen und die 
Register werden richtig beschrieben.

Danke für die Hilfe

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.