FAÇA UM RELÓGIO CONTROLADOR PROGRAMÁVEL MULTICANAIS – COM PIC 16F628A E DS1307 (REF184)

2

Automatizar atividades repetitivas está agora mais fácil…

Esta montagem é um aprimoramento do ‘RELOGIO CONTROLADOR DE 6 CANAIS’ podendo ser montado em 7 versões diferentes, dependendo da sua necessidade.
Foi também incorporado no software, a programação do dia da semana além das horas, minutos e segundos que um determinado canal irá ligar/desligar um dispositivo. Com isto, podemos dizer que foi aumentada a gama de aplicações para o dispositivo.
Veja abaixo, o esquema da versão para 7 canais:

Note que houve uma pequena alteração em relação ao esquema anterior (de 11/10/2013). O pino 2 passou a ser usado como saída para o sétimo canal. E o pino 3 (open-colector) passou a fornecer a cadência de clock para o RTC DS1307.
Na pasta fornecida no final deste artigo, poderemos obter 7 esquemas diferentes e 7 arquivos hex correspondentes a cada montagem, devendo ser carregado o firmware escolhido no pic com um programador de pics. O arquivo “C” está disponível, pois alguns hobistas talvez queiram adaptar o programa para alguma necessidade pessoal, ou mesmo melhorar as rotinas conforme tiver facilidade com o manuseio do compilador CCS C. Como estou ainda aprendendo “C”, sugestões serão bem-vindas para o benefício de todos. Também, poderá adaptar o arquivo para outros tipos de compiladores “C”, apenas trocando a forma de escrita de alguns comandos peculiares ao compilador utilizado.

PROGRAMAÇÃO DOS CANAIS E RELÓGIO/CALENDÁRIO

Quando em uso, o LCD irá mostrar na primeira linha, as horas, minutos e segundos ( hh:mm:ss). Já na segunda linha irá apresentar o dia da semana com 3 letras (ex: SEG para segunda-feira) e o calendário com dia, mês e ano (DD:MM:AA).
Ao apertar o botão ‘MENU’ passamos para o modo de programação. De imediato começa a piscar as horas, minutos e segundos. Pressionando os botões ‘SEG’, ‘MIN’ e ‘HORA’, podemos ajustar as horas, minutos e segundos.
Para ajustar o dia da semana, de um novo aperto no botão ‘MENU’. Isto fará que fique piscando o dia da semana. Apertando qualquer dos botões ‘SEG’, ‘MIN’ ou ‘HORA’, fará que ocorra mudança deste dia, de forma sequencial.
Para ajustar o calendário, deverá dar um novo aperto no botão ‘MENU’. Agora o calendário irá piscar. Use os botões ‘SEG’, ‘MIN’ e ‘HORA’ para alterar o dia, mês e ano. Para salvar estas alterações feitas para o relógio, aperte o botão ‘MENU’. Nesta operação, também ira mostrar no LCD o canal a ser ajustado e piscará o horário para ligar na linha superior. Ajuste usando os botões ‘SEG’, ‘MIN ou ‘HORA’. Aperte o botão ‘MENU’ para ajustar a hora desejada para desligar, na linha inferior. Outro aperto em ‘MENU’ fará aparecer a tela com os dias que deseja que acione a saída. Na linha inferior temos as iniciais dos dias da semana, no formato D S T Q Q S S (Domingo, Segunda, Terça… Sábado).
Com o botão ‘SEG’ navegamos entre os dias a ser selecionado. Usando o botão ‘MIN’ marcamos o dia para ligar e com o botão ‘HORA’ desmarcamos o dia (não ligará). Note que o dia a ser marcado/desmarcado ficará piscando. Quando marcamos um dia, irá aparecer no espaço anterior o carácter ‘>’, para indicar a escolha para o usuário. Quando desmarcamos, voltará a apresentar um espaço em branco antes da inicial do dia. Para gravar estas escolhas, aperte novamente o botão ‘MENU’. Se houver mais canais, conforme a opção escolhida, repita os mesmos passos para cada canal, lembrando que somente será gravado após aperto do botão ‘MENU’. Caso deseje que um canal nunca acione a saída, basta programar os horários de ‘ligar’ iguais ao de ‘desligar’ ou então desmarque todos os dias da semana. O botão ‘RESET’ pode ser usado para sair de modo mais rápido do modo de programação, respeitando as instruções acima quanto a gravar dados para cada canal.

APLICAÇÕES DESTA MONTAGEM

Podemos acoplar vários dispositivos diferentes a cada canal. Podemos, por exemplo, ligar uma cafeteira as 7:00 horas da manhã, de segunda a sexta, no canal 1. Acionar uma sirene no canal 2 por 5 segundos, para acordar, exceto os dias de sábado e domingo. Ligar a irrigação do jardim, no canal 3, no final do dia, por 4 a 5 minutos. O canal 4 poderá ligar a luz externa da 19:00 h até 22:00 h. Podemos usar o canal 5 para ligar o aquecimento central das 18:00 h até as 20:00 h.
Quando necessitamos que vários horários acionem uma única carga no dia, podemos colocar os contatos dos reles de saída em paralelo, quantos forem necessários.
Acredito que cada hobista tenha algo que poderia ser automatizado usando este dispositivo.
Obs. Esta montagem foi feita apenas em placa de protótipos (tipo protoboard), sujeita a bugs não observados nos testes.
Esta sendo fornecido os arquivos que poderão ser alterados conforme a necessidade dos hobistas.
Atenção: Antes de fazer placa de circuito impresso, teste antes em placa de montagem experimental e certifique-se que a montagem atenda as suas necessidades.

Segue a pasta com os arquivos para esta montagem, nas suas várias versões:

RELOGIO_MCONTROL

Manuais:

DS1307
PIC 16F628A
LCD

Curiosidades:
Por que o mar é salgado?
Sol e ar fresco — são “antibióticos” naturais?
Micro-organismos que comem petróleo
O que você deve saber sobre a malária
A Bíblia de Bedell — um pequeno passo para muitos entenderem melhor a Bíblia
O versátil limão-siciliano
Os limites da ciência
Diário: um amigo de confiança
A fábrica da morte
A arte e a ciência da previsão do tempo

Outros assuntos:
Como ensinar seus filhos a ter autocontrole
Você está decepcionado com Deus?
Como ajudar um parente ou um amigo doente
Em foco: Família
Quando você precisa voltar a morar com os pais
Será que é possível haver um mundo sem pobreza?
Perdoe generosamente
“A pessoa ingênua acredita em qualquer palavra”

Videos para assistir com seus filhos pequenos:

Proteja seus filhos
Aprenda a perdoar
Divida suas coisas com outros
Jeová criou todas as coisas
Seja limpo e organizado
O que é um amigo de verdade?
Dar de coração traz alegria
Por favor e obrigado
É errado roubar
Como enfrentar o bullying sem partir para a briga

Videos Motivadores:
Vejo a vida com as mãos
‘Eu estava cheio da minha vida’
Um novo começo
Japão — refazendo a vida um ano após o desastre
Uma exposição histórica
Deus tem nome?

Até o próximo artigo!!!

2

21 comments

  1. 0

    Olá prezado Claudio!
    Fiz agora este seu excelente projecto mas estou bloqueado.
    Por gentileza, podia ajudar-me como modificar o seu código para usar circuito I2C PCF8583P ao invés do DS1307?
    Se vi bem, são estes os endereço comunicação I2C-bus.
    DS1307 : 11010000 D0 e 11010001 D1
    PCF8583P : 10100000 A0 e 10100001 A1
    O que é que eu fiz de errado para não haver qualquer comunicação através do I2C-bus? Ao ligar, no LCD dá mensagem inicial, dá para navegar no Menu. Depois fica assim: ??:??:??
    DOM ??/??/??
    SDA = H (só há actividade ao iniciar)
    SCL = L (só há actividade ao iniciar)
    Fiz as seguintes alterações ao seu código. Falta algo?
    ——————————————————————-
    // ——– ROTINAS DE COMUNICAÇÃO PARA DS1307 ———-
    void ds_write(int8 adr,int8 valor){
    I2C_START();
    I2C_WRITE(0xa0); //11010000 (d0)->DS1307 /10100000 (a0)->PCF8583P
    ACK();
    I2C_WRITE(adr);
    ACK();
    I2C_WRITE(valor);
    ACK();
    I2C_STOP();
    }
    int8 ds_read(int8 adr){
    int8 a;
    I2C_START();
    I2C_WRITE(0xa0);//11010000 (d0)-> DS1307 /10100000 (a0)-> PCF8583P
    ACK();
    I2C_WRITE(adr);
    ACK();
    I2C_START();
    I2C_WRITE(0xa1);//11010001 (d1)-> DS1307 /10100001 (a1)-> PCF8583P
    ACK();
    a=I2C_READ();
    NO_ACK();
    I2C_STOP();
    RETURN (a);
    }
    void ds_read8(void){
    int8 a;
    I2C_START();
    I2C_WRITE(0xa0); //11010000 (d0)-> DS1307 /10100000 (a0)-> PCF8583P
    ACK();
    I2C_WRITE(0);
    ACK();
    I2C_START();
    I2C_WRITE(0xa1);//11010001 (d1)-> DS1307 /10100001 (a1)-> PCF8583P
    ACK();
    for(a=0;a<7;a++){
    time[a]=I2C_READ();
    if(a==6)no_ack();else ACK();
    }
    I2C_STOP();
    ———————————————————————
    Muito obrigado,
    Grande abraço
    MMota

    1. 0

      Olá Manuel!
      O PCF8583 não é compatível com o DS1307 não somente na questão de endereço de acesso, mas também sua lógica interna e o ‘ADDRESS MAP’ são completamente diferentes.
      Caso queira insistir na modificação, tente estudar os 2 datasheets e ver onde estão estas diferenças e ir alterando o programa. Torce para caber depois dentro do pic!
      Eu não tenho como ajudar mais pois não disponho deste RTC (PCF8583) para testes no protoboard.
      Cláudio

      1. 0

        Olá Claudio 🙂
        Muito obrigado pela sua rápida resposta.
        Claro que já me ajudou muito! Deste modo, vou mesmo adquirir o DS1307. Não é viável focar-me no PCF8583P (apenas para lado didáctico). Como tenho várias unidades, queria dar-lhes uso.
        Grande abraço
        MMota

  2. 0

    Olá Claudio, poderia me informar qual versão do CCS usou para compilar o programa deste projeto? Estou tentando com a versão 5.015 e não compila. Grato!

  3. 0

    Boa tarde, preciso de um frequencímetro 0 a 30 MHZ em uma placa simples com display, vc indicaria alguém para fazer um? preciso fazer medições descontando FI 455 kHz

  4. 0

    Vou Regravar o PIC, meu gravador uma vez aconteceu uns erros, não sei o motivo, pode ser PIC ou próprio Gravador, pois seus Projetos nunca deu erros testei a maioria e posso garantir,,,,

  5. 0

    Ola Claudio, como tinha lhe falado já montei alguns de seus Projetos e todos funciona até hoje. Quero perguntar a vc, eu montei esse Relógio e vi que os meses esta com Bugs, como por exemplo Hoje domingo dia 12/06/2016 vi no Relógio estava marcando dia 13 porem as Horas estão normais somente o mês, ajustando o relógio pra mim ver esse mês, vi que ele vai até 31 se no calendário é somente 30 para esse mês de julho, Pergunto a v onde posso alterar os valores de dos meses no seu Código?

      1. 0

        O Claudio Gravei em outro PIC e resolveu, como tinha te falado o meu gravador de PIC as vezes faz isso, mais só com PIC 16F628 Nunca da erros com outros não, desculpe por te incomodar ai, e bons projetos,,,,

  6. 0

    Olá boa noite Claudio,Há um tempo atrás eu Havia comentado sobre o relógio de 6 canais que havia montado e que adiantava um pouco. bom, e vc fez aquele comentário sobre o cristal e mais algo, Tb havia comentado com vc que eu ia comprar um modulo RTC já industrializado, assim o fiz, tirei o CI DS1302, adaptei o modulo na placa antiga de 6 canais e funcionou perfeitamente, com mais precisão. Aqui tem 3 foto e 1 vídeo pra vc ver como ficou a modificação: http://www.4shared.com/rar/PZkAhpkAce/foto_e_video.html , estou mudando esta placa para 7 canais depois então mando uma foto e um vídeo só pra vc ver como ficou, Att

  7. 0

    lario bom dia! é possivel este relogio programador ir para seu caderninho,para no futuro ser utilizado o pic 16f877 para 10 canais?obrigado

  8. 0

    lario amei estes detalhes comentado por voce sobre estas diferenças de tempo sofrido pelo desiquilibrio de capacitancia,certa ocasião desistir de manter um relogio digital que montei devido este desagradavel atraso no tempo,porem agora fiquei com mais conhecimento obrigado!

  9. 0

    Olá Claudio, boa noite, eu montei o relógio controlador de 6 canais em proto-onboard em 8/8/2014, e como havia funcionado beleza, fiz o desenho então no PROTEUS e confeccionei então a placa, montei e funcionou, Mas no decorrer do tempo percebi que ele adianta um pouco, tipo uns 5 minuto em um mês, vou marcar o tempo direito e depois falo quanto adianta, Agora este outro RELÓGIO CONTROLADOR de 7 Canais deve ser show, baixei ele mas só vou monta-lo nos próximos dias, depois relato, Obrigado por disponibilizar seu tempo em prol dos internautas, por ex: EU. Até mais

    1. 0

      Olá Bagini!
      Obrigado por seu comentário apreciativo. Quanto ao fato de ocorrer atraso ao longo do tempo, o fabricante avisa que a capacitancia do cristal conectado em X1 e X2 do RTC 1302 tem que ter exatos 12,5 pF e uma ESR de 45 K ohms. Se a capacitância for mais alta irá atrasar e se for mais baixa irá adiantar(o seu caso). Também ocorrerá desvio da frequência em decorrência da temperatura ambiente, conforme explicado pela note application “APPLICATION NOTE 58 – Crystal Considerations with Maxim Real-Time Clocks (RTCs)” Para aplicações que exija mais precisão, poderá usar no lugar do cristal de 32khz, um outro circuito integrado chamado de TCXO ( temperature-compensated crystal oscillator) conhecido como DS32kHz. A sua saída deverá ser ligado no X1 do DS1307, como um gerador de frequência preciso e compensado em temperatura. Outro ponto é que o tipo de desenho da placa do circuito impresso e o material usado pode afetar a precisão. No datasheet do DS1307, na pagina 7, além das especificações do cristal, mostra como deverá ser feita a placa de circuito impresso junto aos terminais do cristal e do DS1307. Alguns hobista também tem soldada a caneca do cristal ao gnd para torna-lo mais imude a ruidos do oscilador do pic ou sinais externos, além de ligar um capacitor de 100 nF do vcc ao gnd, bem próximos dos pinos do RTC. Também, poderá tentar trocar o cristal até achar um com a precisão necessária (evite estes tirados de relogio de pulso ‘made in quem sabe aonde’ pois tem um erro maior que 100 ppm, dando erro de um ou mais segundos por dia).
      Cláudio

      1. 0

        Beleza Claudio, Fico Grato Pela Explicação, sim é verdade, tenho observado os tais cristais soldados no cobre (GND), não levei em consideração isto, Mas o Próximo Que vou Montar, Que é Este ultimo Que você Postou, (de 7 Canais) Vou Tomar Mais Cuidado, Então Assim Que tiver Montado Vou Relatar o Desempenho, Apenas Por Hobby Mesmo, Valeu. Att

    1. 0

      Olá José!
      O Ds 1302 usa comunicação Spi com 3 pinos, sendo incompatível com o software do Ds 1307 (usa I2c com 2 pinos). Infelizmente não irá funcionar!
      Futuramente talvez eu possa postar uma versão usando ele.
      Claudio

  10. 0

    lario que surpresa hem!! emocionante esta nova versão do relogio controlador com 7 saidas independente parabem pelo esforço.isto é que em chamo de um circuito flex rsrsr.

Comments are closed.