M103 Fuse setzen

Gast #2474361
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
Gast #2474370
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
#2474371
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)
Gast #2474439
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.
Angehängte Dateien:
Gast #2474451
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
Moderator Persönliche Seite #2474547
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).

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