Forum: Mikrocontroller und Digitale Elektronik AVR Fuse Bits im C Code vertippt (.elf Datei).jetzt Problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

auf die Gefahr hin, dass ich hier gleich gesteinigt werde.
Mit ist beim Erstellen der "production Datei" .elf ein Fehler 
unterlaufen.
(Atmel Studio 6)

Habe im C- Code den Block HIGH und LOW der FuseFits falsch herum 
geschrieben.

Sowas habe ich geschrieben (hier die Zuordnung richtig)


// Fuse Bits setzen:

const char fusedata[] _attribute_ ((section (".fuse"))) = {0xFF, 
0xD9};    // Bedeutung s. Fuse Bits im Flash Menü
// Reihenfolge ist: {LOW, HIGH}



Anstatt soll:
low: 0xFF
high: 0xD9

WAR eingetragen:
low: 0xD9
high: 0xFF

beim Mega8 das Ganze leider mit der .elf Datei nun falsch herum 
geflasht.
Schreiben konnte ich noch, beim Verifizieren kam dann die Fehlermeldung, 
"nicht mehr erreichbar"


Soweit ich "sehe" wäre mit dieser falschen Einstellung Abweichung vom 
Soll:
der SPIEN deaktiviert, der Bootloader Bereich kleiner sowie ein anderes 
Quarz eingestellt. (Ext. Low Frequenz Crystal 1K)

-> SPIEN kann man doch per ISP gar nicht deaktivieren oder?
Datenblatt:
Notes: 1. The SPIEN Fuse is not accessible in Serial Programming mode.

-> Ext. Low Frequent Crystal 1K....
Datenblatt:
To use a 32.768 kHz watch crystal as the clock source for the device,

Quarz hatte ich sogar ein solches da :-)
Aber auch mit 5MHz, 8MHz, 14,7456MHz und 16MHz;
verschiedene Quarzoszillatoren (die 4 Beinigen) auch schon ausprobiert.

Bootloader hab ich eh keinen drauf.

Aber leider kann ich meinen Mega8 nicht mehr erreichen :-(

Ok, wenn SPIEN weg ist, dann entsorgen, aber kann man SPIEN per ISP 
deaktivieren?

Da ichs nicht kappiert habe wo der Fehler war, gleich mehrere nagelneue 
Mega8 dadurch zerschossen. :-(
Jetzt hab ich keinen mehr da. ;-)
Sonst hätte ich jetzt SPIEN manuell mal deaktiviert um zu schauen

Intelligenterweise hats auch einen Mega88a mit der .elf Datei für Mega8 
erwischt.

Das mit der .elf Datei war nur ein Versuch, da ich das vorher nie 
genutzt habe. Interesse halber...

Gibts dazu einen Trick meine zerschossenen Mega8 wieder benutzen zu 
können?

Gruß
Andreas

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
> Gibts dazu einen Trick meine zerschossenen Mega8 wieder benutzen zu
> können?

Wenn sonst nix mehr geht, dann geht doch noch: HVPP

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
> Ok, wenn SPIEN weg ist, dann entsorgen, aber kann man SPIEN per ISP
> deaktivieren?

> Notes: 1. The SPIEN Fuse is not accessible in Serial Programming mode.

Besorg dir halt einen Uhrenquarz.

Oliver

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:

> Wenn sonst nix mehr geht, dann geht doch noch: HVPP

Oder, im Einzelfall sehr viel billiger: ein neuer Mega8...

Nur wenn man damit rechnet, diesen (oder einen ähnlichen) Fehler auf 
eine 1000er-Stückzahl zu applizieren, rechnet sich die Investition in 
einen HV-fähigen Programmer...

Man könnte also alternativ die Idee angehen, solche Fehler schlicht zu 
vermeiden. Der Witz ist: das funktioniert dann auch bei 
1000er-Stückzahlen noch genauso...

von Frank G. (frank_g53)


Bewertung
0 lesenswert
nicht lesenswert
Schon gelesen ?
https://www.mikrocontroller.net/articles/AVR_Fuses

Andreas schrieb:
> Gibts dazu einen Trick meine zerschossenen Mega8 wieder benutzen zu
> können?

Den Chip statt seriell im Parallel-Modus programmieren.
Das geht mit dem STK500 ganz gut. Wird hier im Markt manchmal günstig 
angeboten.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> alternativ

Immer, bei jedem Schritt, Prototypen erstellen und sorgfältig testen.
Flüchtigkeitsfehler, in Serie, werden unangenehm.

Ich weiß:
Toller Spruch, wenn das Kind schon im Brunnen steckt ....

: Bearbeitet durch User
von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

https://www.mikrocontroller.net/articles/AVR_Fuses#SPIEN.2C_DWEN_und_RSTDISBL

Mit passender Taktquelle kannste dein Glück nochmal per ISP versuchen, 
setze dazu den Programmiertakt nach unten. Vorrausgesetzt du hast den 
Resetpin nicht disabled.

: Bearbeitet durch User
von Knorz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hast du nicht mal einen Freq-Generator, oder einen NE555?
Wo ein LF-Quarz laut Fuse dran sein sollte, geht auch ein
LF-Taktgenerator am PB6. Und Prgrammierung mit F = LF / 4.

Wenn nicht, haste halt mal Lehrgeld bezahlt. Nächstes mal
schaltest du vielleicht das Hirn ein, nachdem der erste Mega8
zerschossen ist...

von Axel S. (a-za-z0-9)


Bewertung
-1 lesenswert
nicht lesenswert
Andreas schrieb:
> auf die Gefahr hin, dass ich hier gleich gesteinigt werde.

Nö. Fehler passieren. Mein Vater sagt immer "man kann sich ruhig dämlich 
anstellen, wenn man sich zu helfen weiß".

Bedauerlicherweise wirst du dem zweiten Halbsatz nicht gerecht ...

> der SPIEN deaktiviert, der Bootloader Bereich kleiner sowie ein anderes
> Quarz eingestellt. (Ext. Low Frequenz Crystal 1K)
>
> -> SPIEN kann man doch per ISP gar nicht deaktivieren oder?
> Datenblatt:
> Notes: 1. The SPIEN Fuse is not accessible in Serial Programming mode.

Wenn es da steht, wirds schon stimmen.

> -> Ext. Low Frequent Crystal 1K....
> To use a 32.768 kHz watch crystal as the clock source for the device

Das betrifft nur den Fall, wenn du einen nackten Quarz anschließt. Ein 
externes Taktsignal kannst du immer einspeisen, so lange dessen Frequenz 
innerhalb des Bereichs liegt, in dem der AVR mit der verwendeten 
Betriebsspannaung überhaupt funktioniert.

> Aber leider kann ich meinen Mega8 nicht mehr erreichen :-(

Welchen Takt verwendet? ISP-Takt entsprechend angepaßt?

> Ok, wenn SPIEN weg ist, dann entsorgen

Nein.

> Gibts dazu einen Trick meine zerschossenen Mega8 wieder benutzen zu
> können?

Datenblatt lesen. HVPP.

Der einfachste praktische Weg dürfte sein, die Fuses per HVPP wieder in 
den Werkszustand zurückzusetzen. Google nach "AVR Fuse Resetter" oder 
"Fuse Doctor".

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> -> Ext. Low Frequent Crystal 1K....
Das wurde hier erst vor kurzem lang&breit diskutiert: 300 kHz an XTAL2 
(sic!) anschließen; da es ein älterer AVR8 ist, gehen vielleicht sogar 
bis zu 4 MHz.

(dass sich c-hater nicht erinnert ...?)

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> Der einfachste praktische Weg dürfte sein, die Fuses per HVPP wieder in
> den Werkszustand zurückzusetzen.

Wenn der ATmega8 nicht gesockelt ist, ist das ein ziemlicher Aufwand.
Einfacher dürfte sein, mit einem 2. AVR am Output Compare Ausgang 
~30..100kHz zu erzeugen. Ob man die an XTAL1 oder 2 einspeist, muß man 
ausprobieren. Der Quarz kann eingelötet bleiben.

von S. Landolt (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Mal eben ausprobiert, in Ermangelung eines ATmega8 mit einem 
ATmega16-16PU, der aber in diesem Bereich wohl sehr ähnlich aufgebaut 
ist: ISP-Programmierung mit low-fuse 0xD9, sowohl an XTAL1 als auch an 
XTAL2 geht noch ein eingespeister Takt von 500 kHz, 1 MHz geht nicht 
mehr.

von Andreas (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Hallo zusammen,

danke für die schnellen und vielen Antworten :-)
Habe alle meine 3 Mega8 sowie den Mega88a wieder ansprechbar.

Scheinbar war das Uhrenquarz, das ich gestern verwendet habe nicht 
"gut".
Eine anderes in meiner Bastelkiste gesucht und schließlich noch eines 
gefunden.
-> funktioniert :-)

Zum Testen versucht den SPIEN per ISP zu deaktivieren (diesmal gezielt)
geht (wie im Datenblatt erwähnt) nicht.
Somit brauch ich in Zukunft nicht mehr befürchten mich mit meinem ISP 
Programmer komplett auszusperren.
Außer den Reset Pin zu deaktivieren ;-)

Meine .elf Datei funktioniert nun auch wie sie soll.

Ich Depp hab gestern beim Schreiben der Fuse Bits in den C-Code nicht 
beachtet, dass die Anzeige im Flashmenü vom Studio 6 anders rum ist, als 
sie im Code platziert werden soll.
Dadurch dann High und Low vertauscht.
peinlicher Fehler :-(
(War aber auch mein erster Versuch die Fuse Bits im C-Code zu 
hinterlegen um eine .elf Datei daraus zu erzeugen).

Gruß
Andreas

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]
  • [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.