Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema con EEPROM 18F

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema con EEPROM 18F

Messaggioda Foto Utentedany192 » 7 feb 2013, 18:31

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:

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:
Allegati
Terminale.jpg
Terminale.jpg (48.83 KiB) Osservato 5419 volte
pickit.jpg
pickit.jpg (39.16 KiB) Osservato 5419 volte
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[2] Re: Problema con EEPROM 18F

Messaggioda Foto UtentePaolino » 7 feb 2013, 22:24

Non ho letto il codice, ma potebbe essere un baco del terminale. Prova con un altro.
Altro suggerimento: prova con TROVA anziché PROVA e vedi cosa accade.

Ciao.

Paolo.

P.S. Passa all'ultima versione di MikroC PRO: ora c'è la 5.80
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Problema con EEPROM 18F

Messaggioda Foto Utentedany192 » 7 feb 2013, 22:42

Ho provato anche con altri client come hyperterminal e putty. Tanto per sicurezza ho anche provato con altri PIC e altre parole ma siamo sempre li. Mi sa comunque di un problema relativo ai puntatori della funzione di lettura che non riesco a risolvere.
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[4] Re: Problema con EEPROM 18F

Messaggioda Foto UtentePaolino » 7 feb 2013, 22:54

Prova anche in debug mode, se riesci.

Ho notato che nella tua funzione di lettura manca un fine stringa. Prova così:

Codice: Seleziona tutto
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);
    }

    ((unsigned char*) ptr)[k] = '\0'; /* Fine stringa */
}



Ciao

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Problema con EEPROM 18F

Messaggioda Foto Utentedany192 » 8 feb 2013, 12:03

Ciao Paolo, purtroppo non va nemmeno con il fine stringa.
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[6] Re: Problema con EEPROM 18F

Messaggioda Foto UtentePaolino » 9 feb 2013, 15:56

Ma perché nelle funzioni usi void*? prova con unsigned char* e non fare casting su "tmp".

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: Problema con EEPROM 18F

Messaggioda Foto Utentedany192 » 11 feb 2013, 14:25

Alla fine ho risolto inizializzando il puntatore in questo modo:

Codice: Seleziona tutto
unsigned char *buffer = "";


A presto e grazie per aver partecipato Paolo ;-)
Avatar utente
Foto Utentedany192
20 6
Frequentatore
Frequentatore
 
Messaggi: 123
Iscritto il: 1 ago 2011, 13:32
Località: everywhere

1
voti

[8] Re: Problema con EEPROM 18F

Messaggioda Foto UtentePaolino » 11 feb 2013, 14:38

Ok, sono contento che abbiamo risolto. :ok:

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite