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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.