Introdução à EEPROM no Arduino

Relacionados

Neste post vamos entender o que é EEPROM, como os dados são armazenados no EEPROM embutido no microcontrolador da placa Arduino e também testar praticamente como escrever e ler dados no EEPROM por alguns exemplos.

INTRODUÇÃO À EEPROM NO ARDUINO

Por que EEPROM?

Antes de perguntarmos o que é EEPROM? É muito importante saber por que a EEPROM é usada para armazenamento em primeiro lugar. Assim, temos uma ideia clara sobre EEPROMs.

Existem muitos dispositivos de armazenamento disponíveis hoje em dia, desde dispositivos de armazenamento magnético como discos rígidos de computador, gravadores de fita cassete da velha escola, mídia de armazenamento óptico como CDs, DVDs, discos Blu-ray e memória de estado sólido como SSD (Solid State Drive) para computadores e cartões de memória etc.

Estes são dispositivos de armazenamento em massa que podem armazenar dados como músicas, vídeos, documentos, etc. de poucos Kilobytes a vários Terabytes. Trata-se de memória não volátil, o que significa que os dados podem ser retidos mesmo após o corte de energia no meio de armazenamento.

O dispositivo que oferece música suave para os ouvidos ou vídeos de arregalar os olhos; como computador ou smartphone; armazena alguns dados críticos, como dados de configuração, dados de inicialização, senhas, dados biométricos, dados de login etc.

Esses dados mencionados não podem ser armazenados em dispositivos de armazenamento em massa por motivos de segurança e também esses dados podem ser modificados pelos usuários involuntariamente, o que pode levar ao mau funcionamento do dispositivo.

Esses dados levam apenas alguns bytes a alguns megabytes, conectar um dispositivo de armazenamento convencional como meio magnético ou óptico a chips de processador não é economicamente e fisicamente viável.

Assim, esses dados críticos são armazenados nos próprios chips de processamento.

O Arduino não é diferente de computador ou smartphones. Existem várias circunstâncias em que precisamos armazenar alguns dados críticos que não devem ser apagados mesmo após o corte de energia, por exemplo, dados do sensor.

Até agora, você teria uma idéia de por que precisamos de EEPROM em microprocessadores e chips de microcontroladores.

O que é EEPROM?

EEPROM significa Memória Somente Leitura Programável Eletricamente Apagável. É também uma memória não volátil que pode ser lida e escrita em bytes.

Ler e escrever em nível de byte o torna diferente de outras memórias de semicondutores. Por exemplo, memória flash: leitura, escrita e apagamento de dados em blocos.

Um bloco pode ter algumas centenas a milhares de bits, o que é viável para armazenamento em massa, mas não para operações “Read Only Memory” em microprocessadores e microcontroladores, que precisam acessar dados byte a byte.

Na placa Arduino Uno (ATmega328P) tem na placa 1KB ou 1024 bytes de EEPROM. Cada byte pode ser acessado individualmente; cada byte tem um endereço que varia de 0 a 1023 (total de 1024).

Endereço (0-1023) é um local de memória onde nossos dados serão armazenados.

Em cada endereço você pode armazenar dados de 8 bits, dígitos numéricos de 0 a 255. Nossos dados são armazenados em formato binário, então se escrevermos o número 255 na EEPROM ele armazenará o dígito como 11111111 em um endereço e se armazenarmos zero, ele armazenará como 00000000.

Você também pode armazenar texto, caracteres especiais, caracteres alfanuméricos etc. escrevendo o programa apropriado.

Os detalhes de construção e o funcionamento não são discutidos aqui, o que pode tornar este artigo longo e pode deixá-lo sonolento. Vá para o YouTube ou Google, existem artigos/vídeos interessantes sobre a construção e funcionamento do EEPORM.

Não confunda EEPROM com EPROM:

Em poucas palavras, a EPROM é uma memória somente leitura programável eletricamente, o que significa que pode ser programada (armazenar memória) eletricamente, mas não pode ser apagada eletricamente.

Ele utiliza o brilho da luz ultravioleta acima do chip de armazenamento que apaga os dados armazenados. EEPROM veio como substituto para EPROM e agora quase não é usado em qualquer dispositivo eletrônico.

Não confunda Memória Flash com EEPROM:

Uma memória flash é uma memória semicondutora e não volátil que também é apagável eletricamente e programável eletricamente, de fato, a memória flash é derivada de EEPROM. Mas o acesso à memória por blocos ou em outras palavras, a forma como a memória é acessada e sua construção difere da EEPROM.

O Arduino Uno (microcontrolador ATmega328P) também possui 32 KB de memória flash para armazenamento de programas.

Vida útil da EEPROM:

Como qualquer outro meio de armazenamento eletrônico, a EEPROM também possui ciclos finitos de leitura, gravação e apagamento. Mas o problema é; ele tem um dos menores tempo de vida comparado a qualquer outro tipo de memória semicondutora.

Na EEPROM do Arduino, a Atmel reivindicou cerca de 100.000 (um lakh) ciclo de gravação por célula. Se a temperatura ambiente for menor, maior será a vida útil da EEPROM.

Observe que a leitura de dados da EEPROM não afeta significativamente a vida útil.

Existem CIs EEPROM externos que podem ser interfaceados com Arduino com facilidade com capacidade de memória variando de 8 KB, 128 KB, 256 KB etc. com vida útil de cerca de 1 milhão de ciclos de gravação por célula.

Isso conclui a EEPROM, agora você teria adquirido bastante conhecimento teórico sobre EEPROMs.

Na seção a seguir, aprenderemos como testar a EEPROM no arduino de forma prática.

Como testar EEPROM no Arduino

Para implementar isso, tudo que você precisa é de um cabo USB e uma placa Arduino Uno, você está pronto para começar.

Pelas explicações acima entendemos que as EEPROMs possuem Endereço onde armazenamos nossos dados. Podemos armazenar de 0 a 1023 localizações no Arduino Uno. Cada local pode acomodar 8 bits ou um byte.

Neste exemplo vamos armazenar dados em um endereço. Para reduzir a complexidade do programa e mantê-lo o mais curto possível, vamos armazenar um inteiro de um dígito (0 a 9) em um endereço de 0 a 9.

Código do programa nº 1

Agora, faça o upload do código para o Arduino:
//------------------Program Developed by R.GIRISH-------------------//
#include
int inputAddress = 0;
int inputValue = 0;
int ReadData = 0;
boolean Readadd = true;
boolean Readval = true;
void setup()
{
Serial.begin(9600);
Serial.println("Enter the address (0 to 9)");
Serial.println("");
while(Readadd)
{
inputAddress = Serial.read();
if(inputAddress > 0)
{
inputAddress = inputAddress - 48;
Readadd = false;
}
}
Serial.print("You have selected Address: ");
Serial.println(inputAddress);
Serial.println("");
delay(2000);
Serial.println("Enter the value to be stored (0 to 9)");
Serial.println("");
while(Readval)
{
inputValue = Serial.read();
if(inputValue > 0)
{
inputValue = inputValue - 48;
Readval = false;
}
}
Serial.print("The value you entered is: ");
Serial.println(inputValue);
Serial.println("");
delay(2000);
Serial.print("It will be stored in Address: ");
Serial.println(inputAddress);
Serial.println("");
delay(2000);
Serial.println("Writing on EEPROM.....");
Serial.println("");
EEPROM.write(inputAddress, inputValue);
delay(2000);
Serial.println("Value stored successfully!!!");
Serial.println("");
delay(2000);
Serial.println("Reading from EEPROM....");
delay(2000);
ReadData = EEPROM.read(inputAddress);
Serial.println("");
Serial.print("The value read from Address ");
Serial.print(inputAddress);
Serial.print(" is: ");
Serial.println(ReadData);
Serial.println("");
delay(1000);
Serial.println("Done!!!");
}
void loop()
{
// DO nothing here.
}
//------------------Program Developed by R.GIRISH-------------------//

SAÍDA:

IMG 624438B14FBF8

Depois que o código for carregado, abra o monitor serial.

Ele solicitará que você insira um endereço que varia de 0 a 9. Na saída acima, digitei o endereço 3. Então, estarei armazenando um valor inteiro no local (endereço) 3.

Agora, ele solicitará que você insira um valor inteiro de um dígito, variando de 0 a 9. Na saída acima, inseri o valor 5.

Então, agora o valor 5 será armazenado no local de endereço 3.

Depois de inserir o valor, ele gravará o valor na EEPROM.

Ele mostrará uma mensagem de sucesso, o que significa que o valor está armazenado.

Após alguns segundos lerá o valor que está armazenado no endereço comentado e mostrará o valor no monitor serial.

Em conclusão, escrevemos e lemos os valores da EEPROM do microcontrolador do Arduino.

Agora, vamos usar a EEPROM para armazenar a senha.

Estaremos inserindo uma senha de número de 6 dígitos (não menos ou não mais), ela será armazenada em 6 endereços diferentes (cada endereço para cada dígito) e um endereço adicional para armazenar “1” ou “0”.

Depois de inserir a senha, o endereço adicional armazenará o valor “1” indicando que a senha está definida e o programa solicitará que você digite a senha para acender o LED.

Se o valor do endereço adicional armazenado for “0” ou qualquer outro valor estiver presente, ele solicitará que você crie uma nova senha de 6 dígitos.

Pelo método acima, o programa pode identificar se você já definiu uma senha ou precisa criar uma nova senha.

Se a senha digitada estiver correta, o LED embutido no pino 13 acende, se a senha digitada estiver incorreta, o LED não acenderá e o monitor serial avisará que sua senha está errada.

Código do programa nº 2

Agora faça o upload do código:
//------------------Program Developed by R.GIRISH---------------//
#include
int passExistAdd = 200;
const int LED = 13;
int inputAddress = 0;
int word1 = 0;
int word2 = 0;
int word3 = 0;
int word4 = 0;
int word5 = 0;
int word6 = 0;
int wordAddress1 = 0;
int wordAddress2 = 1;
int wordAddress3 = 2;
int wordAddress4 = 3;
int wordAddress5 = 4;
int wordAddress6 = 5;
int passwordExist = 0;
boolean ReadVal1 = true;
boolean ReadVal2 = true;
boolean ReadVal3 = true;
boolean ReadVal4 = true;
boolean ReadVal5 = true;
boolean ReadVal6 = true;
int checkWord1 = 0;
int checkWord2 = 0;
int checkWord3 = 0;
int checkWord4 = 0;
int checkWord5 = 0;
int checkWord6 = 0;
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
passwordExist = EEPROM.read(passExistAdd);
if(passwordExist != 1)
{
Serial.println("Enter a new 6 number password:");
while(ReadVal1)
{
word1 = Serial.read();
if(word1 > 0)
{
word1 = word1 - 48;
ReadVal1 = false;
}
}
while(ReadVal2)
{
word2 = Serial.read();
if(word2 > 0)
{
word2 = word2 - 48;
ReadVal2 = false;
}
}
while(ReadVal3)
{
word3 = Serial.read();
if(word3 > 0)
{
word3 = word3 - 48;
ReadVal3 = false;
}
}
while(ReadVal4)
{
word4 = Serial.read();
if(word4 > 0)
{
word4 = word4 - 48;
ReadVal4 = false;
}
}
while(ReadVal5)
{
word5 = Serial.read();
if(word5 > 0)
{
word5 = word5 - 48;
ReadVal5 = false;
}
}
while(ReadVal6)
{
word6 = Serial.read();
if(word6 > 0)
{
word6 = word6 - 48;
ReadVal6 = false;
}
}
Serial.println("");
Serial.print(word1);
Serial.print(word2);
Serial.print(word3);
Serial.print(word4);
Serial.print(word5);
Serial.print(word6);
EEPROM.write(wordAddress1, word1);
EEPROM.write(wordAddress2, word2);
EEPROM.write(wordAddress3, word3);
EEPROM.write(wordAddress4, word4);
EEPROM.write(wordAddress5, word5);
EEPROM.write(wordAddress6, word6);
EEPROM.write(passExistAdd,1);
Serial.println(" Password saved Sucessfully!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
if(passwordExist == 1)
{
Serial.println("");
Serial.println("Please enter the 6 digit number password:");
while(ReadVal1)
{
word1 = Serial.read();
if(word1 > 0)
{
word1 = word1 - 48;
ReadVal1 = false;
}
}
while(ReadVal2)
{
word2 = Serial.read();
if(word2 > 0)
{
word2 = word2 - 48;
ReadVal2 = false;
}
}
while(ReadVal3)
{
word3 = Serial.read();
if(word3 > 0)
{
word3 = word3 - 48;
ReadVal3 = false;
}
}
while(ReadVal4)
{
word4 = Serial.read();
if(word4 > 0)
{
word4 = word4 - 48;
ReadVal4 = false;
}
}
while(ReadVal5)
{
word5 = Serial.read();
if(word5 > 0)
{
word5 = word5 - 48;
ReadVal5 = false;
}
}
while(ReadVal6)
{
word6 = Serial.read();
if(word6 > 0)
{
word6 = word6 - 48;
ReadVal6 = false;
}
}
checkWord1 = EEPROM.read(wordAddress1);
if(checkWord1 != word1)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
checkWord2 = EEPROM.read(wordAddress2);
if(checkWord2 != word2)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
checkWord3 = EEPROM.read(wordAddress3);
if(checkWord3 != word3)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
checkWord4 = EEPROM.read(wordAddress4);
if(checkWord4 != word4)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
checkWord5 = EEPROM.read(wordAddress5);
if(checkWord5 != word5)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
checkWord6 = EEPROM.read(wordAddress6);
if(checkWord6 != word6)
{
Serial.println("");
Serial.println("Wrong Password!!!");
Serial.println("");
Serial.println("Press Reset Button.");
while(true){}
}
digitalWrite(LED, HIGH);
Serial.println("");
Serial.println("LED is ON");
Serial.println("");
Serial.println("Press Reset Button.");
}
}
void loop()
{
}
//------------------Program Developed by R.GIRISH---------------//

SAÍDA:

IMG 624438B175280

Abra o monitor serial; ele solicitará que você crie uma senha numérica de 6 dígitos.

Digite qualquer senha de 6 dígitos e anote-a e pressione enter. Agora a senha foi armazenada.

Você pode pressionar o botão de reset ou desconectar o cabo USB do PC, o que interrompe o fornecimento da placa Arduino.

Agora, reconecte o cabo USB, abra o monitor serial, que solicitará que você insira a senha de 6 dígitos salva.

Digite a senha correta, o LED acenderá.

Se você quiser alterar a senha, altere o dígito do código:

int passExistAdd = 200;

A linha acima é o endereço adicional que discutimos antes. Altere de 6 a 1023. Os endereços de 0 a 5 são reservados para armazenar a senha de 6 dígitos.

Alterar este endereço adicional enganará o programa de que a senha ainda não foi criada e solicitará que você crie uma nova senha de 6 dígitos.

Se você tiver alguma dúvida sobre este tutorial de EEPROM no Arduino, por favor, expresse nos comentários, você pode receber uma resposta rápida.

Hashtags: #Introdução #EEPROM #Arduino
 

FONTE


Nota: Este conteúdo foi traduzido do Inglês para português (auto)
Pode conter erros de tradução

Olá, se tiver algum erro de tradução (AUTO), falta de link para download etc…
Veja na FONTE até ser revisado o conteúdo.
Status (Ok Até agora)


Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!

Relacionados

Relacionados