Forum: Mikrocontroller und Digitale Elektronik EEPROM-Wert wird nicht gespeichert


von Günni (Gast)


Lesenswert?

Morgen,

irgendwie wird mein EEPROM-Wert nicht gespeichert. Als Controller 
verwende ich einen Atmega88 und den GCC Compiler mit dem AVR-Studio.

Ich ich habe die EEPROM-Variable folgendermaßen deklariert:

volatile uc_8 Just _attribute_ ((section (".eeprom")));

Im AVR-Studio habe ich unter Memory Settings folgende Definitionen 
gemacht:

Memory Type: EEPROM / Name: .eeprom / Adress: 0x380

So müsste die Variable doch an der Speicheradresse 0x380 gespeichert 
werden.

Nach einem Reset stehen dort auch die richtigen Werte, nur sobald die 
Spannung einmal abgeschaltet und wieder eingeschaltet wird, ist der Wert 
futsch.

Kann mir einer sagen, woran das liegen kann?

Gruß



von Karl H. (kbuchegg)


Lesenswert?

Was ist damit:
1
#include <avr/eeprom.h>
2
3
uint8_t test EEMEM = 5;
4
uint8_t check EEMEM;
5
6
int main()
7
{
8
  uint8_t i = eeprom_read_byte( &test );
9
  eeprom_write_byte( &check, i );
10
11
  while( 1 )
12
    ;
13
14
  return 0;
15
}

Einfach im AVR Studio ein neues Projekt anlegen.
Keine Memory Settings oder sonstwas angeben.

von Nummer 5 (Gast)


Lesenswert?

Brown-out Fuse nicht eingeschaltet?

von Günni (Gast)


Lesenswert?

Wie kann ich der Variablen "check" direkt einen Wert zuweisen?

Mit eeprom_write_byte( &check, 128 ); klappt dass nicht.

Auch

unsigned int z = 128;
eeprom_write_byte( &check, z );

klappt nicht...

von Karl H. (kbuchegg)


Lesenswert?

Günni wrote:
> Wie kann ich der Variablen "check" direkt einen Wert zuweisen?
>
> Mit eeprom_write_byte( &check, 128 ); klappt dass nicht.

Klappt bei mir einwandfrei

von Günni (Gast)


Lesenswert?

Jetzt klappt es bei mir auch, Danke!

Ist es eigentlich möglich, einen bestimmten Speicherbereich des EEPROMS 
auszulesen, also nur mit angabe der Adresse?

von Karl H. (kbuchegg)


Lesenswert?

Günni wrote:
> Ist es eigentlich möglich, einen bestimmten Speicherbereich des EEPROMS
> auszulesen, also nur mit angabe der Adresse?

Meinst du jetzt per Programm oder willst du über deinen
ISP-Programmer auslesen.

Per Programm:
Klar. Mach ein unsigned char Array in der benötigten Größe
und benutze eeprom_read_block()

von Günni (Gast)


Lesenswert?

Hallo,

irgendwie hab ich bei mir festgestellt, das der Wert nicht im EEPROM 
sondern im SRAM abgelegt wird.

Ich benutze den JTAGICEmkII mit dem AVR-Studio. Im Watch Fenster wird 
die Variable mit der Location SRAM angezeigt. Wie kann das sein?

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.