mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVRDUDE & Fuses


Autor: Jan (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das hat geholfen!

Autor: Zotteljedi (Gast)
Datum:

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

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.