www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM ATMega88p


Autor: Fox82 (Gast)
Datum:

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


int EPR_Modus EEMEM;
int DIM_value = 200;


int main (void) {   

DIM_value = eeprom_read_byte(&EPR_Modus);

while(1){    
if ( !(PIND & (1<<PIND2)) ){
DIM_value = 1023;
      // Speichern des Wertes im eeprom
      eeprom_write_byte(&EPR_Modus, DIM_value);
_delay_ms(2000);
}

OCR1A = DIM_value;

}
}

Autor: Sauger (Gast)
Datum:

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

Autor: Fox82 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganze Zahlen?

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>
#include <avr/eeprom.h>

uint16_t EPR_Modus EEMEM = 200;
uint16_t DIM_value;

int main (void) 
{   
  DIM_value = eeprom_read_word(&EPR_Modus);

  while(1) {    
    if( !(PIND & (1<<PIND2)) ) {
      if ( DIM_value != 1023 ) {
        DIM_value = 1023;
        // Speichern des Wertes im eeprom
        while ( !eeprom_is_ready() ) {}
        eeprom_read_word(&EPR_Modus, DIM_value);
      }
    }
    OCR1A = DIM_value;
  }
}

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Copy & Paste :(

        while ( !eeprom_is_ready() ) {}
        eeprom_write_word(&EPR_Modus, DIM_value);
               ^^^^^

Autor: Fox82 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse, es funktioniert! Vielen Dank.

Autor: Fox82 (Gast)
Datum:

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

Autor: Helfer (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/avr100.zip

MfG Spess

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.