Hallo!
Vielen Dank schon mal für eure Tips.
Ich benutze den internen RC-Oszillator mit 4 Mhz.
Das Lesen und Schreiben mit dem Eeprom sieht folgendermassen aus:
// Variablendefinition
uint8_t Temperatur = 0;
uint8_t Temperatur_Ausgabe = 0;
.
.
.
// Wird beim Betätigen von Taster 1 gesartet.
INTERRUPT(SIG_INTERRUPT0)
{
// Externen Interrupt abschalten, damit später
// geprüft werden kann, ob der Taster nach zwei
// Sekunden noch gedrückt ist.
cbi(GICR,INT0);
// maximale Temperatur aus Eeprom an Adresse 1 auslesen
Temperatur_Ausgabe = eeprom_rb(0x01);
// Anzeige über 7-Segment-Anzeige
Hunderter = Temperatur_Ausgabe / 100;
Zehner = (Temperatur_Ausgabe % 100) / 10;
Einer = (Temperatur_Ausgabe % 100) % 10;
ausgabe_einer(Einer);
ausgabe_zehner(Zehner);
ausgabe_hunderter(Hunderter);
delay_sek(2);
// Wenn er noch gedrückt ist, Wert im Eeprom löschen
// und erfolgte Löschung durch "00" anzeigen.
if bit_is_clear(PIND,PIND2)
{
eeprom_wb(0x01,0);
Ziffer_3_0; Ziffer_2_0; Ziffer_1_aus;
delay_ms(250);
delay_ms(250);
}
// Die Variable Temperatur_max muss jetzt den //
gespeicherten Wert bekommen.
Temperatur_max = eeprom_rb(0x01);
// externen Interrupt wieder einschalten
sbi(GICR,INT0);
}
void main(void)
{
.
.
// Temperatur aus AD-Wandler einlesen und berechnen
Temperatur = .........
.
.
// Speichern des Wertes von Temperatur im Eeprom,
// Adresse 1
eeprom_wb(0x01,Temperatur);
.
.
.
}
Solange die Versorgungsspannung dran ist, wird beim Drücken vom Taster
immer die höchste bisher gemessene Temperatur ausgegeben.
Diese steht in Adresse 1 drin und wird der Variablen Temperatur_Ausgabe
zugewiesen. Diese Variable wird sonst nirgends verwendet. Demzufolge
müsste das Lesen und Schreiben in das Eeprom funktionieren.
Nach dem Abklemmen von der Spannungsversorgung ist der alte Wert aber
nicht mehr vorhanden.
Gruss,
Matthias