Relógio de tempo real é um relógio digital que exibe o tempo real em um display LCD 16×2. Aqui neste circuito também podemos definir alarme e hora. O relógio serial em tempo real (RTC) DS1307 é um relógio/calendário decimal completo com codificação binária (BCD) de baixo consumo de energia mais 56 bytes de NV SRAM. Endereço e dados são transferidos serialmente através de um barramento bidirecional I²C. O ck/calendar fornece informações sobre segundos, minutos, horas, dia, data, mês e ano. A data do final do mês é ajustada automaticamente para meses com menos de 31 dias, incluindo correções para anos bissextos. O relógio funciona no formato de 24 ou 12 horas com indicador AM/PM. O DS1307 possui um circuito de detecção de energia integrado que detecta falhas de energia e alterna automaticamente para a fonte de backup. A operação de cronometragem continua enquanto a peça opera a partir da fonte de reserva.
Fig. 1: Diagrama de circuito do microcontrolador 8051 e relógio de tempo real baseado em IC DS1307
Figura 1.1: Circuito Proteus do relógio digital em tempo real
Descrição:-
Neste circuito, a porta 2 do microcontrolador conectada aos pinos de dados do display LCD 16×2 e os bits P3 ^ 0 e P3 ^ 1 da porta 3 conectados ao pino de comando do display LCD 16 × 2 rs e en respectivamente. E dados seriais SDA e pino SCL de clock do ds1307 conectados a P1 ^ 0 e P1 ^ 1 do microcontrolador, respectivamente. 4 interruptores/botões também usados para definir a hora e o alarme. Os bits P3^2, P3^3,P3^4 e P1^2 são configurados como dígito de incremento, valor de incremento, ajuste de tempo e ajuste de alarme respectivamente. E um LED indicador de alarme também conectado a P1^3 para indicar alarme. Quando a hora do alarme coincidirá com o tempo real do relógio então o led será ativado. Neste relógio, o RTC é usado no modo 24 horas, o que fornece a hora precisa e pode ser exibido no LCD através do microcontrolador. O microcontrolador lê continuamente os dados do RTC. O programa lê continuamente os dados do ds1307 e mostra no display. O bit P3 ^ 4 é ativado em nível baixo quando um sinal baixo chega às chamadas do programa, função de configuração de tempo e os bits P3 ^ 2 e P3 ^ 3 também são ativados em nível baixo para definir hora / data / dia, bem como a hora do alarme após pressionar o bit P1 ^ 2.
Fig. 2: Visão geral do microcontrolador 8051 e do relógio de tempo real baseado em IC DS1307
Figura 1.3: Diagrama de circuito do RTC
Componente usado
Componente usado: –
Microcontrolador 89S52
A microcontrolador é um pequeno computador em um único circuito integrado contendo um núcleo de processador, memória e periféricos de entrada/saída programáveis. A memória de programa na forma de flash NOR ou ROM OTP também costuma ser incluída no chip, bem como uma quantidade normalmente pequena de RAM. Os microcontroladores são projetados para aplicações embarcadas, em contraste com os microprocessadores usados em computadores pessoais ou outras aplicações de uso geral.
Fig. 3: Imagem típica do microcontrolador AT89S52 8051
LCD 16×2
A tela LCD (Liquid Crystal Display) é um módulo de exibição eletrônico e encontra uma ampla gama de aplicações. Um display LCD 16×2 é um módulo muito básico e muito comumente usado em vários dispositivos e circuitos. Esses módulos são preferidos a sete segmentos e outros LEDs multisegmentados. As razões são: os LCDs são econômicos; facilmente programável; não tem limitação de exibição de caracteres especiais e até personalizados (ao contrário de sete segmentos), animações e assim por diante.
Um LCD 16×2 significa que pode exibir 16 caracteres por linha e existem 2 dessas linhas. Neste LCD, cada caractere é exibido em uma matriz de 5×7 pixels. Este LCD possui dois registros, a saber, Comando e Dados.
O registrador de comando armazena as instruções de comando fornecidas ao LCD. Um comando é uma instrução dada ao LCD para executar uma tarefa predefinida, como inicializá-lo, limpar a tela, definir a posição do cursor, controlar a exibição, etc.
O registro de dados armazena os dados a serem exibidos no LCD. Os dados são o valor ASCII do caractere a ser exibido no LCD. Clique para saber mais sobre a estrutura interna de um LCD.
Fig. 4: Diagrama de pinos do LCD de 16X2 caracteres
DS1307
O relógio serial em tempo real (RTC) DS1307 é um relógio/calendário decimal completo com codificação binária (BCD) de baixo consumo de energia mais 56 bytes de NV SRAM. Endereço e dados são transferidos serialmente através de um barramento bidirecional I²C. O relógio/calendário fornece informações sobre segundos, minutos, horas, dia, data, mês e ano. A data do final do mês é ajustada automaticamente para meses com menos de 31 dias, incluindo correções para anos bissextos. O relógio funciona no formato de 24 ou 12 horas com indicador AM/PM. O DS1307 possui um circuito de detecção de energia integrado que detecta falhas de energia e alterna automaticamente para a fonte de backup. A operação de cronometragem continua enquanto a peça opera a partir da fonte de reserva.
Fig. 5: Imagem típica do DS1307 RTC IC
Código fonte do projeto
### #includesbit rs=P3^0; sbit en=P3^1; sbit SDA=P1^0; //data pin for ds1307 bi-directional bit sbit SCL=P1^1; //clock pin for ds1307 output bit sbit alarm_set=P1^2; //set alarm input bit sbit alarm_beep=P1^3; //alarm indicator output bit sbit next=P3^2; //increament digit sbit inc=P3^3; //increament value input bit sbit set=P3^4; //set time input bit void set_time ; //time/date/day set function void display ; //time/date/day display function void alarm ; //alarm set function char ack; unsigned char day1=1; unsigned char k,x; unsigned int date=1, mon=1, year=0x14, hour=0, min=0, sec=0; unsigned int alarm_min, alarm_hour; void I2CStart { SDA=1;SCL=1,SDA=0,SCL=0; } //"start" function for communicate with ds1307 RTC void I2CStop { SDA=0,SCL=1,SDA=1; } //"stop" funci=tion for communicate wit ds1307 RTC unsigned char I2CSend(unsigned char Data) //send data to ds1307 { char i; static bit ack_bit; for(i=0;i<8;i++) { if(Data & 0x80) SDA=1; else SDA=0; SCL=1; Data<<=1; SCL=0; } SDA=1,SCL=1; ack_bit=SDA; SCL=0; return ack_bit; } unsigned char I2CRead(char ack) //receive data from ds1307 { unsigned char i, Data=0; SDA=1; for(i=0;i<8;i++) { Data<<=1; do{SCL=1;} while(SCL==0); if(SDA) Data =1; SCL=0; } if(ack)SDA=0; else SDA=1; SCL=1; SCL=0; SDA=1; return Data; } void delay(unsigned int time) // delay function { unsigned int i,j; for(i=0;i //without time and alarm set #includesbit rs=P3^0; sbit en=P3^1; sbit SDA=P1^0; sbit SCL=P1^1; char ack; char array(7); void I2CStart {SDA=1;SCL=1,SDA=0,SCL=0;} void I2CStop {SDA=0,SCL=1,SDA=1;} unsigned char I2CSend(unsigned char Data) { char i; static bit ack_bit; for(i=0;i<8;i++) { if(Data & 0x80) SDA=1; else SDA=0; SCL=1; Data<<=1; SCL=0; } SDA=1,SCL=1; ack_bit=SDA; SCL=0; return ack_bit; } unsigned char I2CRead(char ack) { unsigned char i, Data=0; SDA=1; for(i=0;i<8;i++) { Data<<=1; do{SCL=1;} while(SCL==0); if(SDA) Data =1; SCL=0; } if(ack)SDA=0; else SDA=1; SCL=1; SCL=0; SDA=1; return Data; } void delay(int time) {unsigned int i,j; for(i=0;i
Diagramas de circuito
Diagrama de circuito-8051-Microcontrolador-DS1307-IC-Based-Real-Time-Clock | |
Diagrama de circuito-8051-Microcontrolador-DS1307-IC-Based-Real-Time-Clock |