Tiny RTC não segura dados após desligamento do GND

Pessoal venho por esta como minha última esperança, eis que comprei 1 par de tiny RTCs da China, muito animado guardei para um próximo projeto, eis que surgiu a necessidade de utiliza-lo, mas eu não entendendo, a bateria tá ok, código também, bibliotecas ok, mas todos os dois módulos persistem em resetar os valores da memória quando desligado o GND, já não sei mais o que faça, fucei tudo que é fórum e grupos, mas nada feito, espero que alguém possa me dar uma luz.

Bom, só avisando que, quando temos uma questão é bom darmos toda a informação necessária para que consigamos uma resposta satisfatória, ou seja, seria interessante dizer qual o modelo de RTC usado, mostrar o seu código e assim, você teria melhores respostas.

No entanto, ao pesquisar sobre RTC’s ruins, desses comprados no Ali ou Ebay, cheguei ao modelo DS1307, há uma discussão sobre exatamente este problema aqui: http://forum.arduino.cc/index.php?topic=209057.0

Não houve uma conclusão, apenas teorias sobre como resolver. O que me chamou a atenção foi a resposta:

The battery circuit of this module is poorly designed and is likely to result in unreliable operation. See this post for an explanation and a fix: http://forum.43oh.com/topic/4131-ds1307-rtc-eeprom-from-ebay-possible-unreliable-operation/

The circuit diagram is here: http://www.hobbyist.co.nz/sites/default/files/docs/RTC/Tiny_RTC_schematic.pdf

I suggest to replace R6 with a jumper, remove R4 and either the diode or R5 and use a standary 2032 coin cell for the battery.

Aparentemente, o problema é no RTC que não tem um bom gerenciamento de bateria, tente pagar um pouco mais caro em um RTC melhor, ou tente as sugestões, uma das sugestões que poderia dar certo seria:

  • Remove battery
  • Remove D1, R6 and R4
  • Solder jumper wire in place of R6
  • Inspect crystal soldering - fix if necessary
  • Replace battery
1 curtida

Opa! Me perdoe a falta de informação, acho que ainda vou mexer nas bibliotecas, já caí nesse tópico citado algumas vezes, mas ainda to criando coragem pra faze-lo, até pq não me apareceu nenhum caso de sucesso ainda…

Bom, não tenho o módulo mas, não é apenas uma pessoa com o problema, são várias, então eu acho que, se você é um caso desse DS1307, apenas alterar código não deverá adiantar e há casos de sucesso no procedimento, se ler o tópico no 43oH, o usuário oPossum explica detalhadamente o problema: É falha de design mesmo.

R4 & R6 create a voltage divider between the battery and the DS1307. This raises the source impedance (spec sheet warns against this) and increases the current draw from the battery. The voltage divider was necessary because the battery voltage would float at about 4.2V volts due to the D1/R5 circuit! That would keep the DS1307 disabled if present on the Vbat pin. Replacing R6 with a jumper allows the full battery voltage to Vbat.

1 curtida

@arthurcvm, por acaso seu módulo é um desses?

Pelo que pude ver em um circuito desse tipo de módulo a bateria passa por um divisor de tensão e tem um diodo (1N4148) para carregar a bateria, caso a mesma seja recarregável (não CR2032).

No datasheet do RTC (DS1307) informa que o valor mínimo suportável de Vbat é 2V para manter as informações em RAM. Tens como medir o pino 3 do DS1307 com o módulo desligado de tudo e com a bateria instalada nele?

Se tiver uma tensão menor do que 2V tente verificar os contatos do house da bateria, ou se existe algum elemento isolador.

Se estiver utilizando uma bateria do tipo CR2032 o melhor é retirar mesmo a malha R4, R5, R6 e D1 e colocar um jumper em R6.

Se quiser ter menos trabalho retire somente o D1.

Fora isso creio que o problema pode ser mais complexo como solda fria, soldagem mal feita dos contatos, etc.

Abraços.

1 curtida

Sobre solda fria ou trincada, acho muito improvável, já reforcei todas elas, vou seguir a dica de vocês quando chegar em casa e posto os resultados.

Wagner eu testei com o multímetro os dois pinos de saída da bateria que ficam nos extremos do verso da house dela e tá dando 3.1v, testei o pino 3 do 1307 e tá dando 1.7v, retiro o D1 então?

Sem o D1 retorna o mesmo valor no pino 3, vou remover os resistores.

Bem, retirei o D1, R5, R4 e R6, fiz o jumpeamento nos contatos do R6 e percebi que a tensão que leio na house da bateria é a mesma que leio no pino 3 do 1307, mas mesmo assim quando removo o terra do arduino ele reseta o relógio, sim eu comento a linha de código que recolhe o tempo e reenvio antes de fazer isso.

Bom eu entendo que isso é o correto para Vbat.

Agora o que pode estar acontecendo é algum ruído.

O que você quer dizer com retira o GND? Simplesmente desliga a fonte de alimentação ou retira fisicamente o fio do GND da placa?

1 curtida

Retiro o GND entre o módulo e o arduino, mas resolvi finalmente meu problema, o módulo não estava bem com defeito ( mas a retirada dos resistores foi uma boa, agora recebo Vcc = Vbat = 3.1v no pino 3), enfim entendi o por quê que o módulo tem pinos repetidos, eu estava jogando o código no atmega e reimplantando-o numa placa stand alone, assim como o módulo, mas resetava quando desplugava, mas não resetava quando cortada a alimentação do arduino, resolvi então soldar os outros pinos enquanto o arduino rodava em serial fui conectando no stand alone depois retirei do arduino, quando repus no arduino vi que ele enfim teria segurado o time, obrigado pessoal! Problema sanado!

1 curtida

@arthurcvm, que bom.

Abraços.

Arthur, boa tarde! Não consegui entender o que fez para resolver seu problema com ds1307?
Se puder explique com detalhes o que fez para resolver.

Oi @tiagocolombi! O que rolou foi o seguinte: se seu módulo é o mesmo do que tá em discussão você deverá utilizar os dois lados de pinos obrigatoriamente, a partir do momento que você desliga o GND do Arduino com esse módulo ele irá resetar o time. A solução então é você utilizar o segundo pino GND que ele tem, que se encontra do outro lado da placa, você deixa um GND conectado a placa Arduino que você tá setando o tempo e conecta o outro GND no Stand Alone que irá ficar no projeto. A partir do momento que você faz isso já pode desconecta-lo totalmente do Arduino.