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.
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por