EEPROM duomenų atminties panaudojimas PIC18 mikrovaldikliuose  (4)

PIC18 šeimos mikrovaldikliai turi įdiegtą 128, 254 arba 1024 baitų EEPROM atmintį. EEPROM atmintis pasižymi tuo, kad joje duomenys išlieka išjungus mikrovaldiklio maitinimą, todėl tinka saugoti retai kintančius svarbius duomenis, pavyzdžiui temperatūros nustatymus termostatuose ar pan. EEPROM atmintis gali būti perrašyta ne mažiau 1 mln. kartų.


Prisijunk prie technologijos.lt komandos!

Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.

Sudomino? Užpildyk šią anketą!

Į EEPORM atmintį galima kreiptis tik netiesioginiu būdu, tam naudojami 4 specialios paskirties registrai: EECON1, EECON2, EEDATA, EEADR. EECON1 ir EECON2 registrai valdo priėjimą prie EEPROM atminties, EEDATA registre saugomas į atmintį rašomas arba skaitomas duomenų baitas, EEADR registre nurodomas atminties ląstelės adresas.

Skaitymas iš EEPROM atminties

Norint nuskaityti duomenis iš EEPROM atminties, reikia atlikti šiuos veiksmus:

  • 1.į EEADR registrą įrašyti adresą;
  • 2.EECON1 registre išvalyti EEPGD bitą (EECON1<7>);
  • 3.EECON1 registre išvalyti CFGS bitą (EECON1<6>);
  • 4.EECON1 registre įjungti RD bitą (EECON1<0>).

Įjungus rašymo kontrolės bitą RD, pradedamas atminties skaitymas, kuris trunka vieną mašininį ciklą. Duomenys iš EEPROM atminties įrašomi į EEDATA registrą, iš kurio jau sekančio ciklo metu gali būti naudojami vartotojo nuožiūra.

Rašymas į EEPROM atmintį

Rašymo į EEPROM atmintį procedūra yra sudėtingesnė ir ilgesnė nei skaitymo. Duomenų apsaugai nuo atsitiktinio perrašymo skirtas papildomas registras EECON2, taip pat naudojami papildomi mechanizmai – įjungiant mikrovaldiklio maitinimą išvalomas rašymo leidimo bitas WREN, rašymas blokuojamas ir Power-up laikmačio veikimo metu. Rašymo į EEPROM atmintį procesas trunka 4 ms, šį laiką kontroliuoja vidinis mikrovaldiklio laikmatis. Taip pat griežtai rekomenduojama rašymo metu uždrausti visus pertraukimus mikrovaldiklyje.

Skaitymo iš EEPROM atminties veiksmų seka:

  • 1.į EEADR registrą įrašyti adresą;
  • 2.į EEDATA registrą įrašyti duomenis;
  • 3.EECON1 registre išvalyti EEPGD bitą (EECON1<7>);
  • 4.EECON1 registre išvalyti CFGS bitą (EECON1<6>);
  • 5.EECON1 registre įjungti rašymo leidimo bitą WREN (EECON1<2>);
  • 6.INTCON registre išvalyti GIE bitą – uždraudžiami visi pertraukimai;
  • 7.į EECON2 registrą įrašomas skaičius 55h;
  • 8.į EECON2 registrą įrašomas skaičius 0AAh;
  • 9.EECON1 registre įjungti rašymo inicializavimo bitą WR (EECON1<1>); WR bitas automatiškai išvalomas mikrovaldiklio, kai baigiamas rašymo procesas;
  • 10.INTCON registre įjungti GIE bitą – vėl leidžiami pertraukimai;
  • 11.EECON1 registre išjungti WREN bitą (EECON1<2>).

Paprogramių naudojimas palengvina duomenų skaitymą ir rašymą į EEPROM atmintį.

Toliau pateikiamos paprogramės C kalba.

///////////////////////////////////////////////////// 

// EEPROM skaitymas

// returns EEPROM data

//*/

unsigned char eeprom_read(unsigned char ee_adr)

{

EEADR = ee_adr; // nurodomas atminties ląstelės adresas

EECON1bits.EEPGD = 0; // pasirenkama EEPROM atmintis

EECON1bits.CFGS = 0; // pasirenkama EEPROM atmintis

EECON1bits.RD = 1; // pradedamas EEPROM skaitymas

return(EEDATA); // grąžinamas kintamas iš EEPROM atminties

}

////////////////////////////////////////////////////////// 

// EEPROM rašymas

// writes data to EEPROM

//*/

void eeprom_write(unsigned char ee_adr, unsigned char ee_data)

{

EEADR = ee_adr; // nurodomas atminties ląstelės adresas

EEDATA = ee_data; // į atmintį rašomi duomenys

EECON1bits.EEPGD = 0; // pasirenkama EEPROM atmintis

EECON1bits.CFGS = 0; // pasirenkama EEPROM atmintis

EECON1bits.WREN = 1; // leidžiamas EEPROM rašymas

INTCONbits.GIE = 0; // draudžiami pertraukimai

EECON2 = 0×55;

EECON2 = 0×0AA;

EECON1bits.WR = 1; // pradedamas rašymas

while (EECON1bits.WR) {} // laukiama rašymo pabaigos

INTCONbits.GIE = 1; // leidžiami pertraukimai

EECON1bits.WREN = 0; // draudžiamas EEPROM rašymas

}

Pirmoji paprogramė grąžina baitą iš EEPROM atminties ląstelės, kurios adresas nurodomas iškviečiant paprogramę, pavyzdžiui:

kintamasis = eeprom_read(0×01); 

Antroji paprogramė iškviečiama nurodant atminties ląstelės adresą bei rašomus duomenis:

eeprom_write(0×01, 0×05); 

Įvykdžius šią paprogramę į EEPROM atminties ląstelę su adresu 0×01 bus įrašytas šešioliktainis skaičius 0×05.

Parengė
Doc. dr. Šarūnas Kilius
Energetikos ir elektronikos katedra
Kauno technikos kolegija
www.ktk.lt

Pasidalinkite su draugais
Aut. teisės: www.technologijos.lt
Autoriai: Šarūnas Kilius
(1)
(0)
(1)

Komentarai (4)