Gast
#2813306
Hallo µC (AVR) Gemeinde,
ich bekomme das Schreiben in das EEPROM eines ATMEGA 32 nicht hin und
hätte dazu einige Fragen.
Wenn ich die unten stehende Funktion ausführe wird der ucDaten Wert
nicht auf der vorgegebenen Adresse gespeichert, sondern beim Lesen
erhalte ich immer 0xFF zurück, was typischerweise der
Initialisierungswert eines EEPROMs ist.
void EEPROM_Write (unsigned int uiAdresse, unsigned char ucDaten)
{
cli(); //Interrupts sperren
while (EECR & (1<<EEWE))
{
; //mögliche Schreibroutine abwarten
}
EEAR = uiAdresse;
EEDR = ucDaten;
EECR |= (1<<EEMWE); //Set EEMWE
EECR |= (1<<EEWE); //Set EEWE
sei(); //Interrupts freigeben
}
Was ich nicht verstehen ist, wie man die int Adresse dem Regsiter EEAR
zuweisen kann.
Das Adressregister wird im Datenblatt als EARH und EARL beschrieben.
Dröselt der Compiler (AVR Studio) das auf? Hatte das auch schon von Hand
gemacht, aber es funktioniert auch nicht besser.
Ich vermute den Fehler allerdings eher im setzen der Bits EEMWE und
EEWE. Laut Datenblatt muss dies innerhalb von 4 Taktzyklen erfolgen. Ist
das gewährleistet? Was mich in diesem Zusammenhang auch wundert ist,
dass das EEPROM irgend wie mit dem internen 8MHz RC Oszillator arbeitet.
Mein CPU Takt wird aber mittels externem 3,6MHz Quarz gewonnen. Ist in
dieser Richtung (Fuse Bits) noch irgend etwas zu beachten?
Besten Dank für Eure Tips
Transi