Go Down

Topic: RTC Parando de Funcionar (Read 2664 times) previous topic - next topic

Sergio_S

Bom dia, esta acontecendo algo estranho com os meus modulos RTC. Já comprei 3 porem toda vez que desligo eles da placa do arduino não consigo mais ligar, já tentei de varias formas sem sucesso até de placa do arduino já troquei. Sempe aparece a menssagem RTC is not runig. O que sera que esta acontecedo ? sera que estao queimando ?

Grato

Sérgio

bubulindo

Sem indicares quais os módulos, como estás a interligar e que código estás a utilizar... a única coisa que consigo dizer é que provavelmente algo está mal.

Coloca aqui mais informacões sobre o que referi em cima e certamente que eu ou alguém saberá dizer o que se passa. ;)
This... is a hobby.

Sergio_S

Boa noite bubulindo, obrigado pela atenção, apenas dois modulos estao conectados ao arduino o mudulo de LCD e o RTC .
o RTC esta conectado assim:
RTC      Arduino
GND --> GND
VCC --> 5V
SDA -->  A4
SCL -->  A5

Segue codigo:

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

RTC_DS1307 RTC;

void setup () {
    Serial.begin(9600);
    pinMode(A3, OUTPUT);
    analogWrite(A3, 255);
    pinMode(A2, OUTPUT);
    analogWrite(A2, 0);
    Wire.begin();
    RTC.begin();

  if (RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
    Serial.println("Data e hora ajustada com sucesso!");
  }
   else{
    Serial.println("RTC is NOT running!");
  }
}

void loop () {
    DateTime now = RTC.now();
    Serial.print("Data e hora atual: ");
    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    delay(1000);
}

bubulindo

importas-te de testar isto:

Code: [Select]

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

RTC_DS1307 RTC;

void setup () {
    Serial.begin(9600);
    pinMode(A3, OUTPUT);
    analogWrite(A3, 255);
    pinMode(A2, OUTPUT);
    analogWrite(A2, 0);
    Wire.begin();
    RTC.begin();

  if (RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
    delay(1000);
    Serial.println("Data e hora ajustada com sucesso!");
    if (RTC.isrunning()) {
        Serial.println("e a correr!!");
    } else }
        Serial.println("e nao esta a correr!");
}
  }
   else{
    Serial.println("RTC is NOT running!");
  }
}

void loop () {
    DateTime now = RTC.now();
    Serial.print("Data e hora atual: ");
    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    delay(1000);
}


Já agora quando te aparece que o relógio não está a correr, que é que aparece impresso no ecrã?

E quando diz que está a correr, o que é que aparece? Vês as horas a mexer?

Tens o relógio a funcionar com uma bateria para manter as horas a correr?

no manual diz isto:

"When cleared to 0, the oscillator is enabled. On first application of power to the device the time and date registers are typically reset to 01/01/00 01 00:00:00 (MM/DD/YY DOW HH:MM:SS). The CH bit in the seconds register will be set to a 1."
O que será o que acontece quando desligas o RTC. Se tiveres a usar uma pilha para manter a contagem do tempo, então não será isso. Mas o que eu acho estranho nesta "biblioteca" é a falta duma instrucão para iniciar e parar o RTC. Apenas ter uma a dizer que o RTC está a andar ou não é um pouco ridículo... mas adiante...

Experimenta e vê o que aparece...
This... is a hobby.

Sergio_S

boa tarde bubulindo, fiz alguns teste com o seu codigo, veja o resultado

RTC is NOT running!
Data e hora atual: 1/1/2000 0:0:0
Data e hora atual: 1/1/2000 0:0:0
Data e hora atual: 1/1/2000 0:0:0
Data e hora atual: 1/1/2000 0:0:0 
Data e hora atual: 1/1/2000 0:0:0
Data e hora atual: 1/1/2000 0:0:0

segue foto do arduino com o RTC

bubulindo

O módulo tem resistências de pull up para as linhas de SDA e SCL? Podes tentar activar os pull ups do chip com

Code: [Select]

pinMode(A4, OUTPUT);
digitalWrite(A4, 1);
// o mesmo para o A5.


Eu tenho ideia que alguém aqui teve problemas com os módulos por causa das baterias... será que a tua pilha de backup está gasta?

Os módulos que dizes ter experimentado, são todos iguais? Ou usas o chip numa breadboard, por exemplo?

Das primeiras vezes quando o módulo dizia que a data e hora foram ajustadas com sucesso, o tempo contava?

Será a morada do módulo que está errada? Eu na RTClib não vi como ajustar a morada do módulo. :\

Nada como experimentar outro código... tens aqui código pronto a usar com as bibliotecas base do Arduino:

http://www.glacialwanderer.com/hobbyrobotics/?p=12
http://www.bristolwatch.com/arduino/arduino_ds1307.htm
http://playground.arduino.cc/Code/Time

De resto estou mesmo sem ideias quanto ao que poderá ser. :\


This... is a hobby.

andrefe

Bom, é uma placa pronta, então difícil ser problema de montagem/conexões erradas.

Mas eu tive esse problema quando estava montando o DS1307 na breadboard, devido a:
1) Conexões erradas;
2) Bateria não conectada ao ground do chip;

Inicialmente também utilizei uma biblioteca que não me trazia dados condizentes. A cada 5 leituras, uma era correta, as outras eram datas iniciais. Ao trocar a biblioteca, passou a funcionar corretamente.

Você diz que na primeira vez que conecta ao Arduino ele funciona e depois não funciona mais, é isso?

A placa já veio montado com a bateria encaixada?

Posso estar sendo muito simplista, mas como disse, eu tive problemas assim. Você poderia fazer um teste bobo:
Retirar a bateria e recolocá-la (isso desconectado do Arduino).

Sergio_S

Boa noite, demorei um pouco para responder poque não estava conseguindo logar-me.
Acho que descobri o problema, mudei a condição para executar a rotina RTC.isrunning() e voltou a funcionar.

Como esta na rotina que voce me enviou:
Code: [Select]

if (RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));


Ficou assim:
Code: [Select]

if (!RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));


Obriga pela atenção

bubulindo

LOL

Desculpa não termos visto... mas olhando agora parece bastante óbvio qual era o problema. Um autêntico momento Homer Simpson. LOL
Se o relógio está a correr, fazer o adjust apenas muda a hora.
Se o relógio não está a correr, além de ajustar a hora a funcão inicia o contador de tempo. :\

O que é estranho é isto estar assim em todos os exemplos que vi :S
This... is a hobby.

Go Up