EEPROM wird nicht beschrieben

Gast #3495984
Lesenswert?

Hallo zusammen

Mit folgendem Code versuche ich meine selbstgeschriebenen 
EEPROM-Funktionen zu testen. Die Funktion zum lesen vom EEPROM 
funktioniert, die Schreibfunktion jedoch nicht, da sich die Werte nicht 
verändern. Ich hoffe ihr könnt mir sagen woran das liegt.
1
void main(void)
2
{
3
      // Lokale Variablen des Hauptprogramme
4
      int n;
5
      char test;
6

7
     
8
      for(n=0;n<500;n++){
9
         eepromwrite(n,0xAB);
10
         test = eepromread(n);
11
      }
12
    while(1)
13
    {
14
        
15
    }
16
}


EEPROM-Funktionen:
1
#define SETBIT(Adr,Bit)       (Adr |= (1<<Bit))
2
#define CHECKBIT(Adr,Bit)  (Adr & (1<<Bit))
3

4

5
char eepromread(int Adresse);
6
void eepromwrite(int Adresse,char Daten);
7

8
char eepromread(int Adresse){
9
   // lokale Variablen
10
   char sregalt = SREG;
11
   
12
   // Verarbeitung
13
   cli();
14
   while(CHECKBIT(EECR,EEWE));
15
   EEAR = Adresse;
16
   SETBIT(EECR,EERE);
17
   SREG = sregalt;
18
   return(EEDR);
19
}
20

21
void eepromwrite(int Adresse,char Daten){
22
   // lokale Variablen
23
   char sregalt = SREG;
24
   
25
   // Verarbeitung
26
   cli();
27
   while(CHECKBIT(EECR,EEWE));
28
   while(CHECKBIT(SPMCR,SPMEN));
29
   EEAR = Adresse;
30
   EEDR = Daten;
31
   SETBIT(EECR,EEMWE);
32
   SETBIT(EECR,EEWE);
33
   SREG = sregalt;
34
}

Danke im Voraus
#3496105
Lesenswert?

Du hast hier

>    SETBIT(EECR,EEMWE);
>    SETBIT(EECR,EEWE);

eine Zeitbeschränkung von 4 Takten. Wenn du den Optimizer nicht 
eingeschaltet hast und SETBIT nicht auf einen sbi zurecht optimiert 
wird, dann hast du hier ein Problem.


Wozu eigene Routinen schreiben? Du hast doch schon welche mit dem 
avr-gcc mitgekriegt, die du einfach benutzen kannst!

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