Vous êtes sur la page 1sur 3

Pesquise neste blog :

20 abril 2013
Pesquisar
Real Time Clock (RTC) DS1307 Custom Search

Hoje vou montar um esquema bem simples de relógio usando o DS1307, um circuito integrado RTC (Real
Time Clock), que nada mais é do que um chip que "conta o tempo". Suas principais características são :
Conta Ano, mês, semana, dias da semana, dias, horas, minutos, segundo
Identifica anos bissextos
Utiliza interface I2C, usando apenas 2 pinos para se comunicar com o Arduino, ao contrário do seu
antecessor DS1302, que usa 3 pinos.
Assine nossa newsletter:

Seu email...

Quero assinar!

Pinagem DS1307

Monte o circuito abaixo na protoboard. O cristal é de 32,768 KHz, eu tirei o meu de uma motherboard antiga.
Tenho mais um que tirei de um relógio quebrado, que você com certeza também tem jogado em algum canto aí
na sua casa. Vários aparelhos eletronicos tem um cristal desses dentro. ;-)

Marcadores

arduino bluetooth componentes display


esp8266 gsm HC-SR04 IR LCD livros modulos
motores raspberry pi sensores shield
temperatura videos wireless

Arquivo do blog

► 2018 (22)
► 2017 (24)
► 2016 (28)
► 2015 (35)
► 2014 (55)
▼ 2013 (66)
► Dezembro 2013 (4)
► Novembro 2013 (5)
► Outubro 2013 (6)
Um detalhe é a bateria, que é obrigatória nesse circuito. Sem ela, o CI gera alguns resultados bem estranhos.
► Setembro 2013 (6)
A bateria serve também para que, caso o Arduino seja desligado, as informações de data e hora sejam
preservadas. O consumo do CI é baixíssimo (500 nano ampéres), o que significa que uma bateria de 3V ligada ► Agosto 2013 (4)
permanentemente ao circuito dura muito tempo. ► Julho 2013 (5)
► Junho 2013 (5)
No meu caso, usei uma CR2032, dessas que a gente usa na motherboard do computador.
► Maio 2013 (10)
▼ Abril 2013 (4)
LCD 16x2 + RTC + Numeros Grandes
Real Time Clock (RTC) DS1307
Sensor de temperatura DS18B20 com
Arduino
Sensor de temperatura DS18B20

► Março 2013 (6)


► Fevereiro 2013 (8)
► Janeiro 2013 (3)

Postagens populares

Como utilizar o módulo I2C


com display LCD

Controle remoto IR no
Arduino

Acionando portas do
Arduino usando Android e
bluetooth

Controlando um servo motor


Finalmente, vamos ao programa. Carregue o programa abaixo no seu Arduino : com Arduino

1 // Programa : Data e Hora com DS1307


2 // Autor : Arduino e Cia
3
4 #include "Wire.h" Ligando uma lâmpada com
5 módulo relé
6 #define DS1307_ADDRESS 0x68
7
8 byte zero = 0x00;
9
10 void setup()
11 {
Fale com o administrador do site
12 Wire.begin();
13 Serial.begin(9600); Politica de Privacidade
14 //A linha abaixo pode ser retirada apos setar a data e hora
15 SelecionaDataeHora();
16 }
17
18 void loop() O conteúdo do blog Arduino e Cia, está
19 { licenciado com uma Licença Creative
20 Mostrarelogio(); Commons - Atribuição-CompartilhaIgual 4.0
21 delay(1000); Internacional.
22 }
23
24 void SelecionaDataeHora() //Seta a data e a hora do DS1307
25 {
26 byte segundos = 40; //Valores de 0 a 59
27 byte minutos = 59; //Valores de 0 a 59
28 byte horas = 23; //Valores de 0 a 23
29 byte diadasemana = 1; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
30 byte diadomes = 17; //Valores de 1 a 31
31 byte mes = 4; //Valores de 1 a 12
32 byte ano = 13; //Valores de 0 a 99
33 Wire.beginTransmission(DS1307_ADDRESS);
34 Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
35
36 //As linhas abaixo escrevem no CI os valores de
37 //data e hora que foram colocados nas variaveis acima
38 Wire.write(ConverteParaBCD(segundos));
39 Wire.write(ConverteParaBCD(minutos));
40 Wire.write(ConverteParaBCD(horas));
41 Wire.write(ConverteParaBCD(diadasemana));
42 Wire.write(ConverteParaBCD(diadomes));
43 Wire.write(ConverteParaBCD(mes));
44 Wire.write(ConverteParaBCD(ano));
45 Wire.write(zero); //Start no CI
46 Wire.endTransmission();
47 }
48
49 byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
50 return ( (val/10*16) + (val%10) );
51 }
52
53 byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
54 return ( (val/16*10) + (val%16) );
55 }
56
57 void Mostrarelogio()
58 {
59 Wire.beginTransmission(DS1307_ADDRESS);
60 Wire.write(zero);
61 Wire.endTransmission();
62 Wire.requestFrom(DS1307_ADDRESS, 7);
63 int segundos = ConverteparaDecimal(Wire.read());
64 int minutos = ConverteparaDecimal(Wire.read());
65 int horas = ConverteparaDecimal(Wire.read() & 0b111111);
66 int diadasemana = ConverteparaDecimal(Wire.read());
67 int diadomes = ConverteparaDecimal(Wire.read());
68 int mes = ConverteparaDecimal(Wire.read());
69 int ano = ConverteparaDecimal(Wire.read());
70 //Mostra a data no Serial Monitor
71 Serial.print("Data: ");
72 Serial.print(diadomes);
73 Serial.print("/");
74 Serial.print(mes);
75 Serial.print("/");
76 Serial.print(ano);
77 Serial.print(" ");
78 Serial.print("Hora : ");
79 Serial.print(horas);
80 Serial.print(":");
81 Serial.print(minutos);
82 Serial.print(":");
83 Serial.print(segundos);
84 switch(diadasemana)
85 {
86 case 0:Serial.println(", Domingo");
87 break;
88 case 1:Serial.println(", Segunda");
89 break;
90 case 2:Serial.println(", Terca");
91 break;
92 case 3:Serial.println(", Quarta");
93 break;
94 case 4:Serial.println(", Quinta");
95 break;
96 case 5:Serial.println(", Sexta");
97 break;
98 case 6:Serial.println(", Sabado");
99 }
100 }

O que ele faz nada mais é do que setar a data e a hora, como indicado no programa, e depois mostrar esses
valores no serial monitor, como na figura abaixo :

A linha 15 do programa, com a indicação SelecionaDataeHora(), é utilizada para setar os dados iniciais do
relógio e pode ser comentada posteriormente, já que o DS1307 estará sendo alimentado pela bateria.

Por último, não podia esquecer do Datasheet do DS1307, que você encontra aqui.

Postado por Arduino e Cia às 10:50

Marcadores: componentes, DS1307, rtc

86 comentários:
motomagx 4 de agosto de 2013 12:36
Olá, uma pergunta: É possível conectar este DS1307 nos pinos digitais do arduino?

Responder

Respostas

Arduino e Cia 5 de agosto de 2013 14:09


Não é possível, pois não só o DS1307 como outros dispositivos que utilizamos no Arduino usam o
protocolo I2C, que usa o pino A4 do Arduino Uno para o sinal SDA (Dados), e o pino A5 para o SCL
(Clock). Abraço.

Responder

J.Gustavo A. Murta 25 de setembro de 2013 17:44


Corrigindo - o cristal é de 32,768 KHz !
Responder

Respostas

Arduino e Cia 25 de setembro de 2013 17:53

Vous aimerez peut-être aussi