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:
|
Lettura
L'operazione di lettura è molto elementare ed avviene in 3 passaggi:
Alla fine lo stato di EECON.RD deve essere tornato a 0 |
Scrittura
L'operazione di scrittura invece è un pò più lunga:
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

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)