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

Você sabia que o Arduino pode armazenar dados quando está desligado? Estou falando sobre a EEPROM, então junte-se a mim enquanto mostro como ler e escrever.

Você sabia que o Arduino pode armazenar dados quando está desligado?  Estou falando sobre a EEPROM, então junte-se a mim enquanto mostro como ler e escrever.
Propaganda

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 enquanto mostro a você como ler e escrever, e o que ele pode fazer pelos seus projetos.

Se você é novo no Arduino, verifique o nosso guia para iniciantes Introdução ao Arduino: um guia para iniciantes Introdução ao Arduino: um guia para iniciantes Arduino é uma plataforma de prototipagem eletrônica de código aberto baseada em hardware flexível e fácil de usar e software. É destinado a artistas, designers, amadores e qualquer pessoa interessada em criar objetos ou ambientes interativos. Consulte Mais informação .

O que é a 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 da RAM Um Guia Rápido e Sujo para a RAM: O Que Você Precisa Saber Um Guia Rápido e Sujo para a RAM: O que você precisa saber A RAM é um componente crucial de cada computador, mas pode confunde-se em entender se você não é um guru da tecnologia. Neste post, vamos dividi-lo em termos fáceis de entender. Leia mais, que precisa de eletricidade para reter quaisquer dados).

Exemplo de tiro EEPROM

A EEPROM é integrada a uma infinidade de processadores, como o FPGA (field-programmable gate array) usado no Matrix Creator Matrix Creator para Raspberry Pi Review Matrix Creator para Raspberry Pi Review O Matrix Creator é um canivete suíço para o seu Pi, com 15 sensores, um conjunto de protocolos de comunicação, um anel de LEDs RGB, uma matriz de microfone e muito mais! Leia mais Pi HAT. Todos os Arduinos têm EEPROM disponível, mas a capacidade varia por modelo. Certifique-se de dar uma olhada no nosso guia de compra Arduino Guia de compra: Qual placa você deve obter? Guia de compra do Arduino: Qual placa você deve obter? Existem tantos tipos diferentes de placas Arduino por aí, você seria perdoado por estar confuso. Qual você deve comprar para o seu projeto? Deixe-nos ajudar, com este guia de compra do Arduino! Leia mais para mais detalhes sobre cada placa.

Como funciona?

A EEPROM é apagada eletricamente e programada usando o tunelamento Fowler-Nordheim . Você não precisa conhecer os detalhes técnicos para poder usá-lo. A premissa básica é que a eletricidade é usada para mudar os dados binários (o que é binário O que é binário? [Tecnologia explicada] O que é binário? [Tecnologia explicada] Dado que o binário é tão absolutamente fundamental para a existência de computadores, parece estranho nós nunca abordamos o tópico antes - então hoje eu pensei em dar uma breve visão geral do que binário ... Leia mais). Pode ser lido, apagado e reescrito eletronicamente.

Felizmente, o Arduino Language facilita a troca de dados, tudo sem precisar de um diploma em ciência da computação.

EEPROM Close Up

Expectativa de vida

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

EEPROM Close Up

Uma vez que um local tenha sido escrito e apagado muitas vezes, ele pode começar a ficar inseguro. 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 alcançar esse limite se estiver lendo e escrevendo programaticamente (em um loop, por exemplo). A leitura de dados não degrada o silício, apenas a escrita o 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ê escrever muitas vezes em um local, apenas esse local será impactado e nenhum dos outros. Posteriormente estarei discutindo o nivelamento de desgaste, que pode reduzir o desgaste de EEPROM distribuindo dados uniformemente - algo que os SSDs Estimam o tempo restante de vida útil de seu SSD Como estimar o tempo restante de seu SSD Todos os SSDs têm uma vida útil limitada devido a gravação ciclos (embora essa expectativa de vida seja muito mais longa do que você imagina). Veja como você pode estimar o quão perto está do fim. Leia mais fazer uso de.

O que é útil para?

A EEPROM é incrivelmente útil para seus projetos do Arduino. Como ele se lembra dos dados, mesmo quando a energia é removida, você pode armazenar o estado do Arduino. Talvez você possa construir uma torre de laser Pew Pew! Como construir uma torre laser com um banco Pew Arduino! Como construir uma torre laser com um Arduino Você está entediado? Pode também construir uma torre laser. Leia mais que se lembra de sua posição ou quanto "munição" está permanecendo. Você poderia usá-lo para controlar seus aparelhos Control Appliances de um Arduino: O Início dos Appliances de Controle de Automação Residencial de um Arduino: O Início da Automação Residencial Da última vez, mostrei a você algumas maneiras de fazer seus projetos do Arduino controlados via SiriProxy, OS Os itens que podem ser falados embutidos no X e alguns scripts do Automator, ou até mesmo um chip de hardware de reconhecimento de voz dedicado. Eu ... Leia Mais e registre quantas vezes seu appliance foi ativado.

A EEPROM é mais adequada para coisas como configurações ou pontuações altas. Se você quer regularmente escrever dados complexos, talvez considere um escudo ethernet. Dê ao seu Arduino seu próprio mini-servidor Web, com um escudo Ethernet Dê ao seu projeto Arduino seu próprio mini-servidor Web, com um escudo Ethernet Há um tempo, mostrei como para configurar um sistema de controle de internet para o seu Arduino - mas ele tinha que ficar conectado a um computador através de USB, a fim de manter a conexão com a internet .... Leia mais (com built-in slot SD) ou um Raspberry Pi Raspberry Pi: Tutorial não oficial Raspberry Pi: O Tutorial Não Oficial Se você é um proprietário atual de Pi que quer aprender mais ou um potencial proprietário deste dispositivo de cartão de crédito, este não é um guia que você quer perder. Consulte Mais informação .

EEPROM Close Up

Leia e escreva

Agora que a teoria está fora do caminho, vamos ver como ler e escrever alguns dados! Primeiro, inclua a biblioteca (isso vem com o IDE do Arduino):

#include 

Agora escreva alguns dados:

 EEPROM.write(0, 12); 

Isso grava o número 12 no local 0 da EEPROM. Cada gravação leva 3, 3 milissegundos ( ms, 1000ms = 1 segundo). Observe como você não pode escrever letras ( char ), 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 boas 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:

 EEPROM.read(0); 

Zero é o endereço que 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 escrever, mas não é prático. Você ainda precisará acompanhar quantos locais foram gravados, para não substituir acidentalmente seus dados! Você precisa usar o método get para recuperar esses dados novamente:

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

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

A documentação da EEPROM no site do Arduino tem muito 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 projeto pequeno, talvez não precise se preocupar com isso.

EEPROM Close Up

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 primeiro o endereço, e se o valor que você quer escrever já estiver presente, não há necessidade de escrevê-lo novamente (lembre-se, ler dados não causa nenhum dano). Veja como você faria isso:

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

Isso é um pouco simples, mas só funciona para números inteiros! Em vez de reinventar a roda, use a função incorporada na biblioteca EEPROM do Arduino:

 EEPROM.update(address, val); 

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

Se você precisar escrever muitos dados e estiver preocupado em usar o silício, poderá acompanhar quantas gravações você faz, embora isso use mais dados. Aqui está uma implementação aproximada no pseudocódigo:

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

Você precisará armazenar endereço e writeCount na EEPROM (e writeCount precisará ser dividido entre os endereços). Na maioria das vezes, esse nível de proteção não será necessário. Arduinos são tão baratos assim, 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ê faz algo legal! Você consegue reconhecer todos os dispositivos nas fotos? Deixe um comentário abaixo!

In this article