EEPROM-Ansteuerung

hasi

Neues Mitglied
10. Aug. 2008
2
0
0
Sprachen
Ich beschäftige mich jetzt das erste mal mit der Programmierung von Mirkroprozessoren mit Hilfe von CodeVision. Bis jetzt hat es auch ganz gut geklappt, stocke nur bei der EEPROM-Ansteuerung...
In dem Projekt sollen drei Werte aufgenommen und alle 60 Sekunden im EEPROM abgespeichert werden, bei der betätigung eines Tasters sollen dann die Daten aus dem EEPROm wieder ausgegeben werden. Das Schreiben auf den EEPROM funktioniert allerdings ist die Ausgabe fehlerhaft. Es wird immer der gleiche Wert ausgegeben, obwohl sich die Abrufadresse durch die Funktion adr-- ändern müsste. Ich hab schon vieles probiert und bin mit meinem Latein jetzt am Ende, die Datenblätter bringen mich auch nicht mehr weiter.

Hier mal den betreffenden Ausschnitt aus dem Programm.

interrupt [TIM0_OVF] void timer0_ovf_isr(void) // interrupt wird alle 60sec ausgelöst
{
if(++time==1875) // 3750* 16ms = 60s zum ausprobieren 30sec!!!!!!= 1875
{

printf ("----------------------60s------------------ \r\r\r\n\n");

if(adr<32)
{


eeprom_write(adr,licht);
adr++;
eeprom_write(adr,poti);
adr++;
eeprom_write(adr,ntc);
adr++;
printf("Momentanwerte:l=%d p=%d n=%d \n",licht,poti,ntc);

}
else
{
aus=adr ;
printf("das eeprom ist voll und bei adresse %d\r\n",aus);

}
time=0;
}

}
interrupt [EXT_INT0] void ext_int0_isr(void)
{ unsigned char data ='';
printf("Mittelwert Licht: %d ",licht);
printf(" poti-Wert: %d ntc-Wert: %d \r\n ",poti , ntc);


while(adr>2)
{
n=eeprom_read(adr);
adr--;
p=eeprom_read(adr);
adr--;
l=eeprom_read(adr);
adr--;
printf("l= %d.....p= %d....n=%d\n",l,p,n);
}
printf("%d\n",data);
printf(" Ausgabe beendet\n");
}

Vielleicht hat jemand von euch schon mal das selbe Problem gehabt und hat eine Idee für mein Problem.

Schon mal vielen Dank.
 
Hallo,

ich kann den Fehler nicht direkt sehen. Was mir aufgefallen ist, bzw. auf was du achten solltest...
  • wie sind die Variablen adr, n, p und l definiert?
  • wird die Variable adr in deinem Programm initialisiert?
  • die Variable data gibst du mit printf in der ISR EXT_INT0 aus, der Variablen wird ausser '' nichts zugewiesen.
  • ich würde EEPROM-Schreib/Lesereroutinen und printf möglichst nicht in einer ISR verwenden, soetwas ist im Hauptprogramm besser aufgehoben. Du könntest in der ISR ein Flag setzen, welches im Hauptprogramm ausgewertet wird.
Vielleicht hilft dir das etwas weiter.

Grüße
Dirk

(PS: Bitte den Programmcode beim nächsten mal posten einrücken und in die Code-Box, die öffest du mit dem Button #, dann ist er besser lesbar.)

 
Hallo Dirk,

danke für deine Tipps. Soweit hab ich die auch versucht umzusetzten, aber ich weiß nicht so recht wie ich dir größe adr initialisieren soll. Hab das mit dem Befehl adr_init() probiert, aber da gibt mir das Programm nur Fehlermeldungen aus. Ist das der falsche Befehl oder hab ich das vllt an die falsche Stelle im Programm geschrieben (steht jetzt im Hauptprogramm)?

Und dann hab ich ein Problem der Größe adr eine Adresse zuzuweisen. Eigentlich müsste adr eine Adresse sein, aber wenn er die Adresse auslesen soll um mir meine gespeicherten Daten wiederzugeben, kommt ständig der selbe Wert (255). Steht die Zahl für was bestimmtes? Oder wie kommt das Programm gerade auf diesen Wert?

Vielen, vielen Dank für deine Mühe! Aber anscheinend stehe ich bei dem Programm grad auf dem Schlauch...

Grüße

Hasi
 
Hallo,

ein Beispiel, wie man auf das interne EEPROM zugreift, steht im CodeVision User Manual unter dem Punkt 3.14. Diese Vorghensweise ist aber CodeVision-spezifisch und ist nicht direkt auf andere Compiler übertragbar.

Grüße,
Dirk
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)