FAÇA UM RELÓGIO DIDÁTICO COM CI DS1302 E A SERIAL RS232 DO PC (COM PIC 16F676)

Gostaria de conhecer melhor o ci DS1302 (relógio de tempo real)? Esta pequena montagem didática poderá ajuda-lo. Veja como…

Veja o esquema abaixo:

A idéia básica está em usar um microcontrolador PIC 16f676 para controlar a leitura e escrita do ci DS1302, além de realizar a comunicação pela serial de um PC (Com1). Poderá ser usado o programa HyperTerminal ou qualquer outro que desejar, para iniciar a comunicação entre PC e a montagem didática do relógio.

CONHECENDO UM POUCO DO DS1302

Podemos dizer que o DS1302 é um excelente aprimoramento da Dallas Semiconductor, do anterior DS1202, tendo como diferênça que o DS1302 passou a ter dupla alimentação (uma pode ser de um bateria de 3 volts, ou mesmo um supercapacitor acoplado). Também, visando recarregar esta bateria recarregavel ou mesmo o supercapacitor, foi colocado um sistema de carga lenta, controlado pelo registrador ‘trickcharger’, que ajusta 3 resistores em série (2,4,8 k) e 3 diodos, para o valor de corrente desejado. Ainda, foi acrescentado mais 7 bytes de RAM ( totalizando 31 bytes de 8 bits), de uso geral, para o usuário.
A comunicação com o microcontrolador é feita por 3 fios apenas, sendo um de reset, clock e dado.Veja a figura abaixo, como se processa o envio da palavra de comando e os dados de leitura/escrita:

Cada transferência é iniciada com um ‘byte de comando’. Sempre o bit 7 deste byte deverá ser ‘1’, do contrário, desabilitará a escrita para o DS1302. o bit 6 irá indicar se a comunicação será com o relógio (0) ou com a RAM (1). Os bit de 1 a 5 apontam para o registrador que desejamos ler/escrever. E finalmente, o bit0 define se será uma escrita (0) ou leitura(1) do registrador apontado. Toda transferência tem que começar tornando ‘reset’ = 1 e terminada com ‘reset’ = 0. Após um comando de escrita, deve-se enviar os 8 bits, sequêncialmente, dando pulsos de clocks para isto. Na leitura, após o comando, apenas deve-se dar clocks e ler a entrada de dado, sucessivamente.
O bit 7 do registrador de segundos é na realidade um bit de liga/desliga, sendo que, com nivel’1′, o torna desligado e em modo de baixissimo consumo (100 Nanoamperes). Após ligar a alimentação, deve-se providenciar que este bit seja sempre resetado, para iniciar o funcionamento do relógio.
No registrador ‘control’, seu bit7 é um controle que permite bloquear a escrita se estiver com nivel ‘1’. Deve-se certificar de que esteja em nivel ‘0’, antes de qualquer escrita para registradores de relógio ou na RAM (estática) interna. No ‘reset’ da alimentação, seu estado é indefinido.
Devemos lembrar que o conteúdo dos registradores são em formato binário BCD, especialmente ao escrever neles.
Uma facilidade encontrada é a leitura/escrita em forma consecutiva, ou o ‘burst mode’. Enviamos uma única vez o comando e em seguida enviamos/recebemos dados, com pulsos de clock. Para o relógio, neste modo, leremos/escreveremos os 8 bytes consecutivos e para a RAM, os 31 bytes. Com respeito ao formato da hora, que pode ser 12 (mais o ‘AM’ e o “PM’) ou 24, temos o bit7 do registrador de horas (HR), que quando setado (‘1’) será 12 horas e resetado (‘0’) será 24 horas. o bit5 deste mesmo registrador será o indicador de ‘PM’ se =’1′ e ‘AM ‘ se =’0’, se for em modo de 12 horas. Quando bit 7 for ajustado para 24 horas, o bit5 será o indicador de 20 a 23 horas. Todas as operações do DS1302 são orquestradas pela cadência de um pequeno cristal oscilador de 32768 hertz, facilmente encontrado no comércio de peças eletrônicas.

DESCRIÇÃO DO CIRCUITO PROPOSTO

Objetivando fazer experimentos com pouco custo, foi usado apenas um PIC 16F676, um DS 1302, e o envio/recepção da serial foi usado 2 transistores de uso geral (BC548, BC558). Não é necessário usar bateria no pino 8 do DS 1302 para funcionar. Ela apenas garante que o relógio não perca seu conteúdo ao desligar o circuito. Para alimentar o circuito, poderá usar uma fonte externa de 9 volts, que ao passar por um 7805, teremos os 5 volts necessários. Pode-se optar por fontes de celulares modernos (5 volts) do tipo USB. Como estamos usando um PC, poderá também usar a energia de uma porta USB para alimentar o circuito.

USO DO CIRCUITO

Monte o circuito em um protoboard e carregue o arquivo HEX anexo. Poderá usar o WinPic800 (software) e o simples programador de PIC (hardware). Conecte a porta serial do PC (DB9), nos pinos 5 (gnd),2 e 3, conforme o esquema. Abra um terminal de serial, como o HyperTerminal. Abra uma ‘nova conexão’, como na figura abaixo.

Selecione a port Com desejada (geralmente a “Com1”), como na figura abaixo:

Agora, selecione e configure para 38400 bauds, 8 bits, sem paridade, 1 stop bit e controle de fluxo por software Xon/Xoff, como na figura abaixo:

Em seguida, ligue a alimentação do circuito do relógio. Deverá ser mostrado o seguinte na tela do monitor do PC:

ARQUIVO ASM

Após a inicialização dos registradores e portas, o programa passa a ler em loop os registradores de horas, minutos, segundos e calendário, e passa também a testar a recepção de comandos da rs232, quanto a comandos que promovem o acerto de horas, minutos, etc. Quando o microcontrolador está escrevendo na serial, envia antes um comando de Xoff, que impede que o PC envie ao mesmo tempo, um comando. Acabando de enviar, o microcontrolador envia Xon, e se tinha sido digitado um comando pelo usuário, este passará a ser enviando então.
Os comandos são estes (letras maiúsculas para todos os comandos):
‘H’ para acertar horas.
‘M’ para acertar minutos.
‘S’ para acertar segundos.
‘D’ para acerta dia do mês.
‘E’ para acertar o mês.
‘A’ para acertar o ano.
‘F’ para acertar o dia da semana.
O código tem algumas rotinas ‘caseiras’ para envio da serial e comunicação com o modo 3 wire.
Não foi previsto cristal externo no PIC, pois, com o oscilador interno calibrado de fábrica (oscall ‘virgem’), não tive problemas. Caso você tenha apagado seu PIC 16F676 e perdido o valor de ‘oscall’, e por isto, surja caracteres estranhos na tela do Hyperterminal, então poderá usar um cristal externo de 4 mhz nos pinos 2 e 3 , usando outro pino que sobra, para envio da serial. Não esqueça de mudar também na palavra de configuração de ‘oscilador interno’ para ‘xtal’.
Com algumas modificações, e usando um LCD ou mesmo alguns display de 7 seguimentos, será possível construir um relógio/despertador ou qualquer montagem, como placares que necessitam de relógio de tempo real. Vai da ‘sua’ criatividade!!!
Obs. Esta é uma montagem apenas didática, sujeita a bugs ainda não detectados.

Segue o arquivo ASM:

RELOGIO_DS1302_RS232_ASM

Segue o arquivo HEX:

RELOGIO_DS1302_RS232_HEX

Caso queira usar um circuito integrado para a parte de conversão de nivel rs232 use este esquema :

Esquema Relogio DS1302 com Max232

Data sheets:

DS 1302
PIC 16F676

Preços de PIC

Curiosidades:
O rei dos relógios
O desafio da longitude para os navegadores do passado
Praga e seu notável relógio
Praga e sua história
Por que tantos crimes violentos?
Como vai a sua Tireóide?
Matemática para todos
Beneficios da amamentação na Inteligência das criança
A glória das estrelas
Al_Jazari – ‘pai da robótica’?
O ‘pim’ – confirma relato biblico

Outros assuntos:
Como sobreviver ao primeiro ano de casamento
Quando um dos conjuges tem necessidades especiais
Como lidar com dívidas
Como resolver diferenças no casamento
Como tratar o conjuge com respeito
Como evitar ferir com palavras
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico

Até o próximo artigo!!!

13 comments on “FAÇA UM RELÓGIO DIDÁTICO COM CI DS1302 E A SERIAL RS232 DO PC (COM PIC 16F676)

  1. 💡 Olá Claudio e Ronaldo, E so uma ideia, e eu tive varios problemas aqui com os meus exemplo tb, logo no inicio do micro, de efetuar alguma coisa indesejada, consegui resolver isto com um atraso logo no start do micro: exemplo call Delay05 segundos, limpa os port e so ai apos inicia as sua funções, quanto a caracteres enviado pela serial teria que estabilizar o micro so apos começar a enviar ou receber os dados pela serial, aqui ja tive este problema tb. Espero ter ajudado abraços :mrgreen:

  2. OK Claudio obrigado pela dica sou iniciante, este comentário foi muito importante para me,eu tenho um terminal com Lcd, para teste e só quando liga o circuito ele envia uns dois caracteres desconhecido, o resto esta funcionado perfeito, parabéns por disponibiliza estas ajudas para todos
    que já mas e encontrada nem em bos livros
    Ronaldo

  3. Ola Claudio Obrigado pela atenção, Claudio e o seguinte queria mudar o start da rotina de comunicação via rs232 que esta de alto para baixo eu queria inverter porque não sei se e o que estou pensando quando ligo o a placa e enviado uns caracteres aleatório, sera que e isso?

    1. Olá Ronaldo!
      Deixa eu entender: Você está recebendo caracteres ‘estranhos’, é isto? Se for, tenha em mente o seguinte, por favor: O oscilador interno é calibrado com 1% de tolerância, por se buscar na flash, na ultima posição de memória, um valor de calibração. Usa-se a rotina ‘call 0x3ff’ e depois carrega-se o registrador ‘oscall’. Mas se este valor na flash não tiver sido salvo antes de apagar a flash, irá resultará em uma frequência diferente da desejada. Para que uma transmissão, via serial, seja boa, o oscilador não pode fugir da frequência em 2% máximo, sob o risco de gerar caracteres estranhos. Quando usamos o WinProg800, ele automáticamente salva este valor antes de apagar a flash. Também, lendo o Pic com ele, e vendo o que está gravado no endereço 0x3ff, poderemos ver se está ou não com o valor de calibração intacto. Se estiver 0xff de conteudo, sinal que foi apagado e sua transmissão não será sincronizada, gerando caracteres estranhos. Um PIC novo deverá estar com este’ byte de calibração’ intacto e deverá funcionar bem. Quanto a acertar de novo este byte em caso de apagamento acidental, existe uma Note Application da MicroChip que explica como fazer, mas precisa-se de gerador de frequência e frequêncimetro para isto.
      Claudio

Comments are closed.

Back To Top