blog-eletrogate-logo-desktop blog-eletrogate-logo-mobile
  • Categorias
    • Voltar
    • INICIANTES
    • INTERMEDIÁRIOS
    • AVANÇADOS
    • divide
    • Automação Residencial
    • Componentes Eletrônicos
    • Impressão 3D
    • IoT
    • Modelagem 3D
    • Módulos Wifi
    • Por trás da tecnologia
    • Projetos
    • Raspberry Pi
    • Robótica
    • Sensores
    • Shields
    • Sistemas Operacionais
    • Tipos de Arduino
    • Tutoriais
  • Apostilas
  • Quem Somos
  • Seja um redator
  • Trabalhe Conosco
    • Categorias
      • Voltar
      • INICIANTES
      • INTERMEDIÁRIOS
      • AVANÇADOS
      • divide
      • Automação Residencial
      • Componentes Eletrônicos
      • Impressão 3D
      • IoT
      • Modelagem 3D
      • Módulos Wifi
      • Por trás da tecnologia
      • Projetos
      • Raspberry Pi
      • Robótica
      • Sensores
      • Shields
      • Sistemas Operacionais
      • Tipos de Arduino
      • Tutoriais
    • Apostilas
    • Quem Somos
    • Seja um redator
    • Trabalhe Conosco
Loja Eletrogate
voltar
  • Introdução
  • Aspectos de Hardware
  • Aspectos Software
  • Conclusão
  • Sobre o Autor
Componentes Eletronicos

RTC – Real Time Clock DS1302, 1307 e 3231

Eletrogate 27 de dezembro de 2017Atualizado em: 15 abr 202210 min

Introdução

No artigo de hoje vamos falar sobre os relógios de tempo real, ou como são conhecidos, os RTCs – Real Time Clocks. Vamos explicar os três principais modelos utilizados em aplicações com Arduino: RTC DS1302, RTC DS1307 e RTC3231. Um projeto será implementado, no qual iremos usar o RTC DS1307 para enviar informações de data e hora para um LCD, ou seja, vamos fazer um relógio digital.

Os RTCs são pequenos dispositivos eletrônicos usados para incorporar dados de data e hora a dispositivos eletrônicos. Os RTCs utilizam crisais de quartzo e circuitos auxiliados integrados em um chip para medir o tempo. Praticamente todos os dispositivos que necessitam de controle preciso do tempo possuem algum tipo de RTC.

Três modelos bastante usados com Arduino são:

  • RTC DS3231.
  • RTC DS1302.
  • RTC DS1307.

Todos possuem preços que não ultrapassam os 20 reais e podem ser facilmente incorporados em projetos eletrônicos. Todos os três modelos são fabricados pela Maxim Integrated. Vamos ver um pouco de cada um e suas principais diferenças.

RTC DS3231

O DS3231 é um RTC de alta precisão e baixo consumo de energia. O módulo possui um sensor de temperatura de fábrica e também um oscilador para melhorar ainda mais a sua exatidão.

Funciona tanto no formato 12 horas como 24 horas, e as informações de meses com menos de 30/31 dias e anos bissextos são corrigidos automaticamente pelo módulo.

Uma bateria acompanha o módulo para evitar a perda de dados em caso de desenergização do circuito. Um aspecto importante e que diferencia dos outros modelos é o protocolo de comunicação utilizado. No caso do DS3231 o protocolo I2C é usado. Assim, são dois canais(pinos) de comunicação: SCL(Clock) e SDA(dados).

Módulo RTC DS3231.

As especificações são:

  • Tensão de operação: 3.3-5V.
  •  Computa segundos, minutos, horas, dias da semana, dias do mês, meses e anos (de 2000 a 2099)
  • Sensor de temperatura com ± 3 °C de exatidão.
  • Chip de memória: AT24C32 de 32K bytes que podem ser usadas como RAM estendida do microcontrolador.
  • Circuito de detecção de falha de energia.
  • Consumo menor que 500nA no modo bateria com oscilador em funcionamento.
  • Dimensões: 38 x 22 x 14mm.
  • Peso: 8g.

É recomendado a leitura do datasheet.

RTC 1302

O RTC 1302 é o mais simples dos três. Se comunica via protocolo serial, com um pino chamado CE e outro SCL. É capaz de fornecer informações de segundo, minutos, dia, data, mês e ano. Meses com menos de 31 dias e anos bissextos são tratados automaticamente pelo módulo. Opera nos formato 12 e 24 horas.

Módulo RTC DS1302.

As principais especificações são:

  • Chip: DS1302.
  • 31-Bytes de memória RAM para armazenamento de dados.
  • Tensão: 2,0V ~ 5,5V.
  • Corrente: menos de 300nA em 2V e até 1,2mA em 5V.
  • Sinal de saída programável em onda quadrada.
  • Consome menos de 300nA no modo oscilador.

O datasheet, direto do site do fabricante, pode ser acessado aqui.

RTC 1307

Este Real Time Clock (RTC) é um relógio de tempo real com calendário completo e mais de 56 bytes de SRAM de memória não-volátil. Tal como os outros RTCs, fornece informações de segundo, minutos, dia, data, mês e ano. Em sua placa há um circuito que detecta falhas de energia e aciona a bateria  embutida com objetivo de evitar perda de dados.

Utiliza protocolo I2C e trata automaticamente os casos de meses com menos de 31 dias e anos bissextos.

Módulo RTC DS1307.

Especificações:

  • Chip: DS1307.
  • Computa segundos, minutos, horas, dias da semana, dias do mês, meses e anos (de 2000 a 2099).
  • 56 bytes de SRAM.
  • Tensão: 4,5~5,5V.
  • Circuito de detecção de falha de energia.
  • Consome menos de 500nA no modo bateria com oscilador em funcionamento.
  • Faixa de temperatura: -40°C a +85°C.
  • Dimenões: 2.9×2.6cm.

O datasheet do DS1307 pode ser acessado aqui.

Diferenças entre os módulos

As principais diferenças entre os módulos dizem respeito ao protocolo utilizado, tamanho e tipo da memória interna, dimensões e consumo de energia. Os módulos DS1307 e DS3231 utilizam protocolo I2C, enquanto o DS1302 utiliza um protocolo serial. O procolo I2C utiliza 2 pinos: o SDA(dados) e o SCL(clock de sincronismo). Já o DS1302 utiliza três pinos: SCLk(Clock de sincronismo), CE(Chip Enable – para habilitar a transmissão de dados) e I/O(dados).

A grande diferença é que o I2C sinaliza o início e fim da transmissão de dados por meio de mudanças no estado lógico nos pinos SCL e SDA.  Basicamente, se SCL estiver em nível alto e houver uma transição de alto para baixo no SDA, o DS1307/3231 reconhece como INICIO de comunicação. Agora, se SCL estiver em  nível alto e houver uma transição de baixo para alto no SDA, o DS1307/3231 reconhece como FIM de comunicação.

No DS1302, o papel feito por essas combinações lógicas é desempenhado pelo pino CE. Se ele estiver em nível alto, a comunicação tem início, se for para nível baixo, a transferência de dados termina. Ou seja, sempre que um procedimento de leitura ou escrita for executado com o DS1302, o pino CE deve ser colocado em nível alto.

Aqui cabe uma informação importante. No próprio datasheet do DS1302, a Maxim informa que nos datasheets antigos, o pino CE era erroneamente chamado de Reset(RST). Mas a funcionalidade era a mesma, ou seja, era um erro técnico na redação do datasheet.

As tensões de alimentação também são diferenças importantes,com o DS1302 operando com um mínimo de 2V, enquanto o DS1307 opera com no mínimo 4,5V.


Aspectos de Hardware

Para ilustrar como usar o RTC nos seus projetos, vamos fazer a seguinte montagem:

Repare que o RTC DS1307 foi ligado diretamente ao arduino. Isso possível pois ambos trabalham com os mesmos níveis de tensão. Além do RTC, conectamos também um LCD para mostrarmos os dados de data e hora. Caso você tenha alguma dúvida em relação ao LCD, leia este post e saiba mais detalhes.

RTC pino SDA = pino A4 Arduino

RTC pino SCL = pino A5 Arduino

Do ponto de vista de hardware, a montagem é simples. Caso os outros RTCs fossem usados, a montagem seria basicamente a mesma.


Aspectos Software

Do ponto de vista de software, vamos utilizar a biblioteca RTClib.h, que pode ser encontrada no GitHub.

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

#define InterfaceLCD 1
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
LiquidCrystal lcd(9, 8, 4, 5, 6, 7);//RS E D4 D5 D6 D7

void setup ()
{
  Serial.begin(57600);
  if (! rtc.begin())
  {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (! rtc.isrunning())
  {
    Serial.println("RTC is NOT running!");
    // ajusta para data e hora de compilacao
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // Ajusta para uma data definida por voce
    //rtc.adjust(DateTime(2017, 12, 27, 11, 14, 0));
  }
  lcd.begin(16, 2);
  delay(2000);
}

void loop ()
{
  if (InterfaceLCD == 1)
    showLCD();
  else
    showSerial();
  Serial.println();
  delay(3000);
}
void showLCD()
{
  DateTime now = rtc.now();
  // ano = now.year();
  lcd.clear();
  //mostra a data
  lcd.print(now.year());
  lcd.write('/');
  lcd.print(now.month());
  lcd.write('/');
  lcd.print(now.day());
  //Mostra as horas
  lcd.setCursor(1, 2);
  lcd.print(now.hour());
  lcd.write('/');
  lcd.print(now.minute());
  lcd.write('/');
  lcd.print(now.second());
}
void showSerial()
{
  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(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
}

Veja que no software usamos duas funções para mostrar os dados de data e hora. A função showLCD mostra os dados no LCD, e a função showSerial mostra na interface serial. Para selecionar qual usar basta alterar a flag InterfaceLCD.

Os pontos importantes a serem entendidos no programa são:

  • A funçõa rtc.adjust(DateTime(F(__DATE__), F(__TIME__))) ajusta o tempo do RTC para a data e hora na qual o programa foi compilado.
  • A função rtc.adjust(DateTime(2017, 12, 27, 11, 14, 0)) ajusta o tempo do RTC para a data e hora definida pelo usuário. Nesse caso, 27 de dezembro de 2017, 11 horas e 14 minutos.
  • Após a função rtc.adjust for chamada, o RTC irá começar a partir daquela data e você não mais precisa ajustá-lo(a não ser que você queira). O RTC continuará a contagem até o dia em que a bateria do módulo se esgotar, geralmente depois de alguns anos.
  • Para ler os dados de data e hora, é criado o objeto now da classe Datetime(DateTime now = rtc.now()). Com esse objeto é feita a leitura das diversas informações de tempo, como mostrado nas funções showLCD e showSerial.

Carregue o software na sua montagem e faça o teste. Usando a interface serial, você terá algo como na imagem abaixo na sua saída:

A primeira vez que o software rodar, a mensagem RTC is not running! será exibida. Depois disso, a função rtc.adjust() será chamada e o RTC começará a contar o tempo normalmente.

Com tudo ajustado, você deve receber mensagens como as mostradas na tela acima. Detalhe: Para alterar a forma de exibição, como mudar de “Wednesday” para “Quarta-feira” ou mostrar a hora primeiro, basta ajustar a ordem das funções Serial.println e lcd.print dentro das funções showSerial e ShowLCD. Esse ajuste fica de dever de casa para que você possa treinar.

Para usar o LCD, basta fazer a montagem conforme mostramos na sessão “Aspectos de Hardware”. Se tiver alguma dúvida sobre o LCD ou quiser saber mais informações sobre ele, leia este post específico sobre esse componente. Lembre-se de ajustar o contraste pelo potenciômetro até que as letras possam ser vistas de forma clara.

No mais, agora você já pode incorporar as informações de data e hora nos seus projetos.

Quer saber mais sobre Arduino ?

Placa Arduino | Arduino | Case Arduino | Kit Arduino | Sensores Arduino


Conclusão

Se tiver alguma dúvida, deixe nos comentários para que possamos esclarecer. A mesma biblioteca usada nesse projeto também possui suporte para o RTC DS3231. Para o RTC DS1302, boas opções de bibliotecas e exemplos podem ser encontrados nas seguintes referências:

  • DS1302 lib;
  • DS1302 lib 2;
  • Entendendo os RTCs;
  • Arduino Real Time Clock;
  • Arduino Internal Real Time Clock;

Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

27 de dezembro de 2017 Atualizado em: 15 abr 2022

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Modelagem 3D

Conheça o Tinkercad

Eletrogate12 de maio de 2022

Se você já pensou em criar um projeto eletrônico, mas não tinha os componentes necessários e queria fazer um teste antes, este post foi feito pra você! Neste post, iremos conhecer a plataforma Tinkercad. Através dela, você poderá testar projetos, circuitos eletrônicos, códigos, criar designs 3D e muito mais.

Modelagem 3D

Conheça o Tinkercad

Eletrogate12 de maio de 2022

Se você já pensou em criar um projeto eletrônico, mas não tinha os componentes necessários e queria fazer um teste antes, este post foi feito pra você! Neste post, iremos conhecer a plataforma Tinkercad. Através dela, você poderá testar projetos, circuitos eletrônicos, códigos, criar designs 3D e muito mais.

Tutoriais

Simulando ESP32, Arduino e Raspberry pi com o Wokwi

Eletrogate10 de maio de 2022

O Wokwi.com está aqui para ajudá-lo! Ele é uma ferramenta gratuita de simulação direto no navegador, em que você pode escrever seus próprios códigos e usar os microcontroladores com outros componentes, como LEDs, botões, displays (de 7 segmentos a OLED’s), potenciômetros e muitos outros.

Tutoriais

Simulando ESP32, Arduino e Raspberry pi com o Wokwi

Eletrogate10 de maio de 2022

O Wokwi.com está aqui para ajudá-lo! Ele é uma ferramenta gratuita de simulação direto no navegador, em que você pode escrever seus próprios códigos e usar os microcontroladores com outros componentes, como LEDs, botões, displays (de 7 segmentos a OLED’s), potenciômetros e muitos outros.

Sensores

Como Programar o Sensor de Inclinação SW-520D

Eletrogate4 de maio de 2022

Aprenda como usar o sensor de inclinação de um jeito fácil e prático.

Sensores

Como Programar o Sensor de Inclinação SW-520D

Eletrogate4 de maio de 2022

Aprenda como usar o sensor de inclinação de um jeito fácil e prático.

Automação Residencial

Luz de Emergência com relé e transistor

Eletrogate26 de abril de 2022

Hoje, você vai aprender a fazer uma luz de emergência. Se você mora em um prédio ou mesmo trabalha em um, deve saber que, quando acaba a energia, você tem que usar as escadas e, lá, sempre tem uma lâmpada especial que acende quando falta energia, a luz de emergência.

Automação Residencial

Luz de Emergência com relé e transistor

Eletrogate26 de abril de 2022

Hoje, você vai aprender a fazer uma luz de emergência. Se você mora em um prédio ou mesmo trabalha em um, deve saber que, quando acaba a energia, você tem que usar as escadas e, lá, sempre tem uma lâmpada especial que acende quando falta energia, a luz de emergência.

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!

blog-eletrogate-logo-footer

Rua Rio de Janeiro, 441 - Sala 1301
Centro - Belo Horizonte/MG
CEP 30160-041
*Não temos atendimento físico

ANWAR SLEIMAN HACHOUCHE - ME
CNPJ: 18.917.521/0001-73

Atendimento

(31) 3142-3800

contato@eletrogate.com


Seg a Sex - das 8h às 17h

Institucional

  • Apostilas
  • Quem Somos
  • Privacidade
  • Seja um Redator
  • Trabalhe Conosco

Nos acompanhe

Facebook Instagram Youtube

© ELETROGATE 2022 - Todos os direitos reservados. Termos de uso e Política de privacidade.