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
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
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)
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.
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
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
Hi
> jetzt funktioniert mein Program nämlich.
Das lässt schlimmes erahnen.
MfG Spess
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.