mikrocontroller.net

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


Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß



Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist damit:
#include <avr/eeprom.h>

uint8_t test EEMEM = 5;
uint8_t check EEMEM;

int main()
{
  uint8_t i = eeprom_read_byte( &test );
  eeprom_write_byte( &check, i );

  while( 1 )
    ;

  return 0;
}

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

Autor: Nummer 5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brown-out Fuse nicht eingeschaltet?

Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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()

Autor: Günni (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.