Estou trabalhando em um projeto ATMega que manterá o tempo e estou tentando fazê-lo para que você tenha uma opção de RTCs de tempo de software (baseado em millis ()), DS1307 ou DS3231 (ChronoDot).
No mais básico, o que eu gostaria de fazer é ter cabeçalhos para um ChronoDot disponíveis para solda e, de alguma forma, em software, detectar se o ChronoDot está conectado e mudar para usá-lo. Normalmente, seria fácil verificar se o DS1307 ou DS3231 está presente enquanto eles usam o mesmo registro I2C, mas após essa verificação inicial eles se desviam um pouco do outro e o último possui mais recursos. Então, eu ainda quero determinar qual está conectado. Em geral, pretendo ter um lugar diretamente a bordo para soldar no DS1307 como opção padrão e o suporte ao DS3231 seria com um ChronoDot completo apenas por meio de cabeçalhos duplos de 4 pinos. O ChronoDot caberia essencialmente sobre o local onde o DS1307 normalmente iria (não seria preenchido nesse caso). A principal razão pela qual estou focando o ChronoDot especificamente é que ele ' s popular, fácil de adquirir e não requer solda SMD para o usuário final (isso se for para um kit). Então, aqui está o que eu estou pensando ...
O DS1307 e o DS3231 têm uma linha Vbat no chip, mas não é realmente necessário para nada. No entanto, o ChronoDot possui um pino VBat real na placa de interrupção. Talvez eu pudesse conectar apenas o Vbat do cabeçalho do ChronoDot e não o DS1307 e conectá-lo a um pino de entrada digital no meu ATMega. Mas esse pino de entrada foi puxado para o chão por um resistor (não tenho muita certeza de qual valor ... talvez 4,7k?). Se minha teoria de EE estiver correta, posso ler esse pino e, se eu estiver baixo, não há cronodot, mas se eu estiver alto, sim.
Algo assim:
simular este circuito - esquemático criado usando o CircuitLab
Minha principal pergunta aqui é se isso acabará esgotando a bateria de backup no RTC? Normalmente, não há corrente extraída da bateria de reserva enquanto a alimentação principal de 5V é fornecida, mas conectá-la a uma entrada digital faria com que ela consumisse energia da bateria o tempo todo? Ou, existe um modo em que eu precisaria colocar o pino depois de ler a fim de "desconectá-lo", por assim dizer? Eu sei que poderia alterá-lo para saída, mas acredito que, se estiver definido como saída e baixo, eu estaria basicamente aterrando a bateria.
Enfim, meus cursos de EE foram há muito tempo. Qualquer ajuda sobre a teoria aqui seria apreciada.
Praticamente qualquer um desses esquemas de medição que envolvam resistores, se permanentemente conectados, causará consumo de corrente inaceitável e redução da vida útil da pequena bateria de lítio que alimenta esses dispositivos.
A solução, então, é fazer com que o circuito de medição consuma corrente durante breves momentos em intervalos pouco frequentes, quando você estiver realmente fazendo uma medição.
Para um teste digital, isso pode ser tão fácil quanto usar um pulldown interno configurável por software e configurá-lo apenas como um pulldown por um breve período em torno do teste. No entanto, você precisará examinar possíveis complicações de ter tensão no pino quando o MCU que estiver fazendo a medição não estiver ligado / no modo de suspensão.
Uma medição analógica seria mais complicada, mas idéias semelhantes poderiam ser aplicadas. Por exemplo, você pode conectar o resistor mais baixo de um divisor de tensão (alta impedância em relação às E / Ss) a um pino de saída e reduzi-lo apenas por um tempo em torno da medição. Ou você pode até construir um circuito RC com um pequeno capacitor de baixo vazamento e um único pino de E / S que você pode gerar baixo como uma saída, configurar como entrada analógica e medir a tensão após algum período de tempo. Se a tensão limite digital do dispositivo for consistente (cuidado com a temperatura!), Você pode fazer uma medição analógica com uma entrada digital dessa maneira, medindo o tempo que o capacitor leva para carregar na tensão limite.
fonte
O DS3231 possui temperatura interna que você pode ler. Você pode emitir um comando sobre I2C para ler a temperatura; se você receber uma resposta, terá o DS3231; caso contrário, o DS1307.
fonte