CONTROLE REMOTO P/31 CANAIS (PULSO OU RETENÇÃO) USANDO AT89S52

Esta versão de controle remoto trabalha com o microcontrolador AT89S52, sendo ainda facilmente encontrado no comércio de componentes e de prêço muito acessível. Veja mais…

Usando microcontroladores de muitas portas de saidas, facilita a construção de controles remotos de muitos canais, como este aqui. Foi escolhido este modelo, por ser de baixo custo e atender a necessidade do projeto. A quantidade de linhas de programas são bem poucas, perto da capacidade da flash deste chip. Mas a idéia é exatamente esta: ser simples e prático.
Veja abaixo o esquema do transmissor:

Foi necessário o uso de pull_ups de 10k no Port0, visto ser ‘open drain’. Caso os interruptores das demais ports fiquem distantes, também é aconselhavel o uso de pull_up nelas, para evitar transmissão com disparos ocasionados com ruidos elétricos ou mesmo, de origem estática, como a proximidade da mão. Para gerar a frequência de trabalho foi colocado um cristal de 12 Mhz e seus capacitores de 27 pf. O módulo transmissor poderá ser para qualquer frequência, como 27Mhz, 315 Mhz ou 433Mhz, sendo a escolha do hobista. Existe inúmeros modelos e marcas que poderão ser usados com sucesso. Quando qualquer interruptor for ligado, começará uma transmissão, composta por 7 bytes, sendo os 2 primeiros com o ‘serial number’ do transmissor. Este pode ser alterado para outro valor (desde que no receptor também seja alterado para um valor igual). Este ‘serial number’ evita que um receptor igual acione o receptor de outro. Os próximos 4 bytes correspondem a situação dos interruptores nos port0 a 3. O ultimo byte serve para conferir a integridade da transmissão, sendo uma somatória dos outros bytes, truncando em apenas 8 bits. Acionando um interruptor no transmissor ligará a saída correspondente no receptor. A presença de outros transmissores na mesma faixa (controles de portões, por exemplo), poderá interferir em seu funcionamento , como ele poderá interferir em outros equipamentos na mesma frequência. Com tx/rx de pequena potência, aconselha-se seu uso de forma estática, escolhendo um local que estabeleça um bom funcionamento e fazendo uso de antenas apropriadas para uma boa recepção.
Veja agora o esquema do receptor:

Deve-se repetir a saída para rele em 31 vezes (o número de canais máximo). Logicamente, se desejar usar menos canais, nada impede de montar somente a quantidade de saídas desejadas, deixando desligados os pinos do At89s52 que não forem usados. Foi previsto uma chave para ‘teste/ uso’, que facilita os testes de recepção de sinal. Os leds nos coletores acendem quando determinado canal é acionado, mesmo com a chave ‘teste/uso’ em posição que desliga a alimentação dos reles. Deve-se lembrar, especialmente quando forem usados todos os reles (31 canais), que a fonte de alimentação deverá conseguir manter a tensão com todos os reles acionados. Esta corrente poderá chegar próxima de 2 amperes, dependendo da resistência das bobinas dos reles usados. Também, dependendo da aplicação, poderá ser usados reles com capacidade de corrente maiores ou menores.
Nota: Este projeto é de carater didático apenas, sendo testado apenas em placas de protoboard, sujeito a bugs ainda não detectados com uso.
Caso deseje uma versão com pic 16f628a clique aqui.

Segue abaixo o arquivo ASM do Tx:

tx_31_89c52_ASM

Segue abaixo o arquivo HEX do Tx:

TX_31_89C52_HEX

Segue abaixo o arquivo ASM do Rx:

rx_31_89c52_ASM

Segue abaixo o arquivo HEX do Rx:

RX_31_89C52_HEX

Adicionalmente, em 09-02-2016, foi feita esta versão com opção de compilar para modo pulso ou retenção por canal individual, ajustando o arquivo asm e depois recompilando (ASEM-51). Na pasta abaixo você encontrará 3 arquivos ‘.hex’ pronto para gravar o AT89S52. Em uma delas, temos todos os canais ajustados para ‘modo pulso’. Em outra, temos todos os canais em ‘modo retenção’ e a última temos 8 canais em modo ‘pulso’ e o restante em ‘modo retenção’. Outras possíveis opções poderão ser feita pelo próprio hobista:

RX_31_89C52_PR_FILES

Em 02/04/2016 foi feita uma atualização no código do receptor. Foi eliminado um ‘bug’ que ao ligar a alimentação, necessitava inicialmente de 2 apertos no botão do transmissor para acionar uma determinada saída programada para modo retenção. Após o que o sistema trabalhava normalmente. Foi também acrescentado a opção para o usuário alterar as saídas para modo normal ou invertido. Segue pasta com este arquivo atualizado:

RX_31_89C52_PR_V2_FILES

Data sheet:
AT89s52

Curiosidades:
O universo – cheio de surprêsas
O homem que desvendou os sêgredos do sistema solar
Jockeys ‘robos’
Controle remoto e o efeito estufa
Trauma de um atentado terrorista
Ouvindo sons do espaço
Porque as estrelas são cintilantes?

Outros assuntos:
Quando um dos cônjuges tem nessidades especiais
Como ser um bom pai
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!!!

37 comments on “CONTROLE REMOTO P/31 CANAIS (PULSO OU RETENÇÃO) USANDO AT89S52

  1. OLA CLaudio
    EN EL CONTROL REMOTO DE 31 CANALES
    E CAMBIADO CONDENSADORES EM EL PIN 9
    como tu me as dicho empeze con 470n hasta 1n
    PERO EL PINO 9 NO RESPONDE SIGE Haciendo lomismo
    PROBANDO CONDENSADOR DE 10Mf en la base del transistor tampoco he solucionada nada
    Espero si tú me puedes dar alguna solución para que no se atiben los relees
    Ala entrada de tensión esos milisegundos cuando se da tensión y los pulsadores no
    funcionan al primer pulso funcionan al segundo pulso
    SALUDOS Manuel Pereira

    1. Olá Manuel!
      Assim que tiver um tempinho irei montar o circuito para testar e fazer a escolha da solução mais fácil dentre as várias possibilidades. Aguarde por favor.
      Cláudio

    2. Olá Manuel!
      Fiz a montagem na placa experimental e confirmei a questão de necessitar 2 apertos de botão para acionar saída em modo retenção, logo após ligar a alimentação. Fiz alteração no arquivo ASM que corrigiu esta deficiência. Quanto a acionar as saídas momentaneamente (alguns milissegundos) na ocasião de ligar a alimentação, tentei o seguinte:
      1)Inverter as saídas para acionar com ‘0’ usando transistores PNP. Imaginei que as saída ficam ‘1’ no reset, que o mesmo se aplicaria ao alimentar inicialmente o circuito. Parecia ter resolvido, mas após alguns testes, percebi que os Ports podem assumir qualquer estado randomicamente depois de desligado a alimentação por um determinado tempo. Esporadicamente começou a dar pequenas piscadas nos leds, na situação de religar a alimentação. Cheguei a conclusão que não dá para mudar isto no programa, por ser um condição ‘intrínseca’ do microcontrolador AT89S52.
      2) Manter as saídas normais e colocar um delay na alimentação dos reles (de alguns milissegundos maior que os pulsos do AT89S52 geram ao ligar a alimentação).
      Postei junto ao artigo original, uma pasta com o arquivo ASM atualizado e sugestão no esquema de como fazer o delay usando rele ou tirístor.
      Verifique se atende a sua necessidade. Se não terá que partir para alguma outra opção de esquema mais refinado, talvez buscando nos vários sites sobre a matéria na internet.
      Cláudio

  2. Hola Claudio
    en simulado el control remoto de 31 canales con
    Retención loe simulado y cuando lo conectas a alimentación
    Se conectan todas las salidas unos milisegundos sin presionar
    Ningún pulsador.
    Este era para conectar 16 focos pero en el emisor que me quedara
    Un led encendido por cada pulsador
    Luego mi pregunta es si se podía hacer con el 16f877A
    Que tiene los mismos puertos
    Este tipo de integrado se encuentra mucho más fácil
    Tapido perdón por no escribir en to idioma
    Gracias por tu colaboración
    Muchos saludos Manuel Pereira

    1. Olá Manuel!
      Realmente, durante o reset do microcontrolador, as saídas ficam em nível alto, por um tempo que pode ser alterado, escolhendo a rede RC no pino 9 do microcontrolador. Um capacitor menor reduzira este tempo de forma que o rele não seja acionado e não cause transtornos. Experimente valores como 1 uF, depois 470 nF, até valores como 10 nF. Quanto encontrar o valor ideal, substitua no circuito.
      Outra coisa que poderia ajudar e colocar um capacitor de 10uF na base de cada transistor drive. Isto gerará um pequeno atraso no acionamento do rele na ocasião do reset.
      Quanto a fazer com ’16f877a’ irei colocar no caderninho de futuros projetos.
      Cláudio

  3. Manuel p
    Clandio hola
    El control remoro de 31 canales seria posible
    que fuera con retencion en la salida del receptor

    CONTROLE REMOTO P/31 CANAIS (ON/OFF) USANDO AT89S52

    saludos Manuel p

    1. Manuel Hola!
      Lo siento, pero yo no tengo esa montaje modo de retención. Por el momento no puedo hacer este cambio, tal vez en el futuro.
      Cláudio

    2. Olá Manuel!
      Segue uma versão de controle remoto de 31 canais, postada junto ao artigo original, com opção para retenção e pulso (ajuste individual por canal, no asm). Como o AT89S52 não dispõe de EEprom interna, não tem como salvar situação ao desligar a alimentação. Neste caso, uma pilha no VCC poderá ser a solução.
      Cláudio

  4. Olá Cladio, Boa Noite, Eu Baixei e Montei Esse Controle Remoto de 31 Canais, Mas Não Funcionou, O que Poderia Ter Dado de Errado.
    Eu Comprei Um Gravador de Atmel para Gravar( AT 89S e AT 90S ) ETC..
    Ele Grava e Lê Mas Num Funciona, Poderia Dar Uma Sugestão??
    Obrigado, ATT 😕

    1. Olá Bagini!
      Confira todas as ligações em sua montagem antes de mais nada. Certifique de que não tenha invertido os hex, colocando no receptor um chip gravado para tx e vice-versa. Verifique que os cristais estejam colocados e que sejam conforme especificado no circuito. Verifique se a alimentação está presente no vcc no pino do at89s52. Se tudo estiver ok, verifique se o problema é no tx ou no Rx.
      Para isto, coloque um osciloscópio na saída do receptor de 433mhz e aperte o tx para ver se tem um trem de pulsos. Caso não tenha osciloscópio poderá usar um disco piezo elétrico ligado ao gnd e o outro terminal ligando na saída do receptor de 433mhz. Ao apertar o tx, se estiver recebendo ele, se ouvirá um ruido característico do trem de pulsos. Caso não receba, verifique as frequências dos tx e rx que tem que ser iguais. Depois irá verificar o tx, minuciosamente, quanto as ligações, as tensões de vcc e ligações ao gnd. Tente recarregar o hex, pois pode ter dado algum problema na gravação. Na dúvida, use outro at89s52 ou grave algum programa do tipo ‘piscaled’ para testar o chip.
      Caso tenha sinal do tx no receptor, então tente verificar as ligações minuciosamente do receptor. Verifique o vcc e gnd. Recarregue o arquivo hex e se for o caso, use outro at89s52. Coloque um led na saída de um canal para monitorar se o sinal está sendo processado pelo chip, e se estiver acendendo ao apertar o tx, verifique as ligações para os reles.
      O ponto chave está em determinar onde está o problema: esta no tx ou rx.
      Estas são as dicas que no momento posso dar.
      Cláudio

  5. Boa Noite Larios.

    gostei muito deste projeto apresentado, no entanto tenho interesse de utilizar em um projeto que tenho em mente, tipo automação residencial.
    mas preciso de uma ajuda, o que preciso é o seguinte, o receptor ao receber um determinado código ele deverá iniciar um temporizador ao qual liga e desliga um dispositivo com um tempo já pré programado no microcontrolador. no entanto não consegui implementar o temporizador juntamente com a rotina de verificação de um novo sinal do transmissor. se puder me ajudar estarei muito grato.

    1. Olá Julio! Para conseguir temporizações precisas, deverá fazer uso dos timers do microcontrolador ou alguma rotina sequencial, que não amarre o programa esperando acabar o tempo. Poderia compartilhar sua ideia conosco?
      Claudio

      1. Primeiramente obrigado pelo retorno, vamos lá. estou querendo montar um sistema de automação residencial ao qual eu consiga controlar dispositivos como luz, tomadas, abertura de portas entre outros. O controle poderá ser através de um controle remoto e um acesso web onde o server web irá enviar as mesmas informações do controle. a questão do temporizador será para o seguinte proposito, em caso de ausência, podemos enviar um código (EX data 00001000 end 11001100) para um recepto com endereço 11001100 onde é responsável pelos dispositivos de um determinado comodo da casa, e este código será utilizado para acender a lampada por 30 minutos e manter apagada por 1 hora. ao enviar este código a lampada ficará nesta situação até receber outro código cancelando esta operação. contudo, este outro código pode ser enviado a qualquer momento, neste caso o microcontrolador deverá estar efetuando a leitura para um possível recebimento de um novo código e ao mesmo tempo administrando o timer para ligar e desligar a lampada.

        1. Olá Julio!
          Obrigado por compartilhar conosco suas ideias. Visto que você vai usar WEB, não seria interessante fazer tudo no PC , inclusive o controle remoto?
          Cláudio

          1. Boa noite Claudio. eu Imaginei isso mas não gostaria de ficar dependente do PC para a realização das tarefas, pois qualquer falha no PC, todo o resto para.
            não tenho nenhuma estrutura montada ainda para a interface WEB, mas o interesse seria somente no envio dos códigos estando fora do ambiente, dentro do ambiente a preferencia é utilizar um controle remoto personalizado.

          2. Olá Claudio, você possui alguma ideia de como posso implementar um temporizador neste no código do receptor?

          3. Claudio, desculpe a demora em responder, tive uns problemas no trabalho. sobre o o projeto não serão vários temporizadores, e sim dois temporizadores ao qual um deles liga e outro desliga a mudança das portas será de acordo com parte do código enviado. ex o codigo 11001100, podemos relacionar dois ultimos bit no caso 11 como ativador dos temporizadores, e os 6 primeiros bits serão as portas que serão ativadas por estes temporizadores.

          4. Olá Julio! Apesar de você dizer que terá 2 temporizadores, também diz que ‘6 primeiros bits serão as portas que serão ativadas por estes temporizadores’ ou seja, todas as saídas serão temporizadas. Para fazer isto terá que fazer um temporizador para cada saída ou um sistema de tempo real ‘ RTC ‘. Quando recebesse um comando para ligar e temporizar uma saída, capturasse o valor do relógio em variáveis especificas para esta saída e comparasse com o valor desejado de tempo (uma constante). Ao atingir o valor desligaria. Mas você cita também sobre um dos temporizadores que ‘ um deles liga’. Exigiria outro tanto de variáveis para esta função também. Ainda não está muito claro como deverá operar o sistema para mim. Parece que você quer enviar um comando via internet para o microcontrolador e ao receber lerá qual porta deve acionar e temporizará para ligar se por exemplo ’11’ no bit 6,7 ou temporizara para desligar se ’10’. Mas o tempo será fixo em ambos os casos? Percebe-se um aumento da complexidade do programa, tomando muitíssimo tempo para ser feito somente em Assembly. Sugiro que migre para um código ‘c’ e opte por modelos mais novos de microcontroladores, com mais ‘ram’ e facilidade de acesso a ela, para facilitar sua vida.
            Cláudio

          5. Boa Tarde Claudio. Achei muito interessante o projeto apresentado ao qual o próprio microcontrolador receba e interprete o sinal de um radio de 443 MHZ e gostaria de utiliza-lo em meu projeto domestico. pretendo utilizar esta linha de microcontrolador pois tenho um estoque de mais de 200 unidades, e não gostaria de descartar estes componentes, vou tentar trabalhar em alguma forma de colocar um temporizador em paralelo com a verificação de recepção de sinal, sei que não será um trabalho fácil mas vou correr atras. a intenção é que, ao receber um código x as portas x.1 e x.2 serão setadas em 1 e o timer 1 inicia a contagem, depois de finalizado as portas x.1 e x.2 serão zeradas e timer 2 inicia a contagem até finalizar e voltar ao loop setando as portas x.1 e x.2 e iniciando o timer 1. tudo isso deve ocorrer e a verificação de um novo sinal não pode ser interrompido.

            Agradeço sua atenção aplicado neste assunto.

Comments are closed.

Back To Top