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.
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.