sexta-feira, 7 de agosto de 2015

Como usar a memória EEPROM do Arduino

O microcontrolador no Arduino possui uma memória EEPROM, Electrically-Erasable Programmable Read-Only Memory, em português memória programável somente para leitura apagável eletricamente.
Essa é uma memória que armazena dados mesmo sem alimentação elétrica e esses dados podem ser gravados e apagados, mas essas operações podem ser feitas por um número de vezes limitado, algo entre 100.000 e 1.000.000 de vezes.

Os microcontroladores ATmega328 possuem EEPROM de 1024 bytes, o ATmega168 e o Atmega8 possuem 512 bytes.

Essa memória é importante quando necessitamos armazenar, por exemplo, configurações do equipamento, que devem ser mantidas mesmo depois que ele seja desligado, para que no próximo uso as configurações não tenham que ser refeitas.

A gravação na EEPROM é feita utilizando-se a biblioteca EEPROM.h e enviando-se byte a byte para a memória.

Um código exemplo para se preencher a memória EEPROM com o número zero é o que segue:

#include<EEPROM.h>
 
char palavra[] = "seucurso";
 
void setup() {
 for(int i=0;i<sizeof(palavra);i++) {
 EEPROM.write(i,palavra[i]);
 }
}
 
void loop() {
}

Com esse código preenchemos apenas uma vez, durante a execução da função setup(), a memória EEPROM disponível com zeros. No caso estou usando um microcontrolador ATmega168, de 512 bytes.
Esse exemplo pode ser utilizado para limpar (zerar) a memória.
A função EEPROM.write() recebe dois parâmetros, o primeiro a posição da memória, de 0 até o máximo disponível, e o byte a ser guardado.
Um exemplo para guardar a palavra “seucurso” é:

#include<EEPROM.h>
 
char palavra[] = "seucurso";
 
void setup() {
 for(int i=0;i<sizeof(palavra);i++) {
 EEPROM.write(i,palavra[i]);
 }
}
 
void loop() {
}

Esse código acima grava a palavra seucurso a partir da primeira posição a memória EEPROM, ou seja, zero.
Para ler a memória EEPROM é mais simples ainda, basta usar a função EEPROM.read() e passar como parâmetro a posição de memória a ser lida:


#include<EEPROM.h>
 
int posicao = 0;
byte valor;
 
void setup()
{
 Serial.begin(9600);
}
 
void loop()
{
 valor = EEPROM.read(posicao);
 
 Serial.print(posicao);
 Serial.print("\t");
 Serial.write(valor);
 Serial.println();
 posicao++;
 if (posicao == 512)
 posicao = 0;
 delay(500);
}

Com esse exemplo, lemos uma posição da EEPROM e enviamos via porta serial para o PC, dessa forma podemos ver o resultado abrindo o Serial Monitor do Arduino.

Note que a leitura é feita byte a byte e quando chegamos ao final da memória voltamos ao início novamente.



 
← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário