Forum: Mikrocontroller und Digitale Elektronik AVRDUDE & Fuses


von Jan (Gast)


Lesenswert?

Hi

Ich habe noch nicht ganz verstanden, wie man mit AVRDUDE die Fuses
programmiert, weil ich dies bis jetzt nur mit dem AVR-Studio gemacht
habe.
Ich habe mir bis jetzt avrdude (nicht WinAVR) runtergeladen und mir die
Dokumentation angeguckt, lese dort aber immer nur von lfude, hfuse und
efuse.
Wie "rechne" ich jetzt CKSEL Bits in das von AVRDUDE verwendete
Format um?
Könnte mir jemand ein Beispiel zeigen (am besten wie ich den ATMega8515
auf einen Externen Quarzoszillator umstelle)?
Danke!

von Tobi (Gast)


Lesenswert?

schau mal in appnote 61 von atmel ganz am ende, da steht welche h/lfuses
welche bits enthalten

von Jan (Gast)


Lesenswert?

Danke, das hat geholfen!

von Zotteljedi (Gast)


Lesenswert?

Du liest die Fuses aus, rechnest sie in Binärzahlen um, und schaust ins
Datenblatt, was sie bedeuten, um erstmal ein Gefühl dafür zu kriegen,
was Du machst.

Beispiel an meinem ATMega8:

avrdude> read hfuse
>>> read hfuse
0000  d9

avrdude> read lfuse
>>> read lfuse
0000  e4

Das ist also 11011001 (h) 11100100 (l) in binär. Also ein Blick ins
Datenblatt (in dem Falle Seite 220):

High Bit:

RSTDISBL     1 (1)
WDTON        1 (1)
SPIEN        0 (0)
CKOPT        1 (1)
EESAVE       1 (1)
BOOTSZ0      0 (0)
BOOTSZ1      0 (0)
BOOTRST      1 (1)

Low Bit:

BODLEVEL     1 (1)
BODEN        1 (1)
SUT1         1 (1)
SUT0         0 (0)
CKSEL3       0 (0)
CKSEL2       1 (0)
CKSEL1       0 (0)
CKSEL0       0 (1)

In Klammern jeweils der default-Wert laut Datenblatt (wie man sieht
habe ich nur an der Clock gespielt). Bei mir ist also die interne Clock
auf 0100 gesetzt, das ist 8 MHz (Table 9, Seite 28).

Will ich jetzt zum Beispiel einen Takt von 1 MHz haben, dann wähle ich
die Stellung 0001 (die auch Default ist), und setze dazu das gesamte
Byte auf 11100001 (in Hex 0xe1), z.B. durch 'w lfuse 0 0xe1'. Scheint
im Nachhinein auch ganz logisch, die Clock-Options sind das untere
Nibble, und das wird von 4 (0100) auf 1 (0001) gesetzt, also aus 0xe4
mach 0xe1.

Um Dir also die genauen Werte zu sagen, die Du brauchst, muß man den
Rest der Fuse kennen und das passende Datenblatt haben. Aber einfach
mal selbst basteln, lies es einfach aus und schau, ob es sinnvoll
erscheint. Wenn ja, dann hast Du's wohl richtig gemacht, und kannst an
das Ändern und Schreiben gehen.

Aber dran denken, daß 0 für "programmed" und 1 für "not programmed"
steht (steht aber auch immer als Binärzahlen im Datenblatt), also nicht
erschrecken, wenn RSTDISBL (also das Disablen von RESET) auf 1 steht
und es gar auf 0 ändern! 1 heißt hier "not programmed", und das ist
es, was man vermutlich will.

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.