Como usar o Arduino EEPROM para salvar dados entre os ciclos de energia

Como usar o Arduino EEPROM para salvar dados entre os ciclos de energia

Você sabia que o Arduino pode armazenar dados quando está desligado? Não é o esboço armazenado na memória flash. Estou falando de dados variáveis ​​na EEPROM. Junte-se a mim para mostrar como ler e escrever nele e o que ele pode fazer pelos seus projetos.





Se você é novo no Arduino, certifique-se de verificar nosso Guia do iniciante .





O que é EEPROM?

EEPROM significa memória somente leitura programável apagável eletricamente . É um tipo de memória não volátil. Não se preocupe se você não entender o que isso significa. Ele simplesmente armazena dados, mesmo com a energia removida (ao contrário RAM , que precisa de eletricidade para reter todos os dados).





EEPROM é construído em uma miríade de processadores, como o field-programmable gate array (FPGA) usado no Matrix Creator Pi HAT. Todos os Arduinos têm EEPROM disponível, mas a capacidade varia de acordo com o modelo. Certifique-se de dar uma olhada em nosso guia de compras para obter mais detalhes sobre cada placa.

Como funciona?

EEPROM é apagado eletricamente e programado usando Tunelamento Fowler-Nordheim . Você não precisa saber os detalhes técnicos para poder usá-lo. A premissa básica é que a eletricidade é usada para alterar os dados binários (o que é binário). Ele pode ser lido, apagado e reescrito eletronicamente.



Felizmente, o Linguagem Arduino facilita a alteração de dados, tudo sem a necessidade de um diploma em ciência da computação.

Expectativa de vida

Embora seja fácil usar a EEPROM no Arduino, ela tem uma vida útil limitada. EEPROM é especificado para lidar com 100.000 ciclos de leitura / exclusão. Isso significa que você pode gravar e depois apagar / reescrever os dados 100.000 vezes antes que a EEPROM se torne instável. Na realidade, Atmel (os fabricantes do 'Chip' do Arduino) semicondutores podem lidar com um número maior ou menor de ciclos, dependendo das tolerâncias de cada processador.





Depois que um local é gravado e apagado muitas vezes, ele pode começar a se tornar inseguro. Ele pode não retornar os dados corretos ou retornar o valor de um bit vizinho.

Isso pode soar como muitas gravações, mas pode ser fácil atingir esse limite lendo e escrevendo programaticamente (em um ciclo , por exemplo). Ler dados não degrada o silício, só escrever faz . Você pode ler os dados da EEPROM o quanto quiser, sem medo!





É importante observar que esse limite se aplica a cada local de memória. Seu Arduino pode ter 1.000 ou mais locais de memória disponíveis na EEPROM, portanto, se você gravar muitas vezes em um local, será apenas aquele local afetado e nenhum dos outros. Mais tarde estarei discutindo nivelamento de desgaste , que pode reduzir o desgaste da EEPROM ao distribuir os dados uniformemente - algo que os SSDs fazem uso.

Para que é útil?

EEPROM é incrivelmente útil para seus projetos Arduino. Como ele lembra os dados mesmo quando a energia é removida, você pode armazenar o estado do Arduino. Talvez você possa construir uma torre de laser que lembre sua posição ou a quantidade de 'munição' restante. Você pode usá-lo para controlar seus aparelhos e registrar quantas vezes seu aparelho foi ativado.

EEPROM é mais adequado para coisas como configurações ou pontuações altas. Se você deseja gravar dados complexos regularmente, talvez considere um escudo Ethernet (com slot SD integrado) ou um Raspberry Pi.

Leia e escreva

Agora que a teoria foi descoberta, vamos ver como ler e escrever alguns dados! Primeiro, inclua a biblioteca (que vem com o IDE do Arduino):

#include

Agora escreva alguns dados:

EEPROM.write(0, 12);

Isso escreve o número 12 para localização EEPROM 0 . Cada gravação leva 3,3 milissegundos ( em , 1000ms = 1 segundo). Observe como você não pode escrever cartas ( Caracteres ), apenas os números de zero a 255 são permitidos. É por isso que a EEPROM é ideal para configurações ou pontuações altas, mas não tão boa para nomes ou palavras de jogadores. É possível armazenar texto usando este método (você pode mapear cada letra do alfabeto para um número), no entanto, você precisará ter vários locais de memória - um local para cada letra.

Veja como você lê esses dados:

como fazer uma antena hd
EEPROM.read(0);

Zero é o endereço para o qual você escreveu anteriormente. Se você não escreveu para um endereço antes, ele retornará o valor máximo ( 255 )

Existem alguns métodos ligeiramente mais úteis disponíveis. Digamos que você queira armazenar uma casa decimal ou string:

EEPROM.put(2,'12.67');

Isso grava os dados em vários locais - algo que seria fácil de gravar você mesmo, mas útil mesmo assim. Você ainda precisará controlar em quantos locais isso foi gravado, para não sobrescrever acidentalmente seus dados! Você tem que usar o pegue método para recuperar esses dados novamente:

float f = 0.00f;
EEPROM.get(2, f);

O valor de get é armazenado no float f variável. Observe como isso é inicializado com 0,00f como o valor. o f permite que o compilador saiba que você pode querer armazenar um grande número nesta variável, para definir algumas configurações adicionais durante a compilação.

o Documentação EEPROM no Site do Arduino tem muitos mais exemplos.

Nivelamento de desgaste

O nivelamento de desgaste é uma técnica usada para reduzir o desgaste e aumentar a vida útil da EEPROM. Se você estiver trabalhando apenas em um pequeno projeto, não precisa se preocupar com isso.

A coisa mais simples que você pode fazer para preservar a vida da EEPROM é limitar suas gravações a um local específico. Você pode fazer isso lendo o endereço primeiro e, se o valor que deseja escrever já estiver presente, não há necessidade de escrevê-lo novamente (lembre-se de que ler os dados não faz mal). Veja como você faria isso:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Esse é um código bem simples, mas só funciona para inteiros! Em vez de reinventar a roda, use a função incorporada à biblioteca EEPROM do Arduino:

EEPROM.update(address, val);

Este método tem exatamente a mesma assinatura que o escrever , embora possa reduzir drasticamente o número de gravações necessárias!

Se você precisar gravar muitos dados e estiver preocupado com o desgaste do silício, pode controlar quantas gravações você faz, embora isso use mais dados. Aqui está uma implementação aproximada em pseudo-código :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Você precisará armazenar o endereço e o writeCount na EEPROM (e o writeCount precisará ser dividido nos locais de endereço). Na maioria das vezes, esse nível de proteção não será necessário. Arduinos também são baratos, então você pode achar mais fácil comprar um backup!

Agora você deve saber o suficiente para fazer alguns projetos incríveis. Deixe-nos saber se você fizer algo legal! Você consegue reconhecer todos os dispositivos nas fotos? Deixe-nos um comentário abaixo!

Compartilhado Compartilhado Tweet O email 5 dicas para turbinar suas máquinas Linux VirtualBox

Cansado do fraco desempenho oferecido pelas máquinas virtuais? Aqui está o que você deve fazer para aumentar o desempenho do VirtualBox.

Leia a seguir
Tópicos relacionados
  • faça você mesmo
  • Arduino
  • Eletrônicos
Sobre o autor Joe Coburn(136 artigos publicados)

Joe é graduado em Ciência da Computação pela University of Lincoln, no Reino Unido. Ele é um desenvolvedor de software profissional e, quando não está pilotando drones ou escrevendo música, pode ser encontrado tirando fotos ou produzindo vídeos.

Mais de Joe Coburn

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever