Utilizzo EEPROM dspic30f4011

programmazione Microchip pic a 8 e 16 bit

Moderatore: Junior Admin

Rispondi
Avatar utente
Raban
AMMINISTRATORE
Messaggi: 3559
Iscritto il: sab ott 25, 2008 14:27
Località: Serenissima Repubblica Veneta

Utilizzo EEPROM dspic30f4011

Messaggio da Raban »

Dopo averci perso un po' di tempo sono riuscito a capire come gestire la EEPROM nei microprocessori serie dspic30,
in particolare ho fatto le prove su un dspic30f4011.
Da quel che ho potuto capire di fatto la eeprom e' mappata nella flash per utilizzarla bisogna usare delle apposite
macro e funzioni previste nelle librerie del c30 :

dunque usando le macro del c30 il codice viene cosi' :

Codice: Seleziona tutto

unsigned int _EEDATA(32) table0[16]	 =  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};

questa dichiarazione fatta prima del main serve creare un vettore composto da 16 elementi
ciascuno da 2 byte in eeprom

successivamente per accedere a tali dati bisogna usare una specie di puntatore che viene definito cosi' :

Codice: Seleziona tutto

_prog_addressT indirizzi_eeprom;

poi inizializziamo indirizzi_eeprom associandolo agli indirizzi di table0[]

Codice: Seleziona tutto

_init_prog_address(indirizzi_eeprom, table0);

a questo punto abbiamo che indirizzi_eeprom punta a table0[]

per andare a leggere la eeprom bisogna crearsi una variabile in ram di grandezza sufficente
a contenere table0[] .
supponiamo di aver predisposto la variabile unsigned int table_ram[16].

per copiare i valori di table0[] in table_ram[]

il codice da usare e' :

Codice: Seleziona tutto

 	_memcpy_p2d16(table_ram, indirizzi_eeprom, 32);

per andarla a scrivere invece bisogna prima cancellarla , il codice e' il seguente :

Codice: Seleziona tutto

	_erase_eedata(indirizzi_eeprom ,32);
			_wait_eedata(); 

e poi la si puo' riscrivere :

Codice: Seleziona tutto

	_write_eedata_row(indirizzi_eeprom, table_ram);
			_wait_eedata(); 


E fin qui tutto ok .

la cosa che mi sarebbe piaciuto fare ma che non sono riuscito e' di inizializzare la eeprom
come array multi dimensionale tipo table[8][16]
per poi andare a leggere e caricare in ram la riga che mi serviva ... ho optato per dichiarare
una serie di vettori tipo table0[16], table1[16],table... gestendoli con una routine
case switch ...
fa un po' schifo ma funziona .
- internet + cabernet
- V8 Power
l'esperienza non si compra ma si paga
Avatar utente
ALMOR
AMMINISTRATORE
Messaggi: 4486
Iscritto il: lun set 08, 2008 10:37
Località: LONDON

Re: Utilizzo EEPROM dspic30f4011

Messaggio da ALMOR »

un ottimo inizio come approccio al mondo dei PIC!!! :risatina:
Rispondi

Torna a “Programmazione processori PIC”