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;
}

Exibições: 6852

Comentar

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)

Comentário de burst em 23 julho 2013 às 11:57

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... !

Comentário de Pedroso em 24 novembro 2012 às 15:48

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ç

Comentário de Thiagoor em 23 novembro 2012 às 11:44

Mas era isso mesmo que eu queria saber hehe. Obrigado, vou dar uma olhada nos shields.

Comentário de Wellington Cássio em 22 novembro 2012 às 23:26

Não tem não, a não ser que você use um shild com scard ou uma memoria.

Comentário de Thiagoor em 22 novembro 2012 às 22:53

Entendi, obrigado!

E existe como ampliar? Pq 1kb é muito pouco.

Comentário de Wellington Cássio em 22 novembro 2012 às 22:44

ROM é memoria de somente leitura

EEPROM  é um tipo de ROM apagável(por um pulso elétrico) e programável(Gravar) 

Comentário de Wellington Cássio em 22 novembro 2012 às 22:36

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 

Comentário de Thiagoor em 21 novembro 2012 às 23:03

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)

Comentário de Thiagoor em 21 novembro 2012 às 22:06

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!

Comentário de Wiechert em 21 novembro 2012 às 20:57

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.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço