Forum: Compiler & IDEs Fuse-Bits Ursache für Nicht-Funktionieren?


von Daniel S. (dseichter)


Lesenswert?

Hallo zusammen,

vorweg, ich habe erst seit drei Wochen wieder angefangen, mich mit der 
Programmierung zu beschäftigen (vor 10 Jahren das letzte Mal). Aktuell 
arbeite ich mit ATmega328P-PU und wechsle "noch" zwischen C und LunaAVR 
hin und her, wobei ich sehr gerne C nehmen würde (warum noch hin und 
her, sie im folgenden)

Mir ist nun folgendes aufgefallen und bin etwas ratlos, ob diess 
Verhalten Ursache sein könnte, für das nicht funktionieren meiner UART 
Ausgabe:

Ich habe mir in LunaAVR ein Programm geschrieben, das mir Sensorwerte 
von PC0 und PC1 und über UART schreibt.
Nehme ich einen jungfräulichen Chip und programmiere diesen direkt in 
Luna, passt alles: Werte von PC0/PC1 werden mir sauber ausgegeben.

Ähnliches Programm in C (noch ohne ADC, lediglich Initialisierung der 
UART, Ausgabe von "Hallo"), diesmal aber in Atmel Studio 6:
Beim ersten mal flashen, erhalte ich eine Ausgabe (nicht das Wort 
"Hallo", sondern irgendwelche anderen Werte), aber immerhin eine 
Ausgabe.
Flashe ich nun ein zweites Mal (wegen falscher F_CPU als Ursache 
falascher BAUD-Rate), erhalte ich überhaupt keine Ausgabe mehr. Ändere 
ich die F_CPU wieder zurück, erhalte ich ebenfalls keine Ausgabe mehr 
(obwohl andere Werte als Hallo zuvor funktionierten).

Jetzt habe ich nachgeforscht und folgendes herausgefunden:
Fusebits werden zwischen avrdude (Luna AVR) und Atmel Studio anders 
geschrieben, allerdings anscheinend nur durch Atmel Studio und auch erst 
beim zweiten flashen.

Nun meine Fragen:
1) Ist das normal, dass Fusebits unterschiedlich gesetzt/interpretiert 
werden?
Jungfräulicher Chop geschrieben mit avrdude
LunaAVR/avrdude
lfuse = 0xff
hfuse = 0xde
efuse = 0x05
unmittelbar danach gelesen in Atmel Studio
lfuse = 0xff
hfuse = 0xde
efuse = 0xfd

wenn ich nun die efuse nicht wieder korrigere, läuft kein Programm mehr 
aus LunaAVR, wobei sich mir daraus meine zweite ergibt:

2) Liegt es genau daran, dass durch die Änderung der Fusebits mein 
Programm in C irgendwann "aussteigt"?

Kann ich es irgendwie verhindern, dass die Fusebits verändert werden 
können? In den Projekteinstellungen hab ich nichts gefunden.

Habe schon einige Zeit investiert, aber ich komme auf keinen grünen 
Zweig, ob ich dies fixieren kann und wie die efuse mit der UART Ausgabe 
zusammenhängen könnte.

Verwende noch das STK500, ein AVR ISP mkII kommt morgen, um meine 
Schaltung direkt programmieren zu können, ohne den Chip stets zu 
wechseln. Könnte aus Eurer Erfahrung heraus, die Fusebit-Umstellung 
dadurch sowieso hinfällig werden?

Ich hoffe, ich habe nicht zu verwirrend geschrieben, aber nach über 3 
Stunden (und die Tage zuvor waren auch nicht weniger) ist mein Latein 
langsam am Ende.

Vielen Dank,

Daniel

von Karl H. (kbuchegg)


Lesenswert?

Wenn ich deine beiden Fuse Konfigurationen in
http://www.engbedded.com/fusecalc
eingebe, sehe ich keinen Unterschied in der Konfiguration.

Wohl aber erhalte ich bei 0xFD eine Warnung
1
* Note that some numerical values refer to fuses containing undefined
2
bits (set to '1' here). Depending on the target device these fuse
3
bits will be read either as '0' or '1'. Verification errors will
4
occur if the values are read back with undefined bits set to '0'.
5
Everything is fine if the values read from the device are either the
6
same as programmed, or the following values (undefined set to '0'):
7
Extended: 0x05.

d.h. 0x05 und 0xFD sind für den µC identisch, weil einige Bits vom µc 
nicht benutzt werden. Die relevanten Bits sind aber gleich.
Details zu der Belegung der Extended Fuse: siehe Datenblatt

: Bearbeitet durch User
von Daniel S. (dseichter)


Lesenswert?

Hallo,

vielen Dank für Deine Analyse. Den Hinweis im fusecalc habe ich gesehen 
und auch wieder nicht (wahscheinlich hab ich es nur nicht verstanden und 
mich zu sehr auf den Unterschied in efuse konzentriert).

Werde mir heute Abend das Datenblatt nochmals explizit dahingehend 
ansehen, um das Thema nach und nach zu verstehen bzw. wie man diese 
Informationen entsprechend interpretiert.

Vielen Dank nochmals!

Daniel

von Peter D. (peda)


Lesenswert?

Daniel Seichter schrieb:
> Verwende noch das STK500, ein AVR ISP mkII kommt morgen, um meine
> Schaltung direkt programmieren zu können

Das ist Unsinn.
Die Signale am 6-poligen Kabel des STK500 sind identisch mit denen des 
AVR ISP mkII.
Zum Programmieren einer externen Schaltung reicht also eins von beiden.


Der Programmer im Atmel Studio macht immer nur das, was Du ihm sagst.
Die Fuses werden also nicht "versehentlich" geändert, wenn Du "Programm 
Flash" drückst.
Du mußt extra in das Fuse-Menü gehen, um sie zu ändern.

von Thomas E. (thomase)


Lesenswert?

Daniel Seichter schrieb:

> Könnte aus Eurer Erfahrung heraus, die Fusebit-Umstellung
> dadurch sowieso hinfällig werden?

Mit den Fusebits wird die interne Controllerhardware konfiguriert. U.a. 
die Taktquelle.
Stell dir das wie ein paar DIL-Schalter vor. Da so ein Controller aber 
keine Wartungsklappe hat, macht man das bei den AVRs mit den Fusebits.

Diese Einstellungen sind nicht abhängig vom Programmiergerät. Sondern 
von den Anforderungen der Schaltung und der Anwendung, die darauf laufen 
soll.

mfg.

von Daniel S. (dseichter)


Lesenswert?

Hallo Peter,

danke für Deine Antwort. Da ich gestern noch nicht dazu kam, mir dies 
genauer anzusehen, werde ich mir nochmals explizit das Menü ansehen, ob 
ich hier, durch was auch immer, eine Einstellung getätigt haben könnte, 
ob bspw. die Fusebits, wie beim Auslesen nach dem Schreiben durch 
LunaAVR, geschrieben werden.

Der AVRISP mkII war so oder so notwendig, da ich auf meinem Laptop 
leider keine serielle Schnittstelle mehr habe, aber jetzt wo Du sagst 
muss ich Dir in jedem Fall recht geben -> Kabel vom STK direkt auf die 
Schaltung und es würde gehen.

@Thomas
Deine Empfehlung, es mir wie Schalter vorzustellen, werde ich anwenden. 
Wie bereits geschrieben, habe ich seit 10 Jahren mich nicht mehr damit 
beschäftigt.

Ich hoffe, dass ich heute früher Feierabend machen kann, damit ich diese 
Baustelle endlich abschließen und mich um die eigentliche Programmierung 
kümmern kann.

viele Grüße,
Daniel

von Fritz B. (kleinfritzchen)


Lesenswert?

Hallo,
ich habe da ein Problem Mit Atmel Studio 6.1 und LUNAAVR.
Ich möchte gern beides paralel betreiben was jedoch anscheinend nicht 
geht?
Mache ch da was falsch bei der Instalation oder was muss ich tun damit 
es funktioniert?
Wenn ich Atmel Studio installiere kommen die AVRISP mk2 Treiber in den 
Ordner Jungo im Gerätemanager, dann funktioniert das Atmel Studio.
Installiere ich danach die Treiber für LUNA verschwindet AVRISP mk2 aus 
dem Ordner und wandert in den Treiberordner von LUNA im Gerätemanager. 
Dann funktioniert aber Atmel Studio nicht merh zum flashen.?
Kann mir bitte mal jemand da einen Rat oder Hinweis geben?

MfG Fritz

von Uwe (de0508)


Lesenswert?

Hallo Fritz,

LunaAVR installiert überhaupt keine Treiber!

Wie kommst Du zu dieser Meinung ?

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.