Pessoal, estou com uma dúvida de principiante. 

Li em diversos artigos que tanto o ESP32 quanto o Atmega328 tem uma vida útil de sua memória flash muito pequena. Coisa de 10 milhões de gravações em alguns artigos.
Ai vem minha dúvida: Se eu estiver lendo um sensor de vazão, por exemplo, e quiser salvar o valor acumulado das vazões de 1 e 1 segundo, na melhor das hipóteses eu ficaria sem esses dados gravados em menos de um ano.
Pergunta: Existem memórias que tem vida útil maior?

No mercado há medidores de vazão que prometem funcionar por oito anos sem trocar bateria e sem perder dados?

Alguém tem alguma referencia de literatura sobre isso? Algum chip que eu poderia usar via I2C, por exemplo?

Agradeço qualquer notícia.

   

Exibições: 548

Responder esta

Respostas a este tópico

Boa tarde.

Existe um pouco de confusão sobre o entendimento deste limite de gravação.

vamos focar por exemplo no Atmega328.

Ele tem uma EEPROM de 1028 bytes (1K).

Ele permite gravar até 100.000 vezes No MESMO ENDEREÇO de memoria.

The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.

ref:  https://docs.arduino.cc/learn/built-in-libraries/eeprom

Então se usar sempre o mesmo endereço de memória a cada segundo, a memoria vai durar:

100.000/60 ~= 1.660 horas;

1660/24 ~= 70 dias 

mas se você gravar em um endereço, e depois a cada vez que for gravar, incrementar o endereço,

você pode então entender a vida da memoria  por 70 * 1024  dias ~=  71.11 dias = 195 anos

 

Se você gravar 1 "int" vai poder gravar até 512 "ints"  então duraria ~= 100 anos.

Acredito que seja este processo a solução encontrada pelos projetistas destes produtos do mercado.

RV mineirin

Olá, José Roberto.

   O que o RV disse é bastante comum neste tipo de aplicação em ambientes profissionais.

   Inclusive os grantes fabricantes de microcontroladores tem application notes mostrando como fazer. Alguns até já trazem rotinas prontas junto com a instalação da IDE. Infelizmente acho que este não é o caso do Arduino.

   Uma outra solução, infelizmente mais cara e menos prática é utilizar um conceito conhecido com "early power down detection", que funciona mais ou menos assim:

   Você trabalha na RAM, não na EEPROM.

   Você tem um circuito que monitora a tensão DC de alimentação antes do filtro capacitivo da fonte, de tal modo que, quando a energia cair, este circuito informa a queda um bom tempo antes da alimentação do µC cair.

   Esta informação é roteada para um pino que gera uma interrupção no µC que, então, salva os dados na EEPROM e "espera sentado" pelo desligamento, que chamaos de "graceful power down".

   Quando a alimentação volta, os dados da EEPROM são recarregados na RAM em primeiro lugar.

   É claro que a deteção de power down tem que ser antecipada o suficiente para a operação de gravação na EEPROM ocorrer na sua totalidade.

   Além disso, tem o acréscimo do circuito de detecção, que na ideia do RV não precisa.

   Citei apenas a título de informação.

D. T. Ribeiro.

Olá Ribeiro e Rui,

Obrigado pelas informações. Vi no Aliexpress umas placas prontas com o ESP32 acoplado a uma bateria de lítio 18650. A placa já vem com o controlador de carga embutido nela e um botão de power on/off. Acho que a solução é colocar umas placas dessas e manter o dado na RAM eternamente. Se cair a energia a bateria entra e continua salvando os valores. O que acham disso? Que eu saiba a RAM não tem limites, ou se tem, ele é enorme.

Acho que vc está num bom caminho, recomendo ele, alem das possiblidades já citadas pelos colegas que também resolveriam.

Mas, queria somar mais uma ideia, especialmente se vc pretende fazer um medidor digital com contagem paralela em um hidrometro que tem a parte de relojoaria, mas tem saida pulso.

Digo, depois de 1zilhão de pulsos vc precisa que o contador mecanico e o eletrônico ainda estejam sincronizados.

A ideia é por parte da contagem em hardware. Vc colocar um integrado contador de baixo consumo, por ex o CD4040, ligado com bateria de relógio (das grandes).
Vc guardaria na eeprom só a quantidade de vezes que houve o transbordo (parte maior da contagem). Claro, vc precisa ler o contador pra ter o numero todo.
A grande vantagem desse método é que se houver pequenas travadas no ESP32 vc não perde pulso. Pelo menos nos projetos que fiz eu fiquei meio chateado com ele, as vezes acontecem resets por ex quando a internet cai e volta. Ele se perde todo e acaba resetando. Durante o boot vc pode perder pulsos.

Existe um tipo novo de memória que oferece uma quantidade de escritas absurdamente maior, mas... É novidade, não seguiria esse caminho:

https://en.wikipedia.org/wiki/Ferroelectric_RAM

Existe no mercado uma plaquina de relógio, que é basicamente um relogio de tempo real com bateria acoplada.

A questão é que alguns desses relógios se comportam como memórias e possuem alguns bytes a mais que vc pode usar como RAM permanente (com pilha).

Ex:
- CY14C101I tem 128Kb de memória (alguns bytes são reservados para o relógio).
- DS1307 "56-Byte, Battery-Backed, General-Purpose RAM with Unlimited Writes"
Plaquinha já montadas em geral (precisa ver qual tem a capacidade que vc precisa).
Link de busca no Mercadolivre

Eduardo,

Que ideia boa! É exatamente isso que eu preciso. Estou lendo um medidor de vazão (hidrômetro) que tem uma saída analógica 4 a 20mA. Então eu leio a corrente de 30 em 30 segundos e envio para um servidor MQTT. Ocorre que além da vazão estanque, eu preciso da vazão acumulada. Aí eu pensei em ler de 1 em 1 segundo com o ESP32 ou Arduino fazer os devidos cálculos para achar a vazão acumulada e ir salvando isso. Só que 3600 gravações por dia vai estourar a EEPROM em alguns dias. Como eu vou salva um valor de no máximo 32 bits o DS1307 vai servir. Eu tenho até uns aqui. Vou fazer os testes e retorno
Obrigado pela sugestão!

Bom dia, 

Gravar dados na RAM?

Fria. Se algum dia der algum problema de energia vai perder tudo. 

Pode gravar na RAM e na FLASH (mais moderna) , ao mesmo tempo. 

Você pode adicionar várias memórias FLASH se necessário. 

Exemplo:

Memória Flash W25Q32

https://www.eletrogate.com/modulo-de-memoria-flash-w25q32

https://datasheetspdf.com/pdf-file/713151/Winbond/W25Q32BV/1

Olá Murta, boa tarde!

Penso que a ideia do Eduardo acima é bem funcional. O que você acha?

Zé Roberto

Agora que vc falou em MQTT, vc pode usar o proprio MQTT como memória.

Se ele estiver subscrito na informação vc receberá o ultimo valor gravado sempre que ligar o aparelho.

Não sei se é uma boa ficar mandando pra nuvem de segundo em segundo tb.

Mas já são mais opções.

Eu acho que o ideal seria pegar o melhor de cada coisa.

Por ex a cada segundo gravar no RTC e a cada minuto na eeprom.

Se cair a energia vc para de contar, pq o microcontrolador todo desliga.

Se cair a internet ok, não é dependente.

Se cair a pilha (acabar/hora de troca) vc recupera a contagem com perda máxima de 1 minuto.

O MQTT pode funcionar tb, mas se houver queda de internet vc fica perdido.

Boa noite,

Concordo com o Eduardo, 

por exemplo, faz uma coleta de dados durante um período e depois grava na nuvem. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço