Introdução à EEPROM no Arduino

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

Introdução à EEPROM no Arduino

Por que EEPROM?

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

Atualmente, existem muitos dispositivos de armazenamento disponíveis, desde dispositivos magnéticos de armazenamento, como discos rígidos de computadores, gravadores de cassetes antigos, 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.

São dispositivos de armazenamento em massa que podem armazenar dados como músicas, vídeos, documentos etc. de apenas alguns kilobytes a vários terabytes. Essa é uma memória não volátil, o que significa que os dados podem ser preservados mesmo depois que a energia da mídia de armazenamento é desligada.


O dispositivo que oferece música suave para os ouvidos ou vídeos incríveis; 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 os usuários podem modificar esses dados inadvertidamente, o que pode causar um mau funcionamento do dispositivo.

Esses dados levam apenas alguns bytes a alguns megabytes e a conexão de um dispositivo de armazenamento convencional como um meio magnético ou óptico aos chips do processador não é econômica nem fisicamente viável.

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

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

Até agora, você já tem uma idéia de por que precisamos da EEPROM em microprocessadores e chips de microcontrolador.

O que é EEPROM?

EEPROM significa memória somente leitura programável apagável eletricamente. É também uma memória não volátil que pode ser lida e escrita. byte wise.

Ler e escrever no nível de bytes torna-o diferente de outras memórias semicondutoras. Por exemplo, memória flash: lendo, gravando e apagando dados em massa.


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

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

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

Em cada endereço, ele pode armazenar dados de 8 bits, dígitos numéricos de 0 a 255. Nossos dados são armazenados em formato binário; portanto, 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á zero. será armazenado como 00000000.

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

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

Não confunda EEPROM com EPROM:

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

Ele usa o brilho intenso da luz ultravioleta no chip de armazenamento que apaga os dados armazenados. A EEPROM substituiu a EPROM e agora é pouco usada em qualquer dispositivo eletrônico.

Não confunda memória Flash para EEPROM:

Uma memória flash é uma memória semicondutora e não volátil que também pode ser apagada e programada eletricamente; na verdade, a memória flash é derivada da EEPROM. Porém, bloqueie o acesso à memória ou, em outras palavras, o acesso ao formulário de memória e sua construção é diferente da EEPROM.

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

Vida útil da EEPROM:

Como qualquer outro meio de armazenamento eletrônico, a EEPROM também possui ciclos finitos de leitura, gravação e exclusão. Mas o problema é; Possui um dos menos duráveis ​​em comparação com qualquer outro tipo de memória semicondutora.

Na EEPROM do Arduino, a Atmel reivindicou cerca de 100.000 (um lakh) de ciclo de gravação por célula. Quanto menor a temperatura no seu quarto, maior a vida útil da EEPROM.


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

Existem ICs EEPROM externos que podem ser facilmente interconectados ao Arduino com uma capacidade de memória que varia de 8 KB, 128 KB, 256 KB, etc. com uma vida útil de aproximadamente 1 milhão de ciclos de gravação por célula.

Com isso conclui a EEPROM, agora você teria obtido conhecimento teórico suficiente sobre a EEPROM.

Na próxima seção, aprenderemos como testar praticamente a EEPROM no arduino.

Como testar a EEPROM no Arduino

Para implementar isso, tudo o que você precisa é de um cabo USB e uma placa Arduino Uno, pronto.

Pelas explicações anteriores, entendemos que as EEPROMs têm um endereço onde armazenamos nossos dados. Podemos armazenar de 0 a 1023 locais 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, armazenaremos um número 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:

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

Ele solicitará que você insira o endereço que vai de 0 a 9. Na saída acima, digitei o endereço 3. Portanto, salvarei 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. A partir da saída acima, digitei o valor 5.

Então agora o valor 5 será armazenado no local do 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, ele lerá o valor armazenado no endereço comentado e exibirá o valor no monitor serial.

Concluindo, escrevemos e lemos os valores EEPROM do microcontrolador Arduino.

Agora, vamos usar a EEPROM para armazenar a senha.

Vamos inserir uma senha de 6 dígitos (nem menos nem 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 que a senha for inserida, o endereço adicional armazenará o valor “1”, indicando que a senha foi definida e o programa solicitará que você digite a senha para acender o LED.

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

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

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

Código do programa 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:

Abra o monitor serial; solicitará que você crie uma senha de número de 6 dígitos.

Digite qualquer senha de 6 dígitos, 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, interrompendo o fornecimento da placa Arduino.

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

Digite a senha correta, o LED acenderá.

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

int passExistAdd = 200;

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

Alterar esse endereço adicional enganará o programa 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 esta EEPROM no tutorial do Arduino, expressa nos comentários, poderá obter uma resposta rápida.



FONTE

Nota: Este 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 post.

Status (Não Revisado)

Se tiver algum erro coloque nos comentários

Mas se gostou compartilhe!!!



Veja mais

Axtudo
Axtudohttps://www.axtudo.com/
“Solidários, seremos união. Separados uns dos outros seremos pontos de vista. Juntos, alcançaremos a realização de nossos propósitos.” (Bezerra de Menezes)

Comentários

DEIXE UMA RESPOSTA

Por favor digite seu comentário!
Por favor, digite seu nome aqui

Captcha *Limite de tempo excedido. Por favor, complete o captcha mais uma vez.

Compartilhe


Últimos Posts

Ainda vale a pena fazer planos para o Ano...

Vídeo - link➤https:arata.se/novoanonovo Ano após ano após ano essa rotina se repete. Por isso é que surge a dúvida: será que ainda vale a...

Crocantes e suculentos: essas 6 receitas vão fazer você...

Vídeo - 6 receitas de rocamboles celestiais para você ganhar o máximo de sabor. Você provavelmente conhece alguma receita de rocambole, principalmente se ela for...

9 GADGETS DESTRUTIVOS E DE AUTODEFESA DE UM NOVO...

Vídeo - Para questoes relacionadas a direitos autorais, entre em contato conosco: [email protected] BRAIN TIME ▻ link➤https:goo.gl/1F9h4w 1. Yellow Jacket ... #GADGETS #DESTRUTIVOS...