Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

4
voti

PIC - DATA EPROM MEMORY

In questo articolo viene descritto come accedere in lettura e scrittura un un' area di memoria dati non volatile del dispositivo.

Indice

Abstract

All'avvio del PIC o a seguito di un reset più o meno previsto, capita di voler conoscere alcuni valori che erano memorizzati o il particolare stato in cui era il programma per ripristinarne le condizioni perse durante il reset, oppure semplicemente di dover leggere il valore di alcune costanti memorizzate nel dispositivo pur mantenendo libera una porzione significativa dei 224 byte di memoria RAM. Ad esempio potremmo avere bisogno di:

  • Memorizzare lo stato acceso o spento di un dispositivo controllato dal PIC prima dello spegnimento o del reset.
  • Memorizzare i dati necessari a programmare i caratteri customizzabili della rom utente di un display LCD.
  • Ripristinare al riavvio del dispositivo la tensione di soglia generata dal modulo Voltage Reference, senza rieseguire la procedura di calibrazione.

E' possibile salvare tutte queste informazioni in un'area di memoria non volatile che manterrà il proprio contenuto una volta tolta l'alimentazione o resettato il PIC.

Data Eprom Memory

La Data Emprom Memory indicata in figura con EEPROM, è un'area di 128 byte disponibile in lettura e scrittura durante le normali operazioni di funzionamento anche quando il dispositivo è write protected.

L'accesso però non avviene alla stessa velocità con cui avviene quello alla RAM, per via del fatto che vi si accede alla Eprom indirettamente. In questo articolo utilizzeremo come riferimento il PIC16F628A e le informazioni trattate sono quelle disponibili nel capitolo 13 del Datasheet. L'accesso alla Data Eprom Memory avviene tramite 4 Special Function Registers:

  • EEDATA: contiene un data ad 8 bit utilizzato in lettura e scrittura.
  • EEADR: contiene l'indirizzo di memoria a cui si vuole accedere. La Data Eprom Memory del PIC16F628A è di 128 byte da 0x00 a 0x7F quindi questo registro ha una dimensione utile di 7 bit ma l'ottavo deve essere per forza impostato a 0.
  • EECON1: Registro di controllo utilizzato per gestire le operazioni di lettura e scrittura.
  • EECON2: Non è un registro esistente fisicamente nel dispositivo, la sua lettura darà come risultato sempre 0 e è utilizzato solo nel processo di scrittura.

WR ed RD inizializzano le procedure di scrittura e lettura, vengono azzerati dall' hardware solo alla fine del processo.
WREN rende possibile la scrittura.
WRERR viene posto ad 1 se l'operazione di scrittura viene interrotta da un reset di MCLR o WTD.

Lettura

L'operazione di lettura è molto elementare ed avviene in 3 passaggi:
  • Si imposta EEADR con l'indirizzo della Eprom da leggere: da 0x00 a 0x7F
  • Si imposta EECON1.RD ad 1
  • Si legge il valore del registro EEDATA

Alla fine lo stato di EECON.RD deve essere tornato a 0

Scrittura

L'operazione di scrittura invece è un pò più lunga:
  • Si imposta EEADR con l'indirizzo della Eprom da leggere: da 0x00 a 0x7F.
  • Si imposta EEDATA con il dato da scrivere: da 0x00 a 0xFF.
  • Si imposta EECON1.WREN ad 1.
  • Si imposta EECON2 con il valore 0x55.
  • Si imposta EECON2 con il valore 0xAA.
  • Si imposta EECON1.WR ad 1.
A questo punto avviene la scrittura e per verificare che sia stata eseguita si può controllare che il PIC abbia resettato lo stato di EECON1.WR riportandolo a 0.
Nel malaugurato caso che proprio in questo momento sia avvenuto in reset, dopo il riavvio troveremo il flag EECON1.WRERR settato e dovrà quenti essere riportato a 0.

Se gli interrupt sono abilitati, il PIC dopo la scrittura genera un interrupt che dovrà essere gestito nella Interrupt Service Routine dove lo stato del flag PIR1.EEIF deve essere riportato a 0.

Interrupt

La scrittura nella Eprom genera un interrupt nel PIC, il quale setta ad 1 il flag PIR1.EEIF che va resettato nella Interrupt Service Routine per poter ricevere ulteriori interrupt di scrittura. Se non si vuole generare nessun interrupt, prima della scrittura si possono modificare i flag di Enable nella catena di inerrupt mostrata nella figura:

  • PIE1.EEIE = 0 inibisce l'interrupt su scrittura nella Eprom.
  • INTCON.PEIE = 0 inibisce ogni interrupt proveniente dalle periferiche.
  • INTCON.GIE = 0 inibisce ogni interrupt del PIC.

Note

Versione del documento: 1.0

2

Commenti e note

Inserisci un commento

di ,

Grazie, come sempre il tuo apprezzamento è molto gradito :)

Rispondi

di ,

Bravo

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.