Howto set/reset AVR Fuses ( mit Winavr ) ?

Gast #180549
Lesenswert?

Hi,

ich bitte das "halb englische" Subject zu entschuldigen, denke aber
das der Betreff die Frage am besten beschreibt:

ich bin beim lesen in den FAQ's verschiedentlich darüber gestolpert,
das das enablen der JTAG Funktionalität bestimmte Pins in ihrer
Funktion überschreibt.

... oder man den falschen Oszilatro wählen kann ...

Bisher hab ich wohl Glück gehabt - aber - wo kann ich den "Vorgeben"
welche Fuses gesetzt bzw. gelöscht sein sollen ?

ich sitz jetzt gerade nicht vor meinem Entwicklungsrechner - kann mich
aber auch nicht erinnern, z.B. im MFile Editor irgendwas in Richtung
Fuses gesehen zu haben - was dann Parameter für avrdude setzen würde.

Ich sehe nur das beim Programmieren wohl die Fuses "gesichert" und
hinterher wieder geschrieben werden...

Bitte erleuchtet mich :-)

Grüße,

     Stefan
Gast #180551
Lesenswert?

Also die Fuses enablest du total easy wenn du bspw. Ponyprog used und
dann auf den einen Knopf pressed um die Fuses zu setten. Aber
Attention: Wenn du Blasenschwäche hast pass auf, dass du dich nicht
verpissed...
Gast #180552
Lesenswert?

Oh, "ponyprog" und "total easy"?  Das erinnert mich an die vielen
Berichte über ATmega8 mit versehentlich gesetzten RSTDSBL-Fuses (ganz
zu schweigen von den noch mehr Berichten über falsche Oszillator-
Fuses, aber das ist wenigstens nicht völlig tödlich).
Gast #180554
Lesenswert?

Nein, Mfile ist nicht der geeignete Ort dafür.  Die Fusebits muss man
ja nur einmal setzen, nicht bei jedem `make program'.

Das avrdude-gui wäre dafür der geeignete Ort, aber das ist noch
ziemlich alpha derzeit.
Gast #180555
Lesenswert?

Mir würde ja schon helfen wenn irgendwo stehen würde (sinngemaess)

   Wenn die fuse X gebrannt werden soll
   (Zustand vorher="1", Zustand nachher="0")
   dann muss das entspechendende Bit im zu
   programmierenden "Byte" gesetzt/gelöscht sein.

   avrdude ... -U lfuse:w:"Byte"

Zum ausprobieren (und evtl. vernichten) sind mir die AVRs eigentlich zu
schade.
Gast #180556
Lesenswert?

Komisch, ich habe es mit Datenblatt lesen bislang immer noch
verstanden, was man als Fuse programmieren muss.  Klar, man liest sich
das dreimal durch -- aber im Gegensatz zum Geklicker von Ponyprog ist
man sich danach auch sicher, was man tut.
Gast #180557
Lesenswert?

Es steht wirklich im Datenblatt. Abschnitt memory programming. Im
Zweifel einfach im terminal-mode avrdude ... -t die aktuellen fuses
eines neuen AVR auslesen (dump lfuse, dump hfuse....) und mit dem
Default-Werten laut Datenblatt vergleichen, das bringt etwas
"Gefuehl" fuer die Angaben und klärt auch die Verwirrung zwischen
0/1, gesetzt/nicht-gesetzt und programmiert/nicht-programmiert. Bei
aktuellem avrdude (cvs-Version aus WinAVR 2/05) zum schreiben von
fuses/locks sicherstellen, dass der "safemode" ausgeschaltet ist
(Option -u).
Gast #180560
Lesenswert?

Hallo Jörg,

... hm - ich denke schon, das die Info zum Projekt gehört.

Du hast insofern recht, das man sie nicht jedesmal setzten muss - man
könnte ja erst mal die Fuses lesen - und sie nur setzten wenn sie
"falsch" sind.

Es hätte aber den Vorteil, dass wenn man ein Projekt "später" mal
wieder öffnet, - man jedoch einen neuen Chip gleichen Typs benutzt (
und per isp programmieren möchte ) - man so auch "automatisch" die
Fuses für das Projekt korrekt gesetzt bekäme.

Sonst muss man das irgendwo händisch Verwalten.

Grüße, Stefan
Gast #180561
Lesenswert?

Ich hatte schon einmal die Idee, ob man sie nicht irgendwie im
C-Quellcode mit verwalten könnte, so in der Art

FUSES(0x42, 0x33, 0x88);

wobei sich die Werte natürlich auch symbolisch setzen lassen könnten.
Sollte über den C-Präprozessor machbar sein.  Günstig wäre natürlich
eine von Atmel nominierte Syntax dafür, die dann jeder
Compilerhersteller umsetzen kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren