Olá pessoal.

Estou usando o RTC DS 1307 que por sinal funcionou por mais ou menos uma hora normal, configurando a data e relógio certinho. Porém, depois não consegui mais reescrever mais. Estou monitorando pelo Serial Monitor e realmente posso resetar, reinstalar o programa que funcionava antes e nada.

Não sai mais disso: 2099/10/10 1:3:20

Alguém já teve essa experiência e pode me ajudar?

Será problema no shield ou esqueci de fazer algo?

E estou usando esse shield do URL :

http://produto.mercadolivre.com.br/MLB-587236214-shield-relogio-tem...

Este é o código que estou utilizando, sendo um dos exemplos da biblioteca "RTClib.h"

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    rtc.adjust(DateTime(11, 9, 2014, 14, 2, 9));
  }
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
    
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(1000);
}

Exibições: 4027

Responder esta

Respostas a este tópico

Obrigado.

Com o sensor de nível também dará, mas o ideal é o sensor de peso, para medir a massa da porção do cão.

Estou estudando uns strain gages para poder fazê-lo. Se vc souber de algo no mercado que se encaixa nisso, serei grato.

Estou com o mesmo problema não segura o tempo nem com reza!

E o pior que pelo que estou lendo e pesquisando, para esse shield processar as informações guardadas na memória precisa realmente do microcontrolador.

Vi muitos comentários que ele contava desligando praticamente tudo, mas nenhum na prática.

Sofri mais de ano na mao dos DS's. O lance é que depois de um tempo praticando, se descobre muitas variaveis sobre o funcionamento do CI.

Esse CI possui um oscildor interno, que quando com bateria, fica trabalhando mesmo desligado, para que não se perca a dt-hr.

Esse Oscilador é punk. Um surto na rede, inducao eletromagnetica no hardware ou descarga... digamos que qualquer faisquinha que seja, o estrago é grande. Comigo eu presenciei todos os tipos de problemas possiveis:

Ora o Ci travava e nunca mais de ressucitava. Ora eu nao conseguia atualizar a data hora, porem o tempo continuava incrementando. E o mais incrivel: semana passada vi a primeira placa com mais de ano trabalhado em campo sem perder dt-hr, sem travar. 100% full.

Resumindo, boas praticas que previnem o bom funcionamento do CI sao:

1. use uma boa fonte de alimentacao para seu projeto.

2. utilize capacitores de desacoplamento para cada circuito em particular.

3. utilize uma boa bateria ou feche um jumper para o gnd

5. um zenner 3v3 na bateria para o gnd previne surto

6. evite fios com mau contato. prefira soldar

7. use resistor pull-up na linha i2c

Estava aqui pensando nos problemas, tive poucos com RTC, os resistores pull-up são essenciais, tirando a questão da fonte e o mal contato, as demais não conhecia.

Valeu cara.

Minha dúvida está só parte do funcionamento sem com o microcontrolador desligado e depois reiniciado  período. 

O tempo continua no horário que o microcontrolador foi desligado.

Só estou pesquisando alguma função do shield para usar na programação para confirmar se ele realmente não funciona sem uma cpu.

Eu tenho um shield igual ao seu e outros dois modelos, nenhum deles dependem do microcontrolador para funcionar, apenas para fazer a leitura do horário. O mais provável é que a sua shield deva estar com defeito se de fato não está processando a hora quando o arduino/PIC está desligado.

Uma outra opção é que a bateria da sua shield esteja sem carga, ai sim o único horário que o processador guardaria seria apenas o que foi calculado enquanto estava ligado a energia do microcontrolador. Não vejo outro motivo para este erro

Ainda estou pesquisando.

Mas as baterias estão boas e eu comprei dois shields é quase impossível eles dois terem vindo com o mesmo defeito.

Pelo que já pesquisei a memória Atmel 24c32 guarda os estágios da contagem entre o microcontrolador e o ds 1307 que basicamente é um clock com registro de tempo gravados em sua memória RAM. Possui controle lógico na sua arquitetura, mas não uma cpu interna para processamento individual de dados.

Desculpe minha desconfiança cara, mas vc poderia mostrar o seu shield RTC funcionando com o Arduino e depois você o desligando   mostrando o tempo , e com um minuto depois religá-lo e ver se o shield continua o relógio no tempo real? Ou igual ao meu aqui continua no tempo que o microcontrolador foi desligado?

Rodrigo segue o vídeo, acabei testando com uma shield que eu mesmo fabriquei, onde ela possui um oscilador de melhor precisão, mas mesmo assim é o mesmo DS1307. segue o link do video

https://www.youtube.com/watch?v=BqshdcTozdo&feature=youtu.be

Muito obrigado Tiago. Mas esse   vídeo ainda não tira minha questão porque nele vc não está usando o shield RTC que coloquei no enunciado. Se vc estivesse usando um  circuito equivalente a este shield, que vem com o DS e a memória 24c32, daí de boa.

Nesse seu vídeo notei que vc está usando o "arduino" e outro C.I que ao meu ver seria um  Pic, talvez. E se for um microcontrolador mesmo você poderia está usando a energia da bateria de 3v3 e  a cpu dele para continuar o processo dos dados do tempo.

Foi mau pela minha chatice com isso tudo, mas fiquei três dias praticamente pesquisando e só vejo esse shield contando em tempo real se vc estiver  alimentando o microcontrolador com uma fonte externa que poderia ser a própria bateria do shield RTC.

Bom Rodrigo fiz o que pude, pois não faz sentido algum um Shield RTC que só funciona só quando o microcontrolador arduino/PIC estiver funcionando, pois a função dele é justamente medir o tempo quando não estiver funcionando tendo assim maior precisão e economizando bastante energia.

No meu projeto não usei PIC, apenas o Garagino e o outro chip que é o próprio DS1307 (ele é grande assim mesmo), de um KIT RTC que encontrei na webtronico (fica uns 6 reais mais frete, gostei tanto dele que comprei mais dois depois desse).A bateria não está conectada ao Garagino, apenas ao RTC. 

O que é muito comuns destes RTC's dependendo da montagem e a qualidade do cristal é eles terem um pequeno atraso na contagem do tempo. Este kit que comprei é muito bom praticamente não atrasa, agora o módulo e a shield que comprei prontos, não possuem muita precisão. 

A sua shield usa o mesmo DS1307 ao que eu entendi contem de brinde uma Eprom que você pode utilizar para armazenar dados, e não para armazenar a contagem do tempo, pois a contagem do tempo é uma variável volátil, sendo assim armazenada e destruída no próprio DS1307 e não na Eprom. 

Certo. Muito obrigado pela atenção Tiago, desculpe qualquer coisa.

Estou verificando agora com um professor da faculdade e quando resolver, postarei aqui a solução. Se realmente é algo na programação ou no hardware.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço