terça-feira, abril 14, 2020

Relógio de Tempo Real: DS1307

O segundo RTC que vamos examinar é o DS1307. O que tenho é um módulo chamado tiny RTC, que além do DS1307 tem uma memória EEProm e espaço para colocar um DS18B20 (que já vimos por aqui).


Existe um excelente série de posts no site Embarcados sobre o módulo tiny RTC, aqui vou me concentrar no DS1307, cujo datasheet você pode baixar daqui.

Ao contrário do DS1302 que vimos no post anterior, este RTC usa I2C para a comunicação. O endereço é 0x68 e a velocidade máxima é 100KHz. A base de tempo é um cristal de 32768Hz.

A alimentação principal precisa estar entre 4,5 e 5,5V. O CI tem um pino separado para conexão de uma bateria com tensão entre 2,0 e 3,5V. Não existe suporte interno à carga da bateria, o módulo tiny RTC implementa isto com um resistor e um diodo:


A bateria usada no tinyRTC é uma LIR2032 (não confundir com a popular CR2032, não recarregável). Como a tensão de saída desta bateria pode variar de 3,0 a 4,2V, que passa da tensão máxima aceita pelo DS1307, o circuito incorpora um divisor resistivo composto por R4 e R6 (a parte 2 do artigo na Embarcados mostra o cálculo do circuito da bateria).

Como de costume, os acessos ao RTC são iniciados pela escrita de um endereço, seguida da leitura ou escrita do dado propriamente dito.  Posições consecutivas podem ser acessadas sem enviar o endereço para cada uma até que seja enviada a condição de stop.

Comunicação I2C com o DS1307 (fonte: datasheet)

O DS1307 possui 8 registradores e 56 bytes de Ram.


Os registradores de data e hora são iguais aos do DS1302, apenas o registrador de controle é diferente. Os bits nele são:

  • OUT e SQWE: um dos pinos do DS1307 pode ser usado como uma saída de uma onda quadrada (SQWE = 1) ou como um pino controlado por software (SQWE = 0). Quando o pino é controlado por software, o bit OUT determina o nível do pino.
  • RS1 RS2: Se SQWE = 1, estes bits determinam a frequência da onda quadrada gerada.

Na IDE do Arduino encontramos várias bibliotecas para o DS1307. Uma curiosidade (que não aprece na imagem abaixo) é uma biblioteca que permite usar o Arduino como um emulador de DS1307 (não consigo ver muitos usos para isto).



No Raspberry Pi, o Raspbian possui suporte ao DS1307, o site da Adafruit tem instruções de como configurá-lo para isto.

Nenhum comentário: