Forum: Mikrocontroller und Digitale Elektronik Suche ein Beispiel Fuse Bits für Xmega


von Alex (Gast)


Lesenswert?

Hallo,

ich versuche zum ersten Mal die Fuse Bits im Xmega A1 zu setzen (mit AVR 
Studio 5.1),
habe nur nen AVR-One-Debugger und kein STKxxx und deshalb etwas Muffe, 
dass ich auf dem Crumb-Board den Prozessor "zer-fuse"

Habe <avr/fuse.h>: Fuse Support durchgelesen, habe aber Zweifel, dass 
das genau so beim Xmega + Studio 5.1 übertragbar ist.
Hätte jeman ein kleines Beispiel?

Außerdem gibt es die Einstellung "preserve EEPROM" unter Tools - Memory 
settings. Diese Einstellung gibt doch dann einen Konflikt mit der 
FUSES-Definition?

Der (Kommandozeilen-) Aufruf "avr-objdump -s -j .fuse <ELF file>"
scheint nicht mehr (so) zu funktionieren. Einzige Meldung: "<ELF file> : 
file format elf32-avr" Wie kann man sich das fuse-segment anzeigen 
lassen?

Grüße Alex

von Alex (Gast)


Lesenswert?

Da leider niemand geantwortet hat,
beatworte ich das für andere jetzt selbst...

Beispiel:

#define  WATCHD_C_WINDOW_8MS  0x0F
#define  WATCHD_TIMEOUT_8S  0xFA
#define  BOD_ACT_CONTINOUS  (unsigned char)~_BV(2) // BOD: act.:
                                                // contin, pdn: disable
FUSES =
{
        .byte[0] = 0,  // JTAG-ID
        .byte[1] = (WATCHD_C_WINDOW_8MS & WATCHD_TIMEOUT_8S),
        .byte[2] = BOD_ACT_CONTINOUS,
        .byte[3] = 0xFF, // reserved
        .byte[4] = FUSE_JTAGEN,  // ext. Reset, 1k Startup= 0,
                                // WD kein lock, JTG enable
        .byte[5] = FUSE_EESAVE & FUSE_BODLVL2 // BOD ~2,7V für 33MHz
};

Das reicht schon.
Fuses.h muss nicht angegeben werden, da schon durch <avr/io.h> 
includiert  wird.
Auch FUSE_MEMORY_SIZE muss nicht angegeben werden!

Vorsicht: Im Family-Datenblatt ist ein Fehler (siehe Errata A1)!

"BODACT fuse location is not correct
The fuses for enabling BOD in active mode (BODACT) are located at 
FUSEBYTE2, bit 2 and 3 and not in FUSEBYTE 5 as described in the XMEGA A 
Manual.."

Die in iox.h definierten Konstante "FUSE_..." sind sicherer anzuwenden, 
da vergessene Werte ungesetzt (1) bleiben und werden verundet: Z.B: 
FUSE_EESAVE & FUSE_BODLVL2 & FUSE_BODLVL1.

PS:
Brownout Spannungen:
Die im Datenblatt angegebenen Spannungen sind nicht genau.
Die Namen der in iox.h definierten Konstanten enum BODLVL_enum
stimmen deutlich besser - die anderen Bits sind aber 0 - Vorsicht!
Meine Messergebnisse habe ich mit Xmega 128A1 bei Raumtemperatur 
gemacht.

BOD Datenblatt  BODLVL_enum  U fallend U steigend
000  3.2  "- - -"          k.A.     k.A.
001  2.9  BODLVL_3V2_gc  3,25     3,29
010  2.7  BODLVL_2V9_gc  2,95     3,00
011  2.4  BODLVL_2V6_gc  2,67     2,74
100  2.2  BODLVL_2V4_gc  2,41     2,46
101  2.0  BODLVL_2V1_gc  2,15     2,19
110  1.8  BODLVL_1V9_gc  1,9     1,93
111  1.6  BODLVL_1V6_gc  1,62     1,64

Das heisst, dass der Wert "000" wahrscheinlich dazu führt, dass der 
Prozessor nicht mehr aus dem Reset heraus kommt - Vorsicht!

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.