Forum: Compiler & IDEs EEPROM wird nicht beschrieben


von Sandro (Gast)


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

von Karl H. (kbuchegg)


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!

von Sandro (Gast)


Lesenswert?

Danke vielmals Herr Heinz, genau das war das Problem.
Werde in Zukunft wohl die avr-gcc funktionen benutzen.

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.