Werte in EEPROM an bestimmte Stelle schreiben

Gast #1564861
Lesenswert?

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 #1564886
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren