Arduino. Interagindo com o RTC DS1307


Incorporando um RTC DS1307 ao registrador de dados

Qual a função de um RTC em um registrador de dados?

Um RTC tem duas funções principais. Em primeiro lugar ele mantêm o registro de hora e data atual de forma independente do microcontrolador, possuindo geralmente alimentação independente e de longa duração (4 anos), e gera um pulso periódico que é utilizado pelo sistema para determinar o intervalo de aquisição de forma precisa.

Existem muitos circuitos integrados que implementam RTC’s com variadas funções. Um circuito que é encontrado com muita facilidade e baixo custo no mercado é o DS1307. Utilizamos neste experimento a placa “Tiny RTC”, que pode ser visualizada na figura a seguir:

Placa Tiny RTC

Considerações sobre a Tiny RTC

Em primeiro lugar, não recomendamos esta placa! . Se você procurar pela internet verá que muitos colegas também não a recomendam. Tínhamos duas em estoque e uma nos fez perder algumas horas até descobrirmos que o problema não era de software, mas sim defeito da placa mesmo. Não conseguimos encontrar um manual descrevendo-a , de forma que vamos apresentar aqui o que pudemos identificar através da análise visual da Tiny RTC. Encontramos apenas um esquema, o que já ajuda. Seria muito bom que os fabricantes chineses fossem mais atenciosos neste pormenor. Mesmo que não enviassem o manual escrito por questões de custo, um endereço na internet registrado na placa e que apontasse para um repositório de informações seria muito bem vindo. Fica ai uma sugestão aos fabricantes.

A placa Tiny RTC possui além do RTC DS1309, uma memória EEPROM 24C32, de 4 kbytes de espaço e um espaço para ser inserido um sensor de temperatura DS18B20. Este último não vem montado na placa. Nas laterais da placa encontramos dois conjuntos de furos (um conjunto de sete furos e um conjunto de cinco furos) onde podemos soldar conectores do tipo barra de terminais, para a interligação elétrica com o restante do circuito.

Esquema da placa Tiny RTC

Terminais de conexão da TinyRTC

O conjunto de sete terminais possui a seguinte configuração:

  • SQ: Neste pino temos a saída de uma onda quadrada de frequencia configuravel atravé de programação
  • DS: Pino para comunicação com o sensor de temperatura (1Wire). O sensor não vem instalado.
  • SCL: sinal serial clock do barramento I2C – Interligado ao pino A5 do arduino
  • SDA: sinal serial data do baraamento I2C – Interligado ao pino A4 do arduino
  • Vcc: alimentação 5V
  • GND: terra
  • Bat: indicador de tensão de bateria-

O conjunto de cinco terminais possui a seguinte configuração:

  • DS: Pino para comunicação com o sensor de temperatura (1Wire). O sensor não vem instalado.
  • SCL: sinal serial clock do barramento I2C – Interligado ao pino A5 do arduino
  • SDA: sinal serial data do baraamento I2C – Interligado ao pino A4 do arduino
  • Vcc: alimentação 5V
  • GND: terra

Modificações na placa para uso de baterias não recarregáveis

Na parte inferior da placa você pode instalar uma bateria de Lithium . O circuito está projetado para utilizar baterias recarregáveis, do tipo LIR2032. Se você tentar utilizar uma bateria não recarregável, do tipo CR2032, ela pode EXPLODIR.

Esta é uma modificação importante na placa. Retire o diodo D1, o resistor R4 e o resistor R6. Solde um fio entre os terminais onde estava o resistor R6. Assim você poderá usar uma bateria não recarregável, mais comum no nosso comercio.

Na placa que veio com defeito não foi possível identificar o problema. Provavelmente soldas ruins ou o chip danificado. Testamos com diferentes bibliotecas de acesso ao DS1307 e nenhuma delas funcionou. Na outra placa, teoricamente idêntica, tudo funcionou desde o principio (retiramos os componentes descritos acima antes de testar a placa).

Cada dispositivo integrado a um barramento I2C precisa de ter um endereço ou conjunto de endereços alocado apenas a ele. Geralmente os dispositivos permitem este endereço ser configurado por hardware. No caso da Tiny RTC não temos muito o que modificar:

  • O endereço do RTC é dado pelo próprio dispositivo, não há configuração de endereço externa. Este endereço é o 68H
  • O endereço da memória é fixado por hardware em 50H

O fato dos endereços da memória serem fixados no hardware torna o uso de mais de uma memória no mesmo barramento difícil, exigindo uma modificação na placa. Seria preferível o uso de jumpers para esta finalidade.


Sobre o software de interface

O relógio de tempo real DS1307 é um dos módulos mais utilizados para gerenciamento de hora e data com o arduino, devido a seu baixo custo e disponibilidade. Há muitas bibliotecas disponíveis na internet, algumas bem sofisticadas. Como o nosso principal interesse é utilizar este módulo em projetos mais complexos, que irão demandar memória e recursos computacionais, decidimos pela criação de uma biblioteca super simplificada, com uma API básica. Esta biblioteca está disponível na nossa página de downloads, no arquivo pack170911.tar.gz, com o nome cl1307.zip. Para saber como instalar uma biblioteca no arduino, veja nesta página.

Esta biblioteca programa o RTC para operação no formato 24 horas e geração de um pulso quadrado de 1 Hz na saída SQ. Os valores fornecidos de tempo e data são todos numéricos e adequados para integração com outros programas. Se você procura por sistemas mais voltados ao usuário final procure por bibliotecas mais sofisticadas, ou acompanhe o desenvolvimento de uma interface em python que realizaremos dentro de alguns dias.

Sobre o hardware de interface

Este RTC interage com o arduino através da interface I2C. Fisicamente, as ligações necessárias são as seguintes:

Conexões Tiny RTC <-> Arduino

 

Instalando a biblioteca cl1307.zip

Descomprima o arquivo pack170911.tar.gz em um diretório a sua escolha

Inicie a IDE do arduino. Selecione o menu Sketch/Incluir biblioteca/Adicionar biblioteca .zip

No diálogo que se segue, selecione o arquivo cl1307.zip .

Após a instalação, selecione o menu Sketch/Incluir biblioteca. A cl307 deverá estar na área de “Contributed bibliotecas”.

Teste preliminar do RTC

  • Conecte um arduino com a placa contendo o DS1307 a saida USB do computador.
  • Copie o arquivo rtc.ino para um diretorio denominado rtc. Abra o arquivo através da IDE do arduino.
  • Compile e envie para a placa.
  • Abra o monitor serial e selecione a opção 9600 bauds.
  • Observe o led ligado a D13 na placa do arduino. Ele deverá estar piscando à frequência de 1 Hz.
  • Observe a tela do monitor serial. Deverá estar apresentando a contagem e data e hora a partir da data em que foi testado o firmware pela primeira vez.

 

A API da biblioteca

Construtor:

DS1307();

Ajuste de data e hora. Ano somente com dois dígitos:

bool setTime(uint8_t sec, uint8_t min, uint8_t hour,
 uint8_t day_of_week, uint8_t date, uint8_t month, uint8_t year);

Leitura de data e hora. Retorna um ponteiro para um vetor com ano,mes,dia,dia-da_semana,hora,minuto,segundo

uint8_t* showTime(void);

A biblioteca e o programa teste a que nos referimos podem ser baixados na página https://cadernodelaboratorio.com.br/scripts-softwares-e-arquivos-de-configuracao/, sob o nome pack170911.tar.gz.

Até nosso próximo encontro!



                                      

Deixe um comentário