Werte in EEPROM an bestimmte Stelle schreiben

Gast #1564861
Hallo,

ich beschäftige erst seit einigen Wochen mit der µC-Controller-Thematik. 
Daher bitte ich möglicherweise etwas triviale Fragen meinerseits zu 
entschuldigen. Die Suchfunktion hat mir leider keine Ergebnisse 
gebracht. Vielleicht habe nach dem falschen Begriff gesucht.

Ich habe an meinem Atmega32 acht analoge Temp.fühler angeschlossen. Die 
Auswertung und Ausgabe über LCD als auch über USART funktioniert 
einwandfrei. Ich verwende das AVRStudio und avr-gcc.

Nun möchte ich mit dem EEPROM beschäftigen, um später in bestimmten 
Zeitintervallen dort meine Messwerte abzuspeichern und in regelmäßigen 
Abständen über den USART an den PC zu übertragen.

Die Messwerte sind vom Typ uint8_t und nehmen daher im EEPROM in Byte 
Platz ein?!?!

Um möglichst wenig Platz im EEPROM zu verschwenden, muss ich dort die 
Messwertdaten in einer bestimmten Reihenfolge ablegen können. Durch die 
systematische Speicherung der Daten kann ich dann die einzelnen Daten 
den Sensoren bei der Ausgabe über den USART zuordnen. Soweit zumindest 
meine Überlegungen...

Ich habe auch schon einzelne Werte in den EEPROM gespeichert, aber eine 
konkrete Adressierung des Speicherplatzes fehlt.
Gibt es also einen EEPROM-write Befehl, bei dem ich die Adresse im 
EEPROM fest vorgeben kann?

Falls ja, kann man die Adresse mit Hilfe einer Zählschleife bis 1024 (da 
der Atmega32 1024 Byte EEPROM besitzt) zählen lassen? Somit wüsste man 
dann auch gleich, wann der Speicher voll ist, oder?

Vielen Dank für Eure Hilfe.

Gruß
Jens
Gast
Du schreibst dir eine Funktion an der du die Adresse und Daten 
übergibst. Da du nur byteweise speicherst ist das recht einfach.
1
void EEPRomWrite (uint8_t Address, uint8_t Data)
2
{
3
    while (EECR & (1 << EEWE));         // EEPROM write still busy ?
4
    EEAR = Address;                     // EEPROM Adress Register
5
    EEDR = Data;                        // EEPROM Data Register
6
    EECR |= (1 << EEMWE);               // EEPROM write enable
7
    EECR |= (1 << EEWE);                // EEPROM write data
8
}

Habs jetzt nicht getestet aber so stehts im Datenblatt. Während des 
speicherns dann noch Interrupts sperren, thats it.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.