Guida alla Programmazione in C del PIC, 8° Parte

Guida alla Programmazione in C del PICNella Ottava Parte della Guida si Parlerà della Memoria EEPROM, come Leggerla e Scriverla con MikroC, Sarà Inoltre Presentato un Esempio…


 
 
 
 




 
INTRO

La maggior parte dei microcontrollori PIC dispone di una memoria EEPROM altre alla memoria per contenere le istruzioni da eseguire e una RAM per contenere le variabile da usare durante l’esecuzione delle istruzioni. La memoria EEPROM può essere usata per scrivere dati che poi vanno letti dopo il riavvio del sistema. Ad esempio bisogna memorizzare un conteggio e poi mantenere il dato memorizzato anche quando si spegne il microcontrollore per poi riavviare il conteggio alla prossima accensione. Grazie alla EEPROM è possibile. Mikroc dispone della libreria per svolgere tutte le operazioni di lettura e scrittura della EEPROM.

 




 

LETTURA E SCRITTURA

Per scrivere un dato nella EEPROM si utilizza la seguente istruzione:

EEPROM_Write(“numero cella di memoria”, “valore da memorizzare”);

Come ad esempio EEPROM_Write(0x00, 12); ovvero memorizzo nella cella 0 il valore 12. Bisogna controllare dal datasheet quante memoria ha il PIC che si va ad utilizzare. Il PIC18F252 ha 256 celle di memoria.

Per leggere la memoria si utilizza la seguente istruzione:

“variabile” = EEPROM_Read(numero cella di memoria);

dove la variabile è dove si vuole andare a scrivere il valore letto, mentre il numero della cella di memoria è dove si trova la cella che si vuole leggere, ad esempio “leggi = EEPROM_Read(0x00);” ovvero vado a leggere il valore 12 ad esempio se in precedenza si è utilizzata l’istruzione vista sopra.
 

CONTATORE CON MEMORIA

Come programma di esempio viene realizzato un contatore che ha la possibilità di far partire il valore del conteggio dal valore presente nel precedente conteggio. Ovvero, avvio il conteggio, si spegne il microcontrollore e alla successiva accensione il valore del conteggio riparte dal valore precedente.

Il codice è:

int conta;                     //variabile conteggio

void main() {                  //programma principale

TRISB = 0;                     //portb uscite

conta = EEPROM_Read(0x00);     //leggi valore nella cella 0

 while(1){                     //ciclo infinito

  conta++;                     //incrementa conta

  EEPROM_Write(0x00, conta);   //scrivi il valore di conta nella EEPROM

  PORTB = conta;               //visualizza conteggio

  delay_ms(1000);              //delay

 }
}

Prima di tutto si inizializza una variabile per contenere il conteggio, poi si avvia il programma principale dove si inizializza il banco di I/O PORTB come uscite e si va a scrivere nella variabile conta il valore della cella di memoria 0, in questo modo il valore di conta riparte da quello precedente.

Nel ciclo infinito si va ad incrementare il valore di conta e poi lo si va a scrivere in memoria e lo si visualizza in uscita. Per avere un incremento ogni secondo si usa un delay di 1000ms.

Lo schema è il seguente:

counter eeprom schemaNello schema manca l’alimentazione cha va inserita come descritto nelle guide precedenti. Anche senza spegnere il dispositivo, ma semplicemente resettandolo, si può arrestare il conteggio per poi farlo ripartire semplicemente modificando lo stato dello switch SW1.

 




 
FUSES

Come visto in articoli precedenti,  la maggior parte dei fuses permettono di controllare le memorie. Ad esempio per il PIC18f252 si hanno i seguenti fuses:

fuses EEPROM

Come al solito si vanno a disabilitare fuses che non servono e si setta la tensione di brownout e il tipo di oscillatore usato. Poi come si può leggere abilitando EEPROM protect e EEPROM write protection si può impedire la scrittura della EEPROM. Le altre protezioni sono per la memoria ROM che contiene il programma da eseguire. Si può proteggere in lettura e in scrittura. La protezione della lettura evita che la memoria rom venga letta dall’esterno, la protezione alla scrittura rende il dispositivo non più riprogrammabile, quindi attenzione a questi fuses.
 

DOWNLOAD

Potete scaricare il codice già compilato e la simulazione del circuito dal seguente LINK!!!




 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *