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

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!!!

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

  1. 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. 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. 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

Comments are closed.

Back To Top