EEPROM ATMega88p

Gast #2111237
Hallo Zusammen,

ihr könnt mir sicherlich weiterhelfen:

ich habe den Code unten, bei Knopfdruck PIND2 sollte den Wert 1023 in 
das eeprom Register EPR_Modus geschrieben werden. Wenn der Controller 
anschliessend wieder angeschaltet wird, dann sollte dieser Wert im 
eeprom in die Variable DIM_value übernommen werden. Also nicht mehr 200 
wie definiert sondern 1023.

Leider klappt es nicht, was mach ich falsch? Danke für die Hilfe.

Gruss Fox82
1
 
2

3

4
int EPR_Modus EEMEM;
5
int DIM_value = 200;
6

7

8
int main (void) {   
9

10
DIM_value = eeprom_read_byte(&EPR_Modus);
11

12
while(1){    
13
if ( !(PIND & (1<<PIND2)) ){
14
DIM_value = 1023;
15
      // Speichern des Wertes im eeprom
16
      eeprom_write_byte(&EPR_Modus, DIM_value);
17
_delay_ms(2000);
18
}
19

20
OCR1A = DIM_value;
21

22
}
23
}
Gast
Mahlzeit,

>DIM_value = eeprom_read_byte(&EPR_Modus);
>eeprom_write_byte(&EPR_Modus, DIM_value);

wenn du mir verrätst wie man in einem Byte (8 Bit) 10 Bit (1023) 
Unterbringt, gibt es zur Belohnung eine Dose Thunfisch.

MfG
Gast
1
#include <avr/io.h>
2
#include <avr/eeprom.h>
3

4
uint16_t EPR_Modus EEMEM = 200;
5
uint16_t DIM_value;
6

7
int main (void) 
8
{   
9
  DIM_value = eeprom_read_word(&EPR_Modus);
10

11
  while(1) {    
12
    if( !(PIND & (1<<PIND2)) ) {
13
      if ( DIM_value != 1023 ) {
14
        DIM_value = 1023;
15
        // Speichern des Wertes im eeprom
16
        while ( !eeprom_is_ready() ) {}
17
        eeprom_read_word(&EPR_Modus, DIM_value);
18
      }
19
    }
20
    OCR1A = DIM_value;
21
  }
22
}
Gast
Habe trotzdem noch eine Frage:
Es wird ja jetzt immer an der gleichen Stelle vom EEPROM geschrieben, 
daher es hält ja 100'000 Schreib / Lesezyklen aus. Kann man unendlich 
Lesen, oder bezieht sich das nur auf das Schreiben?

Könnte man den Speicherort Randomisieren?
Gast
Die typ. Anzahl der Zugriffe im Datenblatt beziehen sich aufs Schreiben 
und Löschen, nicht aufs reine Lesen.

Klar kannst du durch geschickte Programmierung das EEPROM schonen. Z.B. 
wie oben, nur Schreiben, wenn das Ziel den Wert noch nicht enthält.

Oder du nutzt aus, dass das gelöschte EEPROM definierte Werte (0xFF) 
enthält und du andere Werte reinschreibst. Stößst du beim Durchsuchen 
des EEPROMs auf den ersten ungelöschten Wert, könnte das z.B. dein 
zuletzt geschriebener Wert sein.

Es gibt sicher noch mehr Verfahren. I.d.R. gibt es auch Appnotes dazu.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.