Forum: Mikrocontroller und Digitale Elektronik Fuses und EEPROM - zusammenhängender Speicherbereich ?


von Hendrik L. (lbd)


Lesenswert?

Hallo zusammen,

habe folgendes Problem:

Programmiere einen Mega2561. Das Programm beschreibt u.a. das EEPROM.

Nach bestimmten Codemodifizierungen (rund um die EEPROM-Routinen) 
startet das Programm nicht mehr 8definitiv ein Boot-Problem).
Nehme ich die Änderungen zurück, ist alles wieder o.k. - der MC ist also 
hardwaretechnisch o.k..

Auch beobachte ich, dass der EEPROM - Inhalt durchgängig von xFF auf x00 
verändert worden ist, obwohl ich einen solchen Befehl nicht programmiert 
hatte.
Der Fehler trat definitiv dann auf, wenn ich die Sprungadresse "REPEAT:" 
(mit goto) in einer Function mit EEPROM Verarbeitung hatte (ja, ja, ich 
weiß, gotos sind out, aber ich wollte nur etwas austesten - keine Dauer 
Implementierung.)
Nach Ausschalten der Optimierung lief das Programm übrigends einwandfrei 
..

Ohne tiefer nach Fehlern zu forschen, eine generelle Frage:

Ist es möglich, durch falsch programmierte EEPROM Aufrufe sich die Fuses 
zu zerschießen ? Grenzen die Speicheradressen aneinander, oder sind sie 
gegeneinander geschützt ?

Danke.

von dreilira (Gast)


Lesenswert?

Hi,
soweit mir bekannt, kann ein Mega/Tiny sich nicht selbst die Fuses 
verändern, das geht nur über einen externen Programmer ,ISP oder HV.

Gruß
Ralf

von Hendrik L. (lbd)


Lesenswert?

dreilira schrieb:
> Hi,
> soweit mir bekannt, kann ein Mega/Tiny sich nicht selbst die Fuses
> verändern, das geht nur über einen externen Programmer ,ISP oder HV.
>
> Gruß
> Ralf

Was ist mit CKDIV8 ? Kann von außen und auch vom Programm gesetzt werden 
(wobei Porgramm vorrangig ist).

Grüße

von SF (Gast)


Lesenswert?

>Was ist mit CKDIV8 ? Kann von außen und auch vom Programm gesetzt werden
>(wobei Porgramm vorrangig ist).
Die Fuse CKDIV8 setzt nur das interne CLKPR – Clock Prescale Register. 
Dessen Inhalt kann später die Software verändern. Es ist aber nicht 
möglich, das die Software den Wert der CKDIV8 Fuse verändert!

>The CKDIV8 Fuse determines the initial value of the CLKPS bits. If CKDIV8
>is unprogrammed, the CLKPS bits will be reset to “0000”. If CKDIV8 is
>programmed, CLKPS bits are reset to “0011”, giving a division factor of 8
>at start up.

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.