Olá amigos, estou com um projeto para utilizar o ds1307 para marcar as hora para ativar um rele em horas programadas, porém estou percebendo que meu RTC adianta de 2 a 3 segundos por dia, isso é muito impreciso. Gostaria da ajuda para corrigir o problema. 

Utilizo um cristal de 32.768, e esquema padrão. 

Obrigado, desde já...

Exibições: 4915

Responder esta

Respostas a este tópico

Caro Marcos Paulo,

o oscilador de cristal e o RTC é melhor você montar numa placa de circuito impresso e prover uma isolação adequada de terra em torno dos pinos sensíveis do RTC. Outro motivo para o desvio pode ser a classe do cristal. Um cristal comum tem um desvio de 100 ppm o que em geral se traduz na prática num desvio diário entre 1 e 2 s. Se isso não for satisfatório, você pode comprar cristais mais precisos. Tem de até 1 ppm de precisão, tem com compensação de temperatura, etc. Mas isso tem um preço que pode inviabilizar o seu projeto. É bom você pesquisar bastante.

Abraço,

Henrique

consulte sempre um engenheiro eletrônico

Ok Obrigado... já tenho montado um módulo RTC... e os sintomas eram os mesmos.. 

Quanto aos cristais, onde encontro nessas especificações, pois de maneira geral nas lojas não especificam isso.

Vou tentar essas alternativa dos cristais mais precisos.. 

Caro Marcos Paulo,

eu tentei levantar fornecedor local para você, mas a minha rede anda um lixo e não deu. Alguns componentes que o pessoal anda utilizando são:

DS32khz da Maxim

DS3231 da Maxim

M41T93 da ST Microelectronics

Provavelmente você encontra esses na Farnell ou Intertek ou Avnet. Esses componentes são CIs.

Você pode buscar os cristais do tipo caneca, com especificação para +/- 50 ppm, +/- 20 ppm, descendo até uns +/- 5 ppm. São difíceis de encontrar no varejo.

Boa sorte. Abraço,

Henrique

OK, vou tentar esses outros CIs, enquanto nao consigo, retirei um cristal de uma placa mãe para testar... 

Soldei ele no terra, vou monitorar e posto a resposta.. 

Obrigado..

Hi Marcos,

Podes me mandar o Codigo cm configuraste o RTC?

Pretendo ter idea do mm para 1 irrigador automatico, isto qdo o tempo xega o sensor analiza o solo

Segue o código.

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

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

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

RTC_DS1307 RTC;


int pino = 8;

float tempC;
int reading;
int tempPin = A0;


void setup () {
Serial.begin(9600);
analogReference(INTERNAL);
Wire.begin();
RTC.begin();

// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.clear();
//lcd.print("Hora Atual:");

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(__DATE__, __TIME__));
}

pinMode(pino, OUTPUT);
}

void tocasino() {
digitalWrite(pino, HIGH);
delay(7000);
digitalWrite(pino, LOW);
delay(1000);

}

void loop () {


DateTime now = RTC.now();

int dia = now.dayOfWeek();
int hora = now.hour();
int minuto = now.minute();
int segundo = now.second();
String dias = "";

// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
reading = analogRead(tempPin);
tempC = reading / 9.31;


lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(ArrumaZero(int(tempC)));
lcd.print("C");

lcd.setCursor(0, 1);
// print the number of seconds since reset:

switch(dia) {
case 0:
dias = "DOM";
break;
case 1:
dias = "SEG";
break;
case 2:
dias = "TER";
break;
case 3:
dias = "QUA";
break;
case 4:
dias = "QUI";
break;
case 5:
dias = "SEX";
break;
case 6:
dias = "SAB";
break;

}


//Serial.print(dias);
//Serial.print(" ");
//Serial.print(now.hour());
//Serial.print(":");
//Serial.print(now.minute());
//Serial.print(":");
//Serial.println(now.second());

lcd.print(dias);
lcd.print(" ");
lcd.print(ArrumaZero(now.hour()));
lcd.print(":");
lcd.print(ArrumaZero(now.minute()));
lcd.print(":");
lcd.print(ArrumaZero(now.second()));
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");

Serial.println(ArrumaZero(now.second()));

if (dia != 0 && dia != 4) {

//Início Configuração das Horas
//-------------------Matutino
if (hora == 7 && minuto == 0 && segundo == 0 || hora == 7 && minuto == 0 && segundo == 1) { tocasino(); }
if (hora == 7 && minuto == 50 && segundo == 0 || hora == 7 && minuto == 50 && segundo == 1) { tocasino(); }
if (hora == 8 && minuto == 40 && segundo == 0 || hora == 8 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 9 && minuto == 30 && segundo == 0 || hora == 9 && minuto == 30 && segundo == 1) { tocasino(); }
if (hora == 9 && minuto == 40 && segundo == 0 || hora == 9 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 9 && minuto == 45 && segundo == 0 || hora == 9 && minuto == 45 && segundo == 1) { tocasino(); }
if (hora == 10 && minuto == 35 && segundo == 0 || hora == 10 && minuto == 35 && segundo == 1) { tocasino(); }
if (hora == 11 && minuto == 25 && segundo == 0 || hora == 11 && minuto == 25 && segundo == 1) { tocasino(); }
//-------------------

//-------------------Vespertino
if (hora == 13 && minuto == 0 && segundo == 0 || hora == 13 && minuto == 0 && segundo == 1) { tocasino(); }
if (hora == 13 && minuto == 50 && segundo == 0 || hora == 13 && minuto == 50 && segundo == 1) { tocasino(); }
if (hora == 14 && minuto == 40 && segundo == 0 || hora == 14 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 15 && minuto == 30 && segundo == 0 || hora == 15 && minuto == 30 && segundo == 1) { tocasino(); }
if (hora == 15 && minuto == 40 && segundo == 0 || hora == 15 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 15 && minuto == 45 && segundo == 0 || hora == 15 && minuto == 45 && segundo == 1){ tocasino(); }
if (hora == 16 && minuto == 35 && segundo == 0 || hora == 16 && minuto == 35 && segundo == 1){ tocasino(); }
if (hora == 17 && minuto == 15 && segundo == 0 || hora == 17 && minuto == 15 && segundo == 1) { tocasino(); }
if (hora == 17 && minuto == 25 && segundo == 0 || hora == 17 && minuto == 25 && segundo == 1){ tocasino(); }
//-------------------

//-------------------Noturno
if (hora == 19 && minuto == 0 && segundo == 0 || hora == 19 && minuto == 0 && segundo == 1) { tocasino(); }
if (hora == 19 && minuto == 50 && segundo == 0 || hora == 19 && minuto == 50 && segundo == 1) { tocasino(); }
if (hora == 20 && minuto == 40 && segundo == 0 || hora == 20 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 21 && minuto == 30 && segundo == 0 || hora == 21 && minuto == 30 && segundo == 1) { tocasino(); }
if (hora == 21 && minuto == 40 && segundo == 0 || hora == 21 && minuto == 40 && segundo == 1) { tocasino(); }
if (hora == 22 && minuto == 25 && segundo == 0 || hora == 22 && minuto == 25 && segundo == 1) { tocasino(); }
if (hora == 23 && minuto == 10 && segundo == 0 || hora == 23 && minuto == 10 && segundo == 1) { tocasino(); }
//-------------------

//-------------------Extras
if (hora == 13 && minuto == 16 && segundo == 0 || hora == 23 && minuto == 10 && segundo == 1) { tocasino(); }
//-------------------

//Fim Configuração das Horas

}
delay(100);


}


String ArrumaZero(int i)
{
String ret;
if (i < 10) ret += "0";
ret += i;
return ret;
}

Ola Hernani, de uma olhada no link abaixo talvez de para implementar no seu projeto.

 

http://labdegaragem.com/main/search/search?q=acertando+rtc+via+hard...

Grato Marcos

Que software vc usou fara pazer o diagrama com o arduino?

O Multisim nao me oferece essa possibilidase

Rodrigo?

Ola Hernani, eu nunca usei o Multisim e não sei se ele oferece esta possibilidade, mas uso o Fritzing para fazer desenhos, detalhe ele não simula so possibilita desenhar. Caso precise simular eu recomento o proteus.

Segue link para download.

http://fritzing.org/download/

Rodrigues deixei-te 1 mensagem n Facbook, o ficheiro do 4shared qual eh a extencao?

Hernani não recebi nada ainda. mande email para rodrigo.rja@hotmail.com .  A extenção do arquivo é .rar

Conseguiu resolver?? Estou com o mesmo problema.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço