www.mikrocontroller.net

Forum: Compiler & IDEs Fuses im Source-Code setzen?


Autor: Volkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich mir bei ersten Versuchen einen ATMEGA128 durch
versehentliches, falsches Setzen der Fuses unbrauchbar gemacht habe,
bin ich da etwas vorsichtiger geworden. Ich tue mich mit diesen
"Tretminen" auch immer noch etwas schwer.
Kann man eigentlich durch Schreiben entsprechender Anweisungen in einem
Initialisierungspart eines Programmes die Fuses setzen? Hätte den
Vorteil, dass die Einstellungen, die ich standardmäßig verwenden möchte
immer wieder in einer Routine abgelegt und wieder verwendet werden
können.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nachdem ich mir bei ersten Versuchen einen ATMEGA128 durch
> versehentliches, falsches Setzen der Fuses unbrauchbar gemacht habe,
> bin ich da etwas vorsichtiger geworden.

Es gibt zwar AVRs, die man sich ,,zerfusen'' kann, aber der
ATmega128
gehört nicht dazu.  Insbesondere kann man sich auf normalem Wege über
ISP die SPIEN-Fuse selbst nicht löschen.

> Kann man eigentlich durch Schreiben entsprechender Anweisungen in
> einem Initialisierungspart eines Programmes die Fuses setzen?

Dafür hat sich noch niemand ein API überlegt.  Prinzipiell machbar
wäre es, wenngleich nur mit externer Unterstützung durch das
Programmiergerät.  (Technisch würde dann einfach noch ein ihex-File
mehr mit ,,herausfallen'', das zusätzlich mit in den Chip
programmiert
werden muss.)

> Hätte den Vorteil, dass die Einstellungen, die ich standardmäßig
> verwenden möchte immer wieder in einer Routine abgelegt und wieder
> verwendet werden können.

Nun, die Fuses musst du aber pro Chip nur einmal einstellen, das ist
dir klar, oder?  Das Ganze hat also eigentlich nur praktischen
Nährwert, wenn man dutzendweise neue Chips programmieren will.

Autor: Bolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann man eigentlich durch Schreiben entsprechender Anweisungen in
einem
>Initialisierungspart eines Programmes die Fuses setzen?

Nein.  Die Fuses sind von dem Programm, das auf dem Controller läuft,
prinzipiell nicht erreichbar.  Sonst würde es sich auch nicht um Fuses,
sondern einfach um I/O-Register handeln (die, die man mit "in" lesen
und mit "out" beschreiben kann).

Autor: Peter H. (spacedoc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo erstmal!
Ich muß leider widersprechen. Meines Wissens kann man zumindest die
Lock-Bit-Fuses aus dem Bootloader heraus setzen.
Dort muß ja der geschützte Flash neu beschrieben werden. Siehe auch
Figure 9 (ganz unten) auf Seite 15 im AVR230.

//====================================================================== 
=======
// Writes Lock Bits

spmWriteLockBits:
  mov    r0, r16
  ldi    r22, (1 << BLBSET) | (1 << SPMEN)
  rjmp  spmSPM


//====================================================================== 
=======
Dies ist ein Auszug aus dem SPM.asm

Anm.: Ist mein erstes Posting hier, wollte eigentlich im ersten Posting
nicht soweit die Klappe aufreißen. Mein Kompliment gilt an Leute hier
die aktiv mitmachen, ohne dieses Board wäre ich nie in so kurzer Zeit
soweit mit meinen C-Kenntnissen gekommen, was nicht heisst das ich
nicht noch `ne Menge zu lernen hätte.

MfG
SpaceDoc

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lock bits sind (offiziell) keine Fuses. ;-) (*)

Ja, die BLBs (boot lock bits) kann man aus dem Bootloader heraus
setzen (aber nicht löschen, wie alle Fuses).  Das ist übrigens eine
prima Schieß-dir-ins-Knie-Falle: man kann den Controller damit in
einen Zustand bringen, in dem auch der Bootloader nichts mehr ändern
darf, sodass man einen chip erase benötigt, um wieder was zu ändern --
der natürlich dann auch den Bootloader wieder löscht.

(*) Das ist mehr als nur Haarspalterei.  Dem OP ging's ja wirklich
darum, ob man die Fuses über den Bootloader manipulieren kann.  Das
geht nicht, man kann sie nur auslesen.

Autor: Peter H. (spacedoc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK da muß ich zustimmen.
Was die BLB un LB angeht muß man diese natürlich so setzen, daß ein
Beschreiben/Lesen mit SPM/LPM aus dem Bootloaderbereich möglich ist.

Aber zurück zum Thema:
Soweit ich weiß gab es eine Möglichkeit: so etwas wie eine *.ini Datei
(wo alle FUSES drinstehen) und beim Programmieren werden sie von der
Prog-Software automatisch gesetzt. Ist dann zwar nicht im Source-Code,
aber würde auch den erstrebten Effekt haben,mehrere neue µC
programmieren zu können ohne alles per Hand setzen zu müßen (mit der
Gefahr Mist zu bauen).

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.