Forum: Mikrocontroller und Digitale Elektronik EEPROm Atmega 16 schreiben im Simulator


von Andreas M. (burns)


Lesenswert?

Hallo,

ich möchte mir Daten in den EEPROM schreiben und das ganze mit dem 
Simulator im AVR Studio 6 testen.

Ich habe folgendes Programm:
1
void EEPROM_write(unsigned int Address, unsigned char Data)
2
{
3
  while(EECR & (1<<EEWE));        //Warten, falls Schreibvorgang im Gange
4
  EEAR = Address;      //Addresse ins Address-Register laden
5
  EEDR = Data;      //Daten ins Daten-Register laden
6
  EECR |= (1<<EEMWE);    //Master Write Bit setzen
7
  EECR = EECR | 0b00000010;    //Schreibvorgang starten
8
}
9
10
11
12
unsigned char EEPROM_read(unsigned int Address)
13
{
14
  while(EECR & (1<<EEWE));  //Warten, falls Schreibvorgang im Gange
15
16
  EEAR = Address;      //Addresse ins Address-Register laden
17
  EECR |= (1<<EERE);    //Lesevorgang starten
18
  EECR=0x01;
19
  return EEDR;      //Übergabe des EEPROM Inhalts
20
}



In der Main Funktion habe ich dann den Aufruf
1
EEPROM_write(0x0001,0x05);
Ich starte den Simulator und in den Registern wie die Adressen und Bits 
gesetzt werden. Jedoch kommt nix beim EEPROM Speicher an wenn ich mir in 
der Simulation anschaue.

Das auslesen mit der Funktion funktioniert soweit.

Kann mir jemand einen Tipp geben?

Danke

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

Andreas Meissner schrieb:
> Jedoch kommt nix beim EEPROM Speicher an wenn ich mir in
> der Simulation anschaue.

Lässt du den Simulator auch lange genug laufen? Wenn er auch das 
zeitliche Verhalten des EEPROM simuliert (wovon ich ausgehe), dann 
dauert es schließlich mehrere tausend Takte bis das EEPROM beschrieben 
ist.

von Andreas M. (burns)


Lesenswert?

ich bin immer schrittweise mit F11 vorwärts gegangen. gewartet habe ich 
nicht. Da im Simulator auch das lesen unverzögert funktionierte.

Ich habe es nochmal probier und ein Delay von 500 MS eingefügt aber auch 
ohne erfolg beim schreiben scheint es nicht übernommen zu werden

von Stefan E. (sternst)


Lesenswert?

Andreas Meissner schrieb:
> ich bin immer schrittweise mit F11 vorwärts gegangen. gewartet habe ich
> nicht. Da im Simulator auch das lesen unverzögert funktionierte.

Lesen dauert ja auch nur 4 Takte.

Andreas Meissner schrieb:
> Ich habe es nochmal probier und ein Delay von 500 MS eingefügt aber auch
> ohne erfolg beim schreiben scheint es nicht übernommen zu werden

Und du hast wirklich bis zum Ablauf des Delays gewartet? 500 ms dauern 
im Simulator ewig.


Was sagt denn überhaupt das EEWE Bit in EECR? Solange das noch auf 1 
ist, ist das EEPROM auch noch nicht fertig beschrieben.

Und darauf geachtet, dass die Timing-Vorgaben für das EEWE-Setzen 
eingehalten werden, hast du natürlich, oder?

von Andreas M. (burns)


Lesenswert?

Welche "Timing-Vorgaben "???

von Stefan E. (sternst)


Lesenswert?

Andreas Meissner schrieb:
> Welche "Timing-Vorgaben "???
1
When EEMWE is set, setting EEWE within four clock cycles will write data to the EEPROM


Da stellt sich mir auch gleich noch die Frage, warum du diese Funktionen 
überhaupt selbst implementieren willst, statt einfach die vorhandenen 
fertigen Funktionen zu nutzen.

von Andreas M. (burns)


Lesenswert?

Habe es mit meinem Code nicht hin bekommen, bin jetzt auf die Bibliothek 
gewechselt und da ging es.  Danke

von Thomas (kosmos)


Lesenswert?

es gibt einen Interrupt wenn das EEPROM wieder schreibbereit ist, 
entweder du läßt diesen Interrupt auslösen oder schaust ab und zu nach 
ob EERIE gesetzt wurde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.