Forum: Compiler & IDEs Howto set/reset AVR Fuses ( mit Winavr ) ?


von Stefan Sczekalla (Gast)


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

von Jörg Wunsch (Gast)


Lesenswert?

Datenblatt lesen, die hexadezimalen Fuse-Werte zusammenrechnen, dann
"avrdude -t" benutzen.

von Daniel (Gast)


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...

von Jörg Wunsch (Gast)


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).

von Stefan Sczekalla (Gast)


Lesenswert?

@ Jörg:

Ok. -

Wäre es möglich und - wuerde es Sinn machen - das in MFile zu
integrieren ?

@ Daniel:

Thanx für this altenative Ich will have a blick on it ;-)

Grüsse,

         Stefan

von Jörg Wunsch (Gast)


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.

von Wener Boellmann (Gast)


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.

von Jörg Wunsch (Gast)


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.

von mthomas (Gast)


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).

von Werner Boellmann (Gast)


Lesenswert?

Anders ausgedrückt:

Wenn ich z.B den Wert 55 als Wert für eine fuse mit avrdude
programmiere, lese ich nachher 55 aus oder AA?
Ich habe da schlechte erfahrungen gemacht :(

von Jörg Wunsch (Gast)


Lesenswert?

Wenn du 55 schreibst, liest du auch 55.  Allerdings bemühst du dann
das Datenblatt um herauszufinden, was die 55 genau bedeutet.

von Stefan Sczekalla (Gast)


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

von Jörg Wunsch (Gast)


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.

von Stefan Sczekalla (Gast)


Lesenswert?

Hallo Jörg,

> (...)

Ja so in etwa oder eben auch per #define Fuse_Jtag active

Grüße,

Stefan

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.