AVR Fuse Bits im C Code vertippt (.elf Datei).jetzt Problem

Gast #6352330
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
Gast #6352347
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...
Gast #6352366
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...
#6352415
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".
Gast #6352588
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 ...?)
#6352589
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.
Gast #6352631
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.
Gast #6353267
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

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