PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit EEPROM ATmega8



rboek2
04.12.2005, 13:21
Ich habe ein Problem mit mein EEPROM. Ich schreibe ein Byte wie unterstehend im EEPROM:



sbic EECR, EEWE ;EEWE is zero when previous write cycle is finished
rjmp Eeprom_wait ;If not completed yet, then try again
cli ;Disable interrupts
ldi r18, 0 ;Set the address in the EEPROM to start writing
out EEARH, r18 ;Address in EEPROM, upper part, page (max 1)
ldi r17, 0 ;Set the address in the EEPROM to start writing
out EEARL, r17 ;Address in EEPROM, lower part, byte (max 255)
ldi r16, 3 ;Default running program modus
out EEDR, r16 ;EEPROM data register
sbi EECR, EEMWE ;Prepare EEPROM to write to
sbi EECR, EEWE ;Write to EEPROM
sbic EECR, EEWE ;EEWE is zero when previous write cycle is finished
rjmp Eeprom_wait ;If not completed yet, then try again
sei ;Enable interrupts

Wenn Ich diese byte schreibe und anschliessend auslese erhalte Ich den richtigen Wert (3). Wenn Ich allerdings eine reset durchfuehre scheint diese Wert verschwunden, Ich erhalte 0xFF.

Also es scheint als wuerde mein EEPROM sich als SRAM benehmen. Hat jemanden ein Idee was die Urscahe sein koente???

Vielen Dank im voraus,

Richard Boekamp

Marco78
04.12.2005, 13:28
ldi r18, 0 ;Set the address in the EEPROM to start writing
Das sieht für mich so aus, als ob du den Wert in Adresse 0 des EEPROM schreibst.
Diese Adresse kann nach einem Reset des AVR's gelöscht werden. Wie du selbst ja auch siehst.
Probier es mal ab Adresse 1.
Von Atmel gibt es auch eine AppNote zum Thema das 0 nicht genutzt werden sollte. Wenn du es nochmal schwarz auf weiß haben möchtest musst du dir die mal raussuchen. Die Nr. der AppNote hab ich leider nicht im Kopf.

rboek2
04.12.2005, 13:48
Danke Marco,

Ist aber leider nicht die Loesung fuer mein Problem. Ich werde allerdings bemerken und weiterhin praktizieren dass Ich die Adresse 0 nicht benutzen sollte.

Hat sonst noch jemanden ein Idee?

Vielen Dank im voraus,

Richard Boekamp.

linux_80
04.12.2005, 14:29
Hallo,
es gibts doch auch ein Fusebit, das sich EESAVE nennt,
weiss allerdings nicht ob das auch für einen normalen Reset von Bedeutung ist !?

rboek2
04.12.2005, 15:06
Nein, ist es wahrscheinlich nicht. Trotzdem ist diese Fuse die Antwort auf mein Problem.

Und Ich kann uebrigens auch ohne Probleme EEPROM Adresse 0 verwenden.

Recht vielen Dank fuer Ihre Reaktionen. Ich kann wieder weiter!! :)

Mit freundlichen Gruessen,

Richard Boekamp