Arduino - Aula 17 - EEPROM

EEPROM (também escrita E2PROM, e pronunciada "e-e-prom"), sigla do inglês de Electrically-Erasable Programmable Read-Only Memory, é um tipo de memória não-volátil usada em computadores e outros dispositivos eletrônicos para armazenar pequenas quantidades de dados que precisam ser salvos quando a energia é removida.





O microcontrolador na placas baseadas em Arduino e Genuino AVR tem EEPROM: memória cujos valores são mantidos quando a placa é desligada (como um pequeno disco rígido). Esta biblioteca permite ler e gravar esses bytes.

Os micro-controladores suportados nas várias placas Arduino e Genuino têm diferentes quantidades de EEPROM: 

  • 1024 bytes no ATmega328P, 
  • 512 bytes no ATmega168 e ATmega8, 
  • 4 KB (4096 bytes) no ATmega1280 e ATmega2560. 
  • As placas Arduino e Genuino 101 têm um espaço EEPROM emulado de 1024 bytes.

Atenção: as memórias EEPROM permitem aproximadamente 100.000 gravações antes de apresentarem problemas. Assim, devemos usar com cuidado.


Tamanho das variáveis:

Lembrando: 1 byte = 8 bits



  • int, unsigned int - 2 bytes -  de -32,768 a 32,767
  • bool - 1 byte - 1 ou 0
  • char - 1 byte
  • string - indefinido número de bytes (matrix de char)
  • float, long, unsigned long, double - 4 bytes


Biblioteca:

É necessário sempre incluir a biblioteca EEPROM.h
#include <EEPROM.h>


Comandos:
  • write - escreve
EEPROM.write(i, 0);

i = dato a ser escrito
0 = endereço inicial da memória


  • read - lê
EEPROM.read(address);
    address = endereço inicial da memória


    • clear - limpa as memórias
    for (int i = 0 ; i < EEPROM.length() ; i++) {
        EEPROM.write(i, 0);
    }



    Trabalhando com valores da entrada analógica:

    Como uma variável INT ocupa 2 bytes, e se queremos utilizar somente um byte para ler uma entrada analógica, devemos então dividir o valor por 4.

    1 byte = valores até 255

    Entrada analógica = de 0 a 1023 (1024 valores)

    Então: 1024 / 4 = 255

    Não podemos esquecer de multiplicar o valor por 4 quando fizermos a leitura.


    Video:

    Exemplo de escrita:

    #include <EEPROM.h>

    int addr = 0;

    void setup() {
    }

    void loop() {

    int val = analogRead(0) / 4;   // divide por 4 para utilizar somente 1 byte
    EEPROM.write(addr, val);

    delay(1000);
    }



    Exemplo de leitura:

    #include <EEPROM.h>

    int address = 0;
    byte value;

    void setup() {

    Serial.begin(9600);

    }

    void loop() {

    value = EEPROM.read(address);

    Serial.print(address);
    Serial.print(" valor = ");
    Serial.println(value*4, DEC);   // multiplicar por 4 se for o caso

    delay(500);

    }



    Exercícios:

    • Crie um programa que armazena no byte 0 da EEPROM o valor 45 e no 10 o valor 500.
    • Crie um novo programa que soma os valores dos endereços da EEPROM 0 e 10 e envia pela serial o resultado.