LO HAI MAI REALIZZATO CON UN PIC? - electroyou.it ·...

18
Paolo Rognoni (Paolino) LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 20 May 2012 Uno degli argomenti che fino ad ora non ho ancora affrontato è quello della memorizzazione dei dati in maniera permanente. Molte applicazioni necessitano infatti di mantenere telune informazioni anche nel caso in cui l'alimentazione viene a mancare. Si pensi ad esempio ad un contacicli nelle macchine di produzione oppure alle password di accesso ai sistemi o anche il numero IP di un host. Anche con i PICMicro è possibile C'è memoria e memoria... Facciamo un breve excursus. I sistemi informatici si basano principalmente su questo tipo di memorie: memorie volatili;memorie non volatili;memoria di massa Memorie volatili Rientrano in questa categoria principalmente le memorie RAM, acronimo di Random Access Memory. La RAM è costituita da una serie di celle in grado di memorizzare le informazioni solamente se tali celle vengono mantenute alimentate. Mediante una linea bus indirizzi e una linea bus dati è possibile accedere alla singola cella e leggerne e/o scriverne il valore. Le celle sono assimilabili a condensatori il cui valore di carica determina lo stato di un bit. Le memorie RAM di tipo dinamico (note anche come DRAM) dispongono anche di un pin di controllo detto di refresh che serve a rinfescare il valore di carica delle celle/condensatori. Altre memorie, come le FerroRAM mantengono il dato in memoria senza dover avere il meccanismo di refresh. Altri bit di controllo, come i comandi di lettura (Read) e scrittura (Write) permettono alla CPU di accedere alla memoria. ELECTROYOU.IT LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 1

Transcript of LO HAI MAI REALIZZATO CON UN PIC? - electroyou.it ·...

Paolo Rognoni (Paolino)

LO HAI MAI REALIZZATO CON UN PIC? -ACCESSO ALLA EEPROM INTERNA

20 May 2012

Uno degli argomenti che fino ad ora non ho ancora affrontato è quello dellamemorizzazione dei dati in maniera permanente. Molte applicazioni necessitanoinfatti di mantenere telune informazioni anche nel caso in cui l'alimentazione viene amancare. Si pensi ad esempio ad un contacicli nelle macchine di produzione oppurealle password di accesso ai sistemi o anche il numero IP di un host. Anche con iPICMicro è possibile

C'è memoria e memoria...

Facciamo un breve excursus. I sistemi informatici si basano principalmente su questotipo di memorie: memorie volatili;memorie non volatili;memoria di massa

Memorie volatili

Rientrano in questa categoria principalmente le memorie RAM, acronimo di RandomAccess Memory. La RAM è costituita da una serie di celle in grado di memorizzare leinformazioni solamente se tali celle vengono mantenute alimentate.

Mediante una linea bus indirizzi e una linea bus dati è possibile accedere alla singolacella e leggerne e/o scriverne il valore. Le celle sono assimilabili a condensatori ilcui valore di carica determina lo stato di un bit. Le memorie RAM di tipo dinamico(note anche come DRAM) dispongono anche di un pin di controllo detto di refresh cheserve a rinfescare il valore di carica delle celle/condensatori. Altre memorie, comele FerroRAM mantengono il dato in memoria senza dover avere il meccanismo direfresh. Altri bit di controllo, come i comandi di lettura (Read) e scrittura (Write)permettono alla CPU di accedere alla memoria.

ELECTROYOU.IT

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 1

www.princexml.com
Prince - Non-commercial License
This document was created with Prince, a great way of getting web content onto paper.

Ecco come si presentano alcune memorie RAM in uso sui personal computer (fonteWikipedia):

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 2

Memorie non volatili

Questo tipo di memorie in passato sono state impiegate per la memorizzazione diprogrammi (o parti di essi) che non avevano motivo di venire modificate. I primihome-computer disponevano infatti di una ROM, acronimo di Read-Only Memory,nel quale veniva posto ad esempio un interprete BASIC oppure un "rozzo" sistemaoperativo. Oggi le ROM, nella loro eccezione esatta, non esistono (quasi) più. Anchei microcontrollori, da oltre dieci anni, hanno abbandonato questa tecnologia eutilizzano, per la memorizzazione del firmware, memorie non volatili di tipoFLASH.Esistono poi memorie non volatili programmabili come le EPROM(Electrically Programmable ROM) e le EEPROM (Electrically Eraseble Programmable

Memorie RAM

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 3

ROM). Le prime ormai sono quasi del tutto sparite, mentre le seconde, pur intecnologia FLASH e non più CMOS, trovano ampio spazio, anche nel mondo deimicrocontrollori!

In questa immagine alcune EPROM, memorie che venogono programmate per viaelettrica e cancellate con raggi U.V.

Ed ecco un programmatore multiplo, che viene utilizzato per caricare il firmwarein modo contemporaneo su 10 EPROM, leggendone una campione. Programmatori

EPROM

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 4

analoghi vengono invece connessi ad un computer per poter caricare il firmwarepresente su HD.

Memorie di massa

Tra questo tipo di memoria si annoverano i sistemi di memorizzazione di grossequantità di dati. Il primo pensiero è rivolto alle unità a disco, come gli hard-disk.In passato i dischi flessibili denominati floppy disk rappresentavano l'evoluzioneminiaturizzata dei sistemi di memorizzazione di massa che, fino a quell'epoca, eranorappresentati da grosse bobine di nastro magnetico. Il disco "floppy" o "hard" hasegnato il passo: ha permesso infatti l'accesso rapido e indirizzato ai datimemorizzati, cosa che non era possibile con i nastri magnetici, essendo essidispositivi con memorizzazione dati di tipo sequenziale.

Programmatore di EEPROM

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 5

Oggi i sistemi di memorizzazione di massa si sono notevolmente ampliati e in pochicentimetri cubi di volume possiamo immagazzinare quantità di dati impressionanti,eliminando anche le parti in movimento. L'evoluzione dell'hard disk è infatti ildispositivo a stato solido che tutti conosciamo sotto le sembianze di "chiavetteUSB" e schede di memoria nei formati e nelle sigle che si leggono ovunque: MMC,SD, CompactFLASH, ecc.Un ulteriore passo in avanti è rappresentato dal cloud-computing che, nella sua eccezione relativa alla memorizzazione dei dati, svincola gliutenti dal possedere un proprio dispositivo di memorizzazione, demandando questaincombenza a grossi server ai quali il nostro terminale si va a collegare, medianteuna connessione in rete.

Tanto per rendere l'idea di come si sono evoluti i sistemi di memorizzazione nel girodi una ventina di anni, ecco una rassegna di dispositivi: si va dal disco di alluminiomagnetizzato di un HD da 14 pollici fino alla piccolissima microSD. Le dimensioni deidispositivi sono inversamente proporzionali alla capacità di memorizzazione.

Floppy da 5" e1/4.JPG

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 6

I PICMicro e le memorie

È giunto il momento di analizzare cosa contiene, in termini di memoria, unmicrocontrollore. La prima cosa da fare è scegliere un PICMicro ed aprire il suodatasheet. Ed ecco come si presenta l'architettura interna di un PIC16F819. In rossoho evidenziato le tre memorie RAM, Flash ed EEPROM.

Sistemi di memorizzazione

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 7

Per avere un'idea delle dimensioni di ciascuna delle memorie, ecco qui un paio ditabelle che dovrebbero aiutare a decifrare.

Architettura PIC16F819.JPG

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 8

Dato che il datasheet si riferisce tanto al PIC16F818 quanto al PIC16F819, in rossoho evidenziato le caratterische del PIC16F819. Riassumendo, ecco le caratteristichedel PIC16F819:

• Flash: 3584 byte;• RAM: 256 byte;• EEPROM: 256 byte

Il fatto che sia indicato un "X14" piuttosto che un "X8", significa che lo spazio diindirizzamento è a 14 o a 8 bit, in funzione del tipo di accesso. Ma questa è un'altrastoria, di cui, in parte, racconterò in queste pagine.

La EEPROM e i suoi registri

Come detto la EEPROM è una ROM cancellabile e programmabile elettricamente, ilche significa che con opportuni valori di tensione, è possibile scrivere e/o cancellaredati. La EEPROM è sì una memoria non volatile ed è utile per conservare variabiliritentive, il cui valore deve essere conservato anche in mancanza di energia elettrica,fornita da reti elettriche e/o da batterie tampone, ma dato che non è una memoriaad accesso veloce come la RAM, non viene utilizzata per salvare le variabili diprogramma!Dato che la EEPROM interna al PIC è sostanzialmente una memoriaFLASH, per la gestione di tale memori il PIC mette a disposizione un certo numerodi registri, i quali permettono tanto l'accesso alla EEPROM quanto alla ProgramMemory! Sì, alcuni PIC sono programmabili dallo stesso firmware, operazione chead esempio svolgono i bootloader. C'è però una sostanziale differenza tra laprorgammazione "ordinaria", quella cheavviene con modalità ICSP (In Circuit SerialProgramming) e l'accesso alla Program Memory da parte del firmware. Ora, non èquesto l'argomento dell'articolo ma è necessario averne accennato in quanto, comesi vedrà poco più avanti, le impostazioni dei registri possono infatti permettere

Tabella memoria PIC16F819.JPG

Tabella memoria PIC16F819.JPG

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 9

l'accesso alla Program Memory o alla EEPROM.Lo schema generale dell'accesso allaEEPROM da parte del PIC è il seguente:

I registri coinvolti nella gestione di Program Memory ed EEPROM sono i seguenti:

• EECON1• EECON2• EEDATA• EEDATH• EEADRE• EADRH

Fatta eccezione per EEDATH ed EEADRH, i rimanenti registri sono tutti coinvoltinelle operazioni di lettura e scrittura della EEPROM. Questi sono i ruoli giocati daisingoli registri:

• EECON1: è il registro di configurazione principale. Contiene al suo internobit per impostare l'accesso in scrittura o lettura, lo stato di eventuali errori,l'accesso alla Program Memory o alla EEPROM

• EECON2: non è un vero e proprio registro, infatti una lettura di EECON2comporta solamente come risultato '0'. Questo registro è utilizzato dal PICnella sequenza di scrittura dei dati

• EEDATA: registro a 8 bit che contiene il dato da scrivere in EEPROM oppureil dato che la EEPROM restituisce a seguito di una lettura

• EEADR: è il registro che contiene l'indirizzo della cella di memoria dellaEEPROM nella quale si vuole scrivere o leggere un dato

Il registro EECON1 è così composto

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 10

Il significato dei bit è il seguente:

bit nome Significato0 RD Se posto a 1, avvia una lettura1 WR Se posto a 1, avvia una scrittura2 WREN Se posto a 1, abilita i cicli di scrittura, altrimenti li inibisce

3 WRERRBit di sola lettura: se è posto a 1, significa che è avvenuto un erroredurante le operazioni di scrittura

4 FREE Bit per la cancellazione di una cella all'indirizzo composto EEADRH +EEADR (accesso alla Program Memory)

5 --- Non usato6 --- Non usato

7 EPGD Se posto a 1 permette l'accesso alla program memory, viceversa siaccede alla EEPROM

Accesso in lettura

La lettura dei dati dalla EEPROM è senz'altro un'operazione molto semplice. Conquattro passi si arriva dalla richiesta al dato:

1. Scrivere nel registro EEADR l'indirizzo della cella alla quale si vuole accedere2. Porre a 0 il bit EEPGD del registro EECON1, in modo da dichiarare l'accesso

alla EEPROM3. Porre a 1 il bit RD di EECON1, in modo da dare il via alle operazioni di lettura4. Leggere il dato dal registro EEDAT

In linguaggio C, tutto questo si traduce in poche righe:

unsigned char read_eeprom(unsigned char eeprom_address){

unsigned char ee_data;

EEADR = eeprom_address; // EEPROM address stored in the byte register

EEPGD = 0; // Access to EEPROM memoryRD = 1; // Start EEPROM reading

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 11

ee_data = EEDATA; // Read the EEDATAreturn ee_data;

}

Per chi preferisce l'assembly, è sufficiente copiare le righe che il datasheet mette adisposizione ed il gioco è fatto:

BANKSEL EEADR ; Select Bank of EEADRMOVF ADDR, W ;MOVWF EEADR ; Data Memory Address to readBANKSEL EECON1 ; Select Bank of EECON1BCF EECON1, EEPGD ; Point to Data memoryBSF EECON1, RD ; EE ReadBANKSEL EEDATA ; Select Bank of EEDATAMOVF EEDATA, W ; W = EEDATA

Accesso in scrittura

La scrittura dei dati in EEPROM è invece una faccenda più complessa. Microchipinfatti impone una sequenza di istruzioni da rispettare tassativamente, pena ilmalfunzionamento della procedura.

1. Qualora gli interrupt siano abilitati, verificare che il bit EEIF sia posto a 1,il che significa che non è in corso alcuna operazione di scrittura. Viceversa,verificare che il bit WR di EECON1 non sia posto a 1, proprio ad indicare chenon sia in atto alcuna operazione di scrittura

2. Scrivere nel registro EEADR l'indirizzo della cella alla quale si vuole accedere3. Scrivere nel registro EEDAT il dato da scrivere4. Porre a 0 il bit EEPGD del registro EECON1, in modo da dichiarare l'accesso

alla EEPROM5. Porre a 1 il bit WREN del registro EECON1, in modo da abilitare le operazioni

di scrittrura6. Disabilitare gli interrupt, qualora siano stati abilitati in precedenza7. Eseguire una specifica sequenza composta da 5 istruzioni: scrittura di 0x55

prima nel registro W e poi nel registro EECON2, scrittura di 0xAA prima nelregistro W e poi nel registro EECON2, avviare il ciclo di scrittura ponendo a1 il bit WR

8. Riabilitare gli interrupt, se erano stati utilizzati9. Porre il bit WREN a 0 per disabilitare le operazioni di scrittura

10. Al termine della scrittura, il bit WR viene automaticamente posto a 0 e il bitEEIF viene posto a 1, ad indicare che le operazioni sono state concluse.

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 12

In C, nuovamente con qualche riga di codice si riesce ad accedere alla EEPROM inscrittura:

void write_eeprom(unsigned char eeprom_address,unsigned char eeprom_data){

char flInterruptEnabled;

// Read the Interrupt statusflInterruptEnabled = GIE;

EEADR = eeprom_address; // EEPROM address stored in the byte register

EEDATA = eeprom_data; // Load the value that must be saved in EEPROM

EEPGD = 0; // Access to EEPROM memoryWREN = 1; // Start a data EEPROM writing cycle

GIE = 0; // Disable Interrupt

/* REQUIRED SEQUENCE */EECON2 = 0X55;EECON2 = 0XAA;WR = 1;

/* REQUIRED SEQUENCE */

// Enabling interrupt, only if requiredGIE = flInterruptEnabled; // Enable Interrupt

while (EEIF == 0); // Wait for the end of the writing operationEEIF = 0; // Clear the EEPROM interrupt flagWREN = 1;

}

Invece, in assembly il codice è sempre preso dal datasheet:

BANKSEL EECON1 ; Select Bank of EECON1BTFSC EECON1, WR ; Wait for writeGOTO $-1 ; to completeBANKSEL EEADR ; Select Bank of EEADRMOVF ADDR, W ;MOVWF EEADR ; Data Memory Address to write

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 13

MOVF VALUE, W ;MOVWF EEDATA ; Data Memory Value to writeBANKSEL EECON1 ; Select Bank of EECON1BCF EECON1, EEPGD ; Point to DATA memoryBSF EECON1, WREN ; Enable writesBCF INTCON, GIE ; Disable INTs.MOVLW 55h ;MOVWF EECON2 ; Write 55hMOVLW AAh ;MOVWF EECON2 ; Write AAhBSF EECON1, WR ; Set WR bit to begin writeBSF INTCON, GIE ; Enable INTs.BCF EECON1, WREN ; Disable writes

Per il download dell'esempio, si faccia riferimento alla sezione DOWNLOAD di questoarticolo. </pre>

EEPROM interne ai PIC18F

Cambia qualcosa con i PIC18F. Infatti per questi PIC è facile trovare dispositivi contagli di EEPROM maggiori di 256 byte, per i quali i soli 8 bit di indirizzamento sonoinsufficienti. Il PIC18F4620, ad esempio, ha una EEPROM di 1024 byte, ossia paria 1kbyte; per accedere a tale EEPROM è indispensabile impiegare un indirizzo adalmeno 10 bit.

Le modalità di accesso alla EEPROM è la medesima a quella dei PIC16F, tanto per itagli fino a 256 byte quanto per quelli fino a 1kbyte. I file sorgente sono disponibilinella sezione DOWNLOAD di questo articolo.

Capacita EEPROM interna a PIC18F4620

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 14

Un esempio per PIC16F

La verifica di quanto accade, con i PIC16F, è espressa da un semplicissimoprogramma scritto in C per SDCC:

void main(void){

InitPic();write_eeprom(0,0x55);PORTB=read_eeprom(0);while (1);

}

Il programma non fa altro che scrivere all'indirizzo 0 della EEPROM il valoreesadecimale 0x55. Siccessivamente il programma accede nuovamente alla EEPROMinterna per la lettura del dato all'indirizzo 0. Il valore letto viene poi utilizzato perpilotare PORTB. Per verificare che il valore scritto sia effettivamente presente inmemoria, è sufficiente utilizzare MPLAB e richiedere lo stato della EEPROM interna.Prima della scrittura si presenta in questo modo:

Dopo aver eseguito il programma, se si legge mediante MPLAB la EEPROM, ecco chesi ottiene questo:

La EEPROM prima della scrittura

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 15

Si noti che all'indirizzo 0x00 è presente il valore 0x55, il che è indice di avvenutascrittura. La lettura del dato è verificabile chiaramente con lo stato di PORTB.

Download

Ho cercato di raccogliere quanto detto in due pacchetti zip, uno per PIC16F e l'altroper PIC18F:

• Accesso alla EEPROM per PIC16F (codice C per SDCC);• Accesso alla EEPROM per PIC18F (codice C per Microchip C18);

Licenza

Questo articolo ed il software rilasciato rientrano nell'ambito della licenzaCREATIVE COMMONS BY-NC-ND 3.0, secondo quanto indicato nelle note legaliqui riportate.

Sintesi delle note legali (italiano)

Note legali (italiano)

La EEPROM dopo la scrittura

Licenza Creative Commons

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 16

Legal code (international)

Commons deed (international)

Biblografia

• Datasheet PIC16F819: http://ww1.microchip.com/downloads/en/devicedoc/39598e.pdf

• Ambiente di sviluppo MPLAB: http://www.microchip.com/mplab• Compilatore SDCC: http://sdcc.sourceforge.net• GPUTILS: http://gputils.sourceforge.net• Sito web PicExperience• Collana "LO HAI MAI REALIZZATO CON UN PIC?":

◦ Il contamarce◦ Una sorpresa musicale per Babbo Natale◦ Una tecnica antirimbalzo◦ Il dado elettronico◦ Un approccio ai timer dei PICMicro◦ I PIC e i segnali analogici: la conversione A/D◦ Generare segnali PWM con i PICMicro◦ La lampada SIBILLA!◦ Una tecnica di misura della tensione di batteria◦ Il PIC tiene la data e l'ora◦ Una prima occhiata a SDCC◦ PIC Watch un semplice OROLOGIO SVEGLIA◦ I PICMicro e i display LCD alfanumerici (parte 1)◦ I PICMicro e i display LCD alfanumerici (parte 2)◦ Una semplice tecnica di PWM software

• Pillole di microcontrollori PIC:

ELECTROYOU.IT PAOLO ROGNONI (PAOLINO)

LO HAI MAI REALIZZATO CON UN PIC? - ACCESSO ALLA EEPROM INTERNA 17