Bom dia

 Tenho um código que escreve na EEPROM  valores diferentes no mesmo endereço.

  Entretanto, me deparo com  situações estranhas e gostaria de tentar entender o porque disso.
  O problema ocorre independente se escrevo como INT ou DOUBLE  ou FLOAT .

 Nesse exemplo :

 EEPROM.put(72, 232.56 );
 EEPROM.put(72,     0.89 );
 EEPROM.put(72, 655.40 );

 ou Neste :

 EEPROM.put(72, 23256 );

 EEPROM.put(72,     890   );
 EEPROM.put(72, 65540 );

  O ultimo dado gravado mostrarpa sempre  :  Se Int  =  4   , se Double = 0.04

  Porque? Alguém sabe?

  Agradeçp desde já qualquer ajuda.

Exibições: 607

Responder esta

Respostas a este tópico

Olá Elcids!

Eu também suspeitei que ele estivesse "esmerilhando" a EPROM.

Mas sem ver os sketchs, é difícil saber.

Parece que o rapaz não precisa mais de ajuda.

Pena. Não sei se você é professor, mas tem talento para isto.
Tuas explicações são precisas e detalhadas. Não aprende quem não quer!

E de graça!

Abraço!

boa noite DT,

      sim, de fato ele estava "esmerilhando" a EEPROM com uma velocidade de cerca de 10 vezes por segundo (pois certamente aquele trecho estava no "loop").  Aí enquanto "esmerilhava", ele ia lá e desligava a alimentação, e conforme o VCC ia caindo, isso provocava mal funcionamento da CPU e da Máquina de Estados que controla a EEPROM, conforme podemos ver neste trecho do datasheet da CPU AVR, no texto que marquei em amarelo:


      E por azar, nas vezes que ele fez isso, corrompeu o endereço 74, e preservou o 72, resultando nos bytes 0x04, 0x00, 0x00, e 0x00, implicando no valor "long" 0x00000004.

      Então ao alterar o código (comentando as linhas com "put") e regravando no Arduino, na sequência que isso era feito (provavelmente clicando na IDE e então ligando o Arduino) não chegava novamente a reiniciar o "esmerilhamento", devido ao RESET via USB ocorrer antes da execução do "loop" (principalmente se estava usando modelo do Nano onde o "Old Bootloader"  demora mais tempo).

      Tudo isso por causa de um loop "descontrolado" gravando na EEPROM  a ~10x por segundo e então a alimentação era desligada (ou seja, era puxado o freio de mão quando o carro tava engrenado a 80 por hora e esperava que tudo continuasse bem). Fala sério.

      Desculpe a demora em responder,  mas o dia hoje foi particularmente difícil e ainda não terminou.

      abrçs,

      Elcids

Boa noite, Elcids!

Também estou em um dia difícil, que não terminou ainda, por incrível que pareça.

Não o culpe, pelo jeito é muito jovem e os jovens tem direito a errar.

Parece que ele não gostou muito do jeito como você respondeu, mas com a experiência que só a idade traz, vai aprender que cada um de nós tem os seus defeitos e que possamos, às vezes, estar interpretando mal o outro.

Se fosse comigo, pensaria que você estava utilizando uma atitude paternal, até por ter percebido a inexperiência do rapaz e por este seu estilo incisivo, no sentido de chamar bastante atenção para os fatos que são importantes, presente em todos os teus posts que tenho lido.

Só é uma pena que estas pequenas desavenças acabem por prejudicar a ambos, ele porque perdeu uma valiosa ajuda e você porque, tenho certeza, sente prazer em ajudar, e foi impedido de continuar a fazê-lo neste caso.

Mesmo que ele se descadastre do LdG, acho que depois, de cabeça fria, talvez volte, porque tenho certeza que você não ficou magoado com ele e voltará a judá-lo, se houver esta ocasião novamente.

E mais tarde, quando tiver adquirido conhecimento e experiência, possa também vir a ajudar tantos quantos resolvam trilhar este caminho fantástico, e altamente viciante, da tecnologia.

Abraço!

Olá.

   Acredito que a questão seja que int define números de  -32,768 a 32,767. Quando vc escreve 65540 está trabalhando fora da faixa, acaba dando erro.

   tente unsigned int.

  

ref:

https://www.arduino.cc/reference/pt/language/variables/data-types/int/

olá Marcondes.

      O tipo "unsigned int"  não adiantaria, pois para este tipo o máximo representável é  65535,  e o César estava testando com o valor 65540.

      Por isso sugeri que ele usasse o "long", que é um 32 bits "sinalizado".  Dê uma olhada nas explicações que coloquei no meu post anterior, onde demonstro porque ele estava lendo o valor "4".

      abrçs,

      Elcids

Mas acredito que o RV (Mineirin) não seja tão chato como eu .............

kkkkkkkk

é,

      eu suspeito...

      abrçs,

      Elcids

Mudaram seu nome e nem te avisaram.

"  Responder até Cesar Cesar 10 horas atrás
   O código que me refiro é o que o Alcides postou :  "

Noooossssaaaa,  pra que isto?

"

 Responder até Cesar Cesar 1 hora atrás

Amigo, agradeço de verdade a boa vontade, mas quem vai passar sou eu ...

Resolvo de outra forma, grato."

Já foi pra minha lista.

   Para ser honesto, minha última postagem deveria ter sido logo a primeira, pois minha dúvida foi colocada e a resposta que obtive foi :      "   eu sei o motivo.  Mas essa "eu passo",  porquê sua questão não está bem formulada,  e não tão clara.  "     Aguém citou no decorrer achar ser um excelente professor ...  Ainda bem que não encontrei nenhum assim , porque o mínímo que se esperaem uma situação assim seria : " Você não foi claro, pode reformular por favor ? "   ...     Após verificar os "ensinamentos" , e citar o que eu achei que seria a causa , me respondeu :
       " Sério, que você acha isso ??  "....
    Então, desde o início estava mais para me "chacotar" do que outra coisa ...
     O fato de alguém precisar de alguma coisa jamais deve permitir o direito de ser esculhambado ...
    E se tem alguém que de fato lamento ter sido adicionado a lista negra, é o Mineirin que por dezenas de vezes já me ajudou a solucionar questões, sempre de forma respeitosa quanto a eventuais ignorâncias de saber de minha parte ... Esse é professor!
     Vou me descadastrar do forum após 8 anos, mas no caso em específico reforço minha última postagem e colocação.
       Forte Abraço !

      uma pena vc não ter sido tão claro e efetivo antes, como foi agora.  Poderia ter um rumo diferente.

      E é importante olharmos para nós mesmos, porque quase sempre estamos achando que as pessoas estão nos "esculhambando", mas quase nunca percebemos quando nós é que estamos criando dificuldades  e  "esculhambando" desde o início.

      De fato, todos nós temos nossos demônios internos,  e eles nos seguem para onde quer que vamos.  Então, vamos seguir nossos caminhos.

Bom dia caro Sr. CESAR CESAR, 

lista negra foi por sua conta.

Eu a chamo de lista das PNG, (Persona Non Grata).

Significado de Persona non grata
Diplomata que não foi aceito para representar o governo.

Mas ela deveria receber o nome de   PMA.(Pessoa mal agradecida).

Entra nesta lista o nome de pessoas que sequer dizem um obrigado, quando recebem uma ajuda, mesmo que a ajuda não resolva o problema dela, afinal alguém esforçou e gastou tempo ajudando ela, e tempo que poderia ter sido usado para ajudar outra pessoa.

Mas ela não é tão fixa como pode parecer, e existem maneiras de o nome ser removido dela:

  Basta usar o bom senso e atitudes de remediar o ocorrido.

RV mineirim

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço