Nella 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:
Nello 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:
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!!!