Esses tempos quando estava tentando salvar um dado(Temperatura) na EEPROM, deparei com a limitação de 1 byte por endereço, podendo salvar números de 0 255 por endereço, já um dado float tem 4 bytes.
Então resolvi o problema com seguinte algoritmo que o ocupa dois endereços de memoria para casa dado float.(considerando duas casas decimais)
Exemplo: Salvar 3 dados float
Dado 1 p=0 (ocupa posição 0 e 1)
Dado 2 p=2 (ocupa posição 2 e 3)
Dado 3 p=4 (ocupa posição 4 e 5)
A posição para cada dado tem que ser posição do ultimo dado + 2.
void gravar(float x,int p) //X valor a ser salvo P posição na memoria
{
EEPROM.write (p,int(x));
EEPROM.write (p+1,int((x-int(x))*100));
}
float ler(int p)
{
return float(EEPROM.read(p))+ float(EEPROM.read(p+1))/100;
}
Comentar
Olá galera.... estou com problemas e nao consegui resolver, algumas coisas são sinistras ...
estou trabalhando com temperatura tbm e é float.
fiz o que ta no post entre outras maneiras e não obtive resultado esperado! ENFIM...
tenho uma temperatura float = 100 por exemplo... dai eu tenho botoes para aumentar e diminuir essa temperatura...depois de feito alteração no valor, gostaria que armazena-se na EEPROM...
Valeu... !
Thiaoor, existe uma forma de ampliar a eeprom (colocando um CI de memória externa I2C como o AT24C08, por exemplo) , estou para testar isso nas próxima semanas, mas tem tutoriais bem completos, como este: http://arduino.cc/playground/Code/I2CEEPROM.
O cartão SD tb é legal e prático (utilizei um micro SD e alguns resistores e funcionou)
Abç
Mas era isso mesmo que eu queria saber hehe. Obrigado, vou dar uma olhada nos shields.
Não tem não, a não ser que você use um shild com scard ou uma memoria.
Entendi, obrigado!
E existe como ampliar? Pq 1kb é muito pouco.
ROM é memoria de somente leitura
EEPROM é um tipo de ROM apagável(por um pulso elétrico) e programável(Gravar)
Thiago por exemplo: Existe um sistema que armazena a temperatura máxima do dia, e acabou a energia por 2 segundos no final da tarde, assim você acabou de perder o dado pois o sistema foi reiniciado. Se você armazenar os dados na EEPROM você pode recupera-lo na reinicialização do sistema, assim você não perde o dado!
De nada Ricardo! :D
Vou aproveitar o assunto e fazer uma pergunta:
No futuro, o armazenamento em memória ROM (ou EEPROM) será algo muito útil para mim, logo, existem shields ou componentes para aumentar o seu tamanho e também salvar números float? (imagino que deve existir sim, pois existe quase tudo para arduino hehe)
Entendi sim, valeu pessoal.
Só mais uma coisa: eu falei ROM pq imaginei que EEPROM era o equivalente da ROM, mas qual é a diferença entre a EEPROM e a ROM de uma BIOS de PC?
Abraço!
Olá Thiagoor,
Um dos motivos de se gravar um dado na EEPROM (não é ROM), é que o valor fica salvo e pode ser recuperado posteriormente, mesmo após um RESET ou um desligamento do microcontrolador.
Imagine que o seu sistema tem uma variavel que deve ser ajustada pelo usuário.
Um exemplo é o setpoint de temperatura da resistencia de aquecimento em uma chocadeira, imagine que a temperatura deva ser ajustada em um valor específico, e que este valor deva ser ajustado durante a instalação, mas que não é desejável deixar o mesmo fixo no sketch do arduino, pois para mudar o mesmo seria preciso fazer a alteração na IDE e fazer o upload novamente. Se o setpoint ficar armazenado na RAM, toda vez que o circuito fosse desligado, o operador teria que ajustar o setpoint de temperatura novamente, agora se ele for armazenado na EEPROM, o ajuste fica guardado indefinidamente, podendo ser alterado facilmente.
Isso facilita a vida do operador da máquina e agrega muito valor ao produto.
Entendeu?
Abraço.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)