EEprom liefert beim einschalten falschen Wert (FF)

Gast #2358910
Lesenswert?
• ▲
▼
Hallo,

ich bin ein wenig ratlos bei diesem Phänomen. Im EEprom des ATmega128 
habe ich Stellwerte gespeichert und wenn ich die Schaltung einschalte, 
sprich 5V anlege, wird nicht der Wert 666 gelesen, sondern FFF. Ich habe 
das Flash nicht neu geschrieben und das Fusebit EESave ist gesetzt. 
Reset gibt dann den richtigen Wert zurück. Ich habe zuerst die 
Defninition eeprom_busy_wait() und dann meine ...mega128 probiert, in 
der Hoffnung, das hier nicht auf ready EEprom gewartet wird --

#define eeprom_busy_wait() do {} while (!eeprom_is_ready())
#define eeprom_busy_wait_mega128() do {} while (EECR & (1<<EEWE));
unsigned int        DAC_value_U_NT2_EE[1] EEMEM, DAC_value_U_NT1_EE[1] 
EEMEM, DAC_value_I_NT2_EE[1] EEMEM, DAC_NT2_U_Mult_EE[1] EEMEM;

 void EEprom_value_ini() //(unsigned int *) == Adresse Pointer set
{
  eeprom_busy_wait_mega128();
  DAC_value_U_NT2 = eeprom_read_word((unsigned int 
*)DAC_value_U_NT2_EE[1]);
  DAC_value_U_NT2 &= 0x0fff;    // 16(12) bit Wert aus EEprom lesen und 
oberes Nibble entfernen
  sprintf(buffer,"U%4x\t",DAC_value_U_NT2);
  UART_0_Text_Ram(buffer);

  eeprom_busy_wait_mega128();
  DAC_value_I_NT2 = eeprom_read_word((unsigned int 
*)DAC_value_I_NT2_EE[1]);
  DAC_value_I_NT2 &= 0x0fff;    // 16(12) bit Wert aus EEprom lesen und 
oberes Nibble entfernen. Wichtig da U und I addiert werden für Ausgabe 
24 bit DAC
  sprintf(buffer,"I%4x\t",DAC_value_I_NT2);
  UART_0_Text_Ram(buffer);
}

funktionieren leider beide gleich. Tool AVR Studio 5. Was mache ich 
falsch.

Danke schon mal für Eure Hilfe und Gruß Bernhard
Gast #2358939
Lesenswert?
• ▲
▼
>  DAC_value_U_NT2 = eeprom_read_word((unsigned int *)DAC_value_U_NT2_EE[1]);

Dass du da den cast brauchst oder benutzt sollte dir zu denken geben.

unsigned int DAC_value_U_NT2_EE[1] EEMEM;

Ist ein Feld aus unsigned int mit einem ([1]) Element im EEPROM.

Ansprechen kannst du das erste (und einzige Element) mit:

DAC_value_U_NT2 = eeprom_read_word(&DAC_value_U_NT2_EE[0]);

oder

DAC_value_U_NT2 = eeprom_read_word(DAC_value_U_NT2_EE);

Aber nicht mit deiner Variante. Die liest irgendwas.
Gast #2359059
Lesenswert?
• ▲
▼
Hallo Helfer und Julian,

danke für Eure Hilfe. Ich habe es mit & und mit BOD 2V7 getestet und 
Tata - es funktioniert. Nur jetzt habe ich diese Meldung erhalten.
 Target "PostBuildEvent" skipped, due to false condition; 
('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Diese Meldung verschwindet, wenn (unsigned int*)... verwendet wird. So 
wurde es hier Forum beschrieben. Sorry, ich habe noch nicht alles 
verstanden, da ich erst seit kurzem in C programmiere.

Gruß Bernhard

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.