Problema con EEPROM 18F
Ciao a tutti! Sto provando a lavorare un po' con l'eeprom interna di un PIC 18F2550 (provando a scrivere e leggere delle parole) e mi sono imbattuto in uno strano problema: quando leggo la parola ottengo come risultato che la prima lettera viene rappresentata dall'ultima. La lettura la faccio tramite la seriale collegando il PIC al PC con l'apposito adattatore.
Faccio un esempio: ho salvato la parola "PROVA" (in hex 50 52 4F 56 41) e quando vado a leggerla ottengo "AROVA". Se provo a leggere la eeprom attraverso il pickit3 programmer noto invece che la parola è scritta correttamente. Sarà sicuramente un problema della routine di lettura ma dopo ore di "debug" non sono riuscito a capire dove sbaglio...voi cosa ne dite?
Ecco l'intero codice:
Come ide utilizzo mikroC PRO 5.6.
Allego anche due screen della situazione:
Faccio un esempio: ho salvato la parola "PROVA" (in hex 50 52 4F 56 41) e quando vado a leggerla ottengo "AROVA". Se provo a leggere la eeprom attraverso il pickit3 programmer noto invece che la parola è scritta correttamente. Sarà sicuramente un problema della routine di lettura ma dopo ore di "debug" non sono riuscito a capire dove sbaglio...voi cosa ne dite?
Ecco l'intero codice:
- Codice: Seleziona tutto
//*****************************************************************************
//Funzione per salvare dati complessi in EEPROM
//*****************************************************************************
void to_eeprom (void *ptr, unsigned char dim, unsigned char start_position) {
unsigned char k, tmp;
for (k=0;k<dim;k++) {
tmp = ((unsigned char*) ptr)[k];
EEPROM_WRITE(start_position+k,tmp);
delay_ms(20);
}
return;
}
//*****************************************************************************
//Funzione per recuperare dati complessi in EEPROM
//*****************************************************************************
void from_eeprom (void *ptr, unsigned char dim, unsigned char start_position) {
unsigned char k, tmp;
for (k=0;k<dim;k++) {
tmp = EEPROM_READ(start_position+k);
((unsigned char*) ptr)[k] = tmp;
delay_ms(20);
}
return;
}
void main() {
unsigned char * buffer;
Init_Main();
UART1_Init(9600);
Delay_ms(500);
to_eeprom("PROVA",5,0x00); //salvo in eeprom la parola PROVA - 5 byte
from_eeprom(buffer,5,0x00); //leggo i primi 5 indirizzi di eeprom
UART1_write_text(buffer);
UART1_write(13);
UART1_write(10);
while(1) ;
}
Come ide utilizzo mikroC PRO 5.6.
Allego anche due screen della situazione: