Forum: Mikrocontroller und Digitale Elektronik M103 Fuse setzen


von ee (Gast)


Lesenswert?

Hallo zusammen,
Ich bin relativ neu bei der Programmierung von uC. Ich hatte stets 
Probleme mit meinem Atmega128, wenn ich Unterprogrammaufrufe benutzte. 
Nun fand ich im Forum heraus, dass das Fusebit M103 gesetzt werden muss. 
Nur wie tue ich dies?
Ich arbeite mit AVR-Studio4 und JTAG

Herzlichen Dank für eure Antworten

von spess53 (Gast)


Lesenswert?

HI

>Nun fand ich im Forum heraus, dass das Fusebit M103 gesetzt werden muss.

Du willst den ATMega128 als ATMega103 laufen lassen?

>Ich bin relativ neu bei der Programmierung von uC. Ich hatte stets
>Probleme mit meinem Atmega128, wenn ich Unterprogrammaufrufe benutzte.

Liegt mit Sicherheit nicht an der M103-Fuse. Welche 
Programmiersprache?

>Nur wie tue ich dies?
>Ich arbeite mit AVR-Studio4 und JTAG

Programmierung mit JTAG im SPI-Mode aufrufen und fuse setzen.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

So wie alle Fuses:
Du gehst in dein Brennprogramm und suchst dir dort die Stelle (meistens 
ist es ein eigener Tab) in dem die Fuses bearbeitet werden können.
Fuses einlesen (wenn das das Brennprogramm noch nicht gemacht hat), die 
M103 umstellen und Fuses schreiben lassen.

> Liegt mit Sicherheit nicht an der M103-Fuse.

Kann schon sein.
Wenn er nicht weiß, wie man Fuses ändert, dann hat er sie auch noch nie 
angegriffen. Und die M103 ist beim Mega128 defaultmässig gesetzt, 
wodurch er sich wie ein Mega103 verhält. Typisches Kennzeichen: 
Unterprogrammaufrufe gehen in die Hose, weil der Stack an der falschen 
Stelle liegt (nämlich dort, wo kein Sram existiert. Was sich Atmel dabei 
gedacht hat, wissen auch nur die Produktmanager)

von ee (Gast)


Angehängte Dateien:

Lesenswert?

Danke schonmal für die rasche Antwort. So wie das verstanden habe, 
sollte ich bei dem im Bild gezeigten Menü, bei der entsprechenden Fuse, 
ein Häkchen setzen. Richtig?
Leider finde ich die entsprechende Fuse M103 gar nicht.

von spess53 (Gast)


Lesenswert?

Hi

>Leider finde ich die entsprechende Fuse M103 gar nicht.

Überhaupt ATMega128 ausgewählt?

Ich sage es noch einmal: Diese Fuse ist nicht dein Problem und löst 
auch nicht das von dir beschriebene Problem. Zeige lieber mal dein 
Programm das nicht funktioniert.

MfG Spess

von ee (Gast)


Lesenswert?

Aaah, ich hatte tatsächlich den falschen Device angewählt. Und es war 
doch das Problem, jetzt funktioniert mein Program nämlich.

Danke für eure Hilfe

von spess53 (Gast)


Lesenswert?

Hi

> jetzt funktioniert mein Program nämlich.

Das lässt schlimmes erahnen.

MfG Spess

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:

>> jetzt funktioniert mein Program nämlich.
>
> Das lässt schlimmes erahnen.

Aber nur über deine Kenntnis historischer AVRs. ;-)

Der ATmega128 war einstmals als Ersatz für den ATmega103 konzipiert,
und wurde/wird daher stets mit gesetzter M103C-Fuse ausgeliefert.
Das hat zur Folge, dass der Speicherbereich im Adressraum weiter
unten liegt (der ATmega103 hatte weniger IO-Register als der '128),
sodass der Stack (beim Compilieren des Codes für ATmega128) ins
Leere (oberhalb des vorhandenen SRAM) zeigt.  Damit stürzt das
Programm nach dem ersten Aufruf einer Funktion ab.

Daher ist es die erste Amtshandlung bei Benutzung eines ATmega128,
dass man dessen M103C-Fuse löscht (nicht setzt, denn gesetzt ist
sie ja schon).

von spess53 (Gast)


Lesenswert?

Hi

Vielleicht hat er auch nur Setzen (0) und Löschen (1) durcheinander 
gebracht. Dann würde es Sinn machen.

MfG Spess

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.