Interface do RTC (DS1307) com o microcontrolador e sua programação

Experimente Nosso Instrumento Para Eliminar Problemas





RTC é um dispositivo eletrônico que desempenha um papel essencial na design de sistema embarcado em tempo real . Ele fornece uma hora e data precisas em vários aplicativos como relógio do sistema, sistema de atendimento do aluno e alarme etc, que mantém o controle da hora atual e fornece resultado consistente para a respectiva tarefa. Este artigo apresenta a interface do RTC com o microcotroller 8051 e o acesso básico de registradores internos.

Interface RTC com microcontrolador 8051

Interface RTC com microcontrolador 8051



Programação e interface RTC

A interface do RTC com o microcontrolador 8051 é semelhante a todos os outros tipos de “Relógios em tempo real” conectados a ele. Então, vamos dar uma olhada na interface RTC simples com Microcontrolador 8051 e procedimento de programação que o envolve.


Passo 1: Selecione o dispositivo RTC

Os vários tipos de chips RTC estão disponíveis no mundo incorporado em tempo real, que são classificados com base em vários critérios, como tipo de pacote, tensão de alimentação e configuração de pinos, etc. Alguns tipos de dispositivos RTC são



  • Interface serial de dois fios (barramento I2C)
  • Interface serial de três fios (USB BUS)
  • Interface serial de quatro fios (SPI BUS)

Primeiro, precisamos selecionar o tipo de dispositivo RTC por categoria com base em requisitos como I2C Bus RTC ou SPI Bus RTC ou outro, que seja adequado para fazer a interface com o respectivo microcontrolador. Em seguida, podemos selecionar recursos do dispositivo RTC, dependendo da necessidade da aplicação, como a vida útil da bateria, pacote adequado e frequência de clock. Vamos considerar a interface de dois fios RTC com microcontrolador 8051, como DS1307 .

Etapa 2: Registro interno e endereço do dispositivo RTC

RTC significa relógio em tempo real que fornece anos, meses, semanas, dias, horas, minutos e segundos com base na frequência do cristal. RTC consiste em embutido Memória RAM para armazenamento de dados . Um backup de bateria será fornecido em caso de falha da fonte de alimentação principal, conectando uma bateria ao dispositivo RTC.

Configuração RTC DB1307:

Blocos internos RTC e diagrama de pinos

Blocos internos RTC e diagrama de pinos

A0, A1, A2: são pinos de endereço do chip RTC DB1307, que podem ser usados ​​para se comunicar com o dispositivo mestre. Podemos controlar oito dispositivos com interface RTC com Microcontrolador 8051 pelos bits A0, A1, A2 usando o protocolo I2C.


VCC e GND: VCC e GND são pinos de alimentação e aterramento, respectivamente. Este dispositivo operou com faixa de 1,8 V a 5,5 V.

VBT: VBT é um pino da fonte de alimentação da bateria. A fonte de alimentação da bateria deve ser mantida entre 2V a 3,5V.

SCL: SCL é um pino de relógio serial e é usado para sincronizar dados na interface serial.

SDL: É um pino de entrada e saída serial. É usado para transmitir e receber os dados na interface serial.

Clock Out: É um pino de saída de onda quadrada opcional.

OSC0 e OSC1: Esses são pinos osciladores de cristal que são usados ​​para fornecer os sinais de clock para o dispositivo RTC. A frequência padrão do cristal de quartzo é 22,768KHz.

Endereçamento de dispositivo:

O protocolo de barramento I2C permite muitos dispositivos escravos ao mesmo tempo. Cada dispositivo escravo deve consistir em um endereço próprio para representar nele. O dispositivo mestre se comunica com um dispositivo escravo específico por meio de um endereço. O endereço do dispositivo RTC é '0xA2', em que '1010' é fornecido pelo fabricante e A0, A1, A2 são o endereço definido pelo usuário, que é usado para comunicar oito dispositivos RTC no Protocolo de barramento I2C .

Endereço de dispositivo

Endereço de dispositivo

O bit R / W é usado para realizar operações de leitura e gravação em RTC. Se R / W = 0, a operação de gravação é executada e R / W = 1 para a operação de leitura.

Endereço de operação de leitura de RTC = “0xA3”

Endereço de operação de gravação de RTC = “0xA2”

Registros de memória e endereço:

Os registros RTC estão localizados em locais de endereço de 00h a 0Fh e os registros de memória RAM estão localizados em locais de endereço de 08h a 3Fh, conforme mostrado na figura. Os registros RTC são usados ​​para fornecer funcionalidade de calendário e hora do dia de condução e para exibir os fins de semana.

Registros de memória e endereço

Registros de memória e endereço

Registros de controle / status:

DB1307 consiste em dois registros adicionais, como controle / status1 e controle / status2 que são usados ​​para controlar o relógio em tempo real e interrupções .

Controle / Status Register1:

Registro de status de controle 1

Registro de status de controle 1

  • TEST1 = 0 modo normal

= 1 modo de teste EXT-clock

  • STOP = 0 RTC começa

= 1 parada RTC

  • TESTC = 0 power on reset desabilitado

= power on reset habilitado

Registro de controle / status 2:

Registro de status de controle 2

Registro de status de controle 2

  • TI / TP = 0 INT ativo o tempo todo

= 1 INT tempo ativo necessário

  • AF = 0 O alarme não corresponde

= 1 Combinação de alarme

  • TF = 0 O estouro do temporizador não ocorre

= 1 Ocorre estouro do temporizador

  • ALE = 0 Desativar interrupções de alarme

= 1 Interrupções de alarme habilitadas

  • TIE = 0 desativação de interrupções do temporizador

= 1 As interrupções do temporizador permitem

Etapa 3: Interface do RTC ds1307 com 8051

RTC pode ser interface com o microcontrolador usando diferentes protocolos de barramento serial, como I2C e Protocolos SPI que fornecem elo de comunicação entre eles. A figura mostra a interface do relógio em tempo real com o microcontrolador 8051 usando o protocolo de barramento I2C. I2C é um protocolo serial bidirecional, que consiste em dois fios, como SCL e SDA, para transferir dados entre dispositivos conectados ao barramento. O microcontrolador 8051 não tem dispositivo RTC embutido, portanto, conectamos externamente através de um comunicação em série para garantir os dados consistentes.

Interface RTC com microcontrolador 8051

Interface RTC com microcontrolador 8051

Os dispositivos I2C têm saídas de dreno abertas, portanto, resistores pull-up devem ser conectados à linha de barramento I2C com uma fonte de tensão. Se os resistores não estiverem conectados às linhas SCL e SDL, o barramento não funcionará.

Passo 4: Formato de Enquadramento de Dados RTC

Uma vez que a interface RTC com o microcontrolador 8051 usa o barramento I2C, a transferência de dados é na forma de bytes ou pacotes e cada byte é seguido por uma confirmação.

Transmitindo quadro de dados:

No modo de transmissão, o mestre libera a condição inicial após selecionar o dispositivo escravo pelo bit de endereço. O bit de endereço contém 7 bits, que indicam os dispositivos escravos como endereço ds1307. Os dados seriais e o relógio serial são transmitidos nas linhas SCL e SDL. As condições START e STOP são reconhecidas como o início e o fim de uma transferência serial. As operações de recepção e transmissão são seguidas pelo bit R / W.

Transmitindo quadro de dados

Transmitindo quadro de dados

Começar: Primeiramente, a sequência de transferência de dados iniciada pelo mestre gerando a condição inicial.

Endereço de 7 bits: Depois disso, o mestre envia o endereço do escravo em dois formatos de 8 bits em vez de um único endereço de 16 bits.

Endereço de registro de controle / status: O endereço de registro de controle / status é para permitir os registros de status de controle.

Controle / Status Register1: O registro de status de controle 1 usado para habilitar o dispositivo RTC

Registro de controle / status 2: É usado para habilitar e desabilitar interrupções.

R / W: Se o bit de leitura e gravação for baixo, a operação de gravação será executada.

ALAS: Se a operação de gravação for realizada no dispositivo escravo, o receptor enviará ACK de 1 bit ao microcontrolador.

Pare: Após a conclusão da operação de gravação no dispositivo escravo, o microcontrolador envia a condição de parada para o dispositivo escravo.

Recebendo quadro de dados:

Recebendo quadro de dados

Recebendo quadro de dados

Começar: Primeiramente, a sequência de transferência de dados iniciada pelo mestre gerando a condição inicial.

Endereço de 7 bits: Depois disso, o mestre envia o endereço do escravo em dois formatos de 8 bits em vez de um único endereço de 16 bits.

Endereço de registro de controle / status: O endereço de registro de controle / status é para permitir registros de status de controle.

Controle / Status Register1: O controle de status register1 usado para habilitar o dispositivo RTC

Registro de controle / status 2: É usado para habilitar e desabilitar interrupções.

R / W: Se o bit de leitura e gravação for alto, a operação de leitura será executada.

ALAS: Se a operação de gravação for executada no dispositivo escravo, o receptor enviará ACK de 1 bit ao microcontrolador.

Pare: Após a conclusão da operação de gravação no dispositivo escravo, o microcontrolador envia a condição de parada para o dispositivo escravo.

Etapa 5: Programação RTC

Operação de gravação de mestre para escravo:

  1. Emita a condição inicial de mestre para escravo
  2. Transfira o endereço do escravo no modo de gravação na linha SDL
  3. Envie o endereço de registro de controle
  4. Envie o controle / status valor_registro1
  5. Envie o valor de registro2 de controle / status
  6. Envie a data dos minutos, segundos e horas semelhantes
  7. Envie o bit de parada

#incluir

sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void hosts (unsigned char)
delay (unsigned char)

void main ()
{

começar()
escrever (0xA2) // endereço do escravo //
escrever (0x00) // endereço de registro de controle //
escrever (0x00) // valor do registro de controle 1 //
escrever (0x00) // controlar regiter2 vlaue //
escrever (0x28) // valor seg //
escrever (0x50) // valor minuto //
escrever (0x02) // valor das horas //
}

void start ()
{

SDA = 1 // processando os dados //
SCL = 1 // o relógio está alto //
atraso (100)
SDA = 0 // enviou os dados //
atraso (100)
SCL = 0 // sinal de clock é baixo //
}
void write (unsigned char d)
{

caracteres sem sinal k, j = 0 × 80
para (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
atraso (4)
SCL = 0
}
SDA = 1
SCL = 1
atraso (2)
c = SDA
atraso (2)
SCL = 0
}
atraso vazio (int p)
{
unsignedinta, b
Para (a = 0a<255a++) //delay function//
Para (b = 0b}

Leia a operação do escravo para o mestre:

#incluir
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
void start ()
void write (usigned char)
void read ()
void ack ()
void delay (unsigned char)
void main ()
{
começar()
escrever (0xA3) // endereço do escravo em modo de leitura //
leitura()
Ai ()
seg = valor
}
void start ()
{

SDA = 1 // processando os dados //
SCL = 1 // o relógio está alto //
atraso (100)
SDA = 0 // enviou os dados //
atraso (100)
SCL = 0 // sinal de clock é baixo //
}
void write (unsigned char d)
{

caracteres sem sinal k, j = 0 × 80
para (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
atraso (4)
SCL = 0
}
SDA = 1
SCL = 1
atraso (2)
c = SDA
atraso (2)
SCL = 0
}
atraso vazio (int p)
{
unsignedinta, b
Para (a = 0a<255a++) //delay function//
Para (b = 0b}
Leitura nula ()
{
Caractere sem sinal j, z = 0 × 00, q = 0 × 80
SDA = 1
para (j = 0j<8j++)
{
SCL = 1
atraso (100)
flag = SDA
if (sinalizador == 1)

z = (z
void ack ()
{
SDA = 0 // linha SDA vai para baixo //
SCL = 1 // clock é alto para baixo //
atraso (100)
SCL = 0
}

Estas são as etapas necessárias para a interface do RTC com o microcontrolador 8051. Além dessas etapas, os quadros de dados usados ​​para transferir e receber os dados também são discutidos neste artigo para compreensão do usuário com a programação apropriada. Para qualquer ajuda adicional com relação a este conceito você pode deixar um comentário abaixo.