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

0

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

0

37 comments

  1. 0

    Ola Claudio
    parece ser que con el 16f877 no se puede hacer si se puede hacer
    Con el AT89s52 a mi medaría igual yo ya tenía echo el PCB para el
    AT89c52 esto es para un alumbrado industrial con 22 encendidas
    Y se necesita visualización en el tablero un led por cada pulsador
    Si esto se puede hacer yo te estaría muy agradecido Claudo
    Pregunta es que necesitaría que en el emisor cuando pulso un botón
    Se me quedara encendido un led y cuando vuelvo a pulsar se apague
    Combinado con las salidas del recetor esto sería posible lo haría con
    Muchas gracia
    Saludos Manuel

    1. 0

      Olá Manuel!
      O problema ocorre tanto com o16f877a como no AT89S52. O artigo publicado não faz uso de led para indicar acionamento. Como disse antes, teria que inverter toda a lógica de funcionamento, fazendo o transmissor ser responsável pela decisão de pulso ou retenção. Visto que todos os pinos já foram usados com as chaves, teria que implementar uma lógica de compartilhamento de cada pino, ora sendo saída para led ora como entrada do interruptor. Haveria necessidade de mais componentes auxiliares para esta lógica. Portanto, sua placa de PCB não poderia ser usada neste novo arranjo.
      Como disse, não disponho de tempo para este projeto agora, talvez futuramente, pois ele é bem mais complicado, e terei que pensar em possíveis soluções para a lógica a ser usada, se é que conseguirei.

      Claudio

  2. 0

    Ola Claudio
    Estoy probando el emisor y receptor de 31 canal
    Y por el momento funciona bastante bien mi
    Pregunta es que necesitaría que en el emisor cuando pulso un botón
    Seme quedara encendido un led y cuando vuelvo a pulsar se apague
    Combinado con las salidas del el recetor esto seria posible
    gracia
    Saludos Claudio

    1. 0

      Olá Manuel!
      Não saberia no momento te dizer se é possível ou não. Parece ser possível. Mas teria que dar uma estudada em como poderia fazer isto. Seria usando o at89s52?
      Cláudio

  3. 0

    Hola Claudio
    Yo solo te pedía si me podáis cambiar el ,P3, como retención
    Porque esta como pulso y el ,P0, como pulso con el ULN 2803 a mí me funciona bien
    Sin necesidad de retardo con el retardo tienes que hace uno por cada salida y con el ULN2803
    Tengo 8 relés de salida sin necesidad de retardo ni transistores yo lo estoy probando y me funciona bien con UlN2803
    Yo el problema solo lo tengo en el ,P0 , si tu miras el ,P0, no funciona igual que ;P1; P2; P3
    Yo uso la versión normal creo que en el anterior nome esplique bien
    Saludos Manuel p

  4. 0

    Manuel Pereira
    Apreciable Claudio
    En el control remoto de 31 canales e probado
    Tu actualización el retardo no funciona al p0 es el que tiene el
    Problema del pulso cundo se conecta el p1 p2 y p3 funcionan choretamente
    Sin necesidad de retardo colocando el ULN 2803 funciona bien a mí me interesaría que el p1 p2 y p3 fueran con retención
    Y el p0 pulsos que es el que funciona mas mal ahora el p3 es pulso se pudiera
    Cambiar por p0
    Muchísimas gracias saludos Manuel Pereira

    1. 0

      Olá Manuel!
      O retardo funciona corretamente seguindo o esquema original com reles. Se você está usando outra opção talvez realmente não funcione. Você falou que usará o ULN2803, com p1, p2,p3 como retenção e p0 como pulso. E qual versão você vai usar? Normal ou a invertida?
      Cláudio

  5. 0

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

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

      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

  6. 0

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

      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

  7. 0

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

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

      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

  8. 0

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

      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

  9. 0

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

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

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

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

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

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

          3. 0

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

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

            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.

    1. 0

      olá José! O código é totalmente diferente nesta família de microcontroladores. Praticamente, teria que fazer tudo de novo.
      Cláudio

    1. 0

      Olá José! Esta família de microcontroladores já é mais antiga, sendo de clock um pouco mais lento para algumas aplicações. Suas saídas não fornecem muita corrente, necessitando de drives para isto. Mas são baratos, facéis de trabalhar, e tem compiladores gratuitos. Cada linha tem suas vantagens e desvantagens. Você tem que ver o que ‘cabe’ melhor em termos de custo/benefício, bem como outros fatores. Não tenho muita coisa com eles, se não o já que foi postado.
      Claudio

  10. 0

    ola amigo estou começando alguns projetos ficz o que tinha me falado , mas nem sei o que fazer , estava usando o flowcode , nãosei se vc conhece é uma ferramenta para programadores meios preguisosos , pois usa fluxograma algumas coisa ficam simples de fazer me ajude ai com o projeto base

    1. 0

      Olá Liliano! Não uso esta ferramenta. Procure blogs de pessoas que a usam, pois fica mais fácil você tirar suas duvidas.
      Claudio

  11. 0

    😆 Olá claudio! VC superou mais uma vez,Ótimo projeto p/89s52.Pode ser usado em varias aplicações,Obrigado pelo incentivo na area da programação,em 8051.

  12. 0

    amigo so uma ideia estava eu com meus consertos , tentando arrumar um amplificador que havia torrado toda saida isso porque uma pessoa ligou um caixa com impedância diferente da suportada , fiquei imaginando teria como fazer um sistem que medise a impedância do altofalante e bloqueace atraves de um relê a saida do amplificador tipo usando o sistema analogico do pic ele fizesse a leitura , pois ja vi aqui postado sistema de varias chaves com um só fio ai pensei vc usa a variação precisa de tensão , sabendo disso imaginei usar um pic que pudesse ler um impedância de 2 omhs , 4 e 8 que são os mais usados e a possibilidade de unir as de 2 e 4 e atingir a de 6 omhs , e o sistema só acionaria a saida quando a impedancia estivesse correta , isso tornaria uma otima proteção contra possivel curto em altofalantes de queimar o amplificador é claro que é só mais uma ideia estou começando a ler sobre asm e pensei em como começar este projeto tipo defino um pic 12F675 a principio teria que definir o oscilador interno , as portas de entrada e saida seria isso ?

    1. 0

      Olá Liliano! Vejo que você quer pegar ‘firme’ na programação! A impedância é algo interessante. Ela é dependente da frequência de trabalho e varia seu valor conforme varia esta frequência. Podemos sim, medir a resistência ohmica da bobina dos altofalantes e com esta informação decidir, por ex. se um rele será acionado para liga-los a saída de um amplificador. Para construir um ‘ohmimetro’ com pic, temos duas possibilidades: por corrente constante e por divisor de tensão. No de corrente constante, uma fonte de corrente fixa alimenta o resistor a ser medido e em seguida lemos a tensão em seus extremos. Na versão ‘divisor de tensão’, usamos um valor de resistor conhecido em serie com o resistor a se medir. Também lemos a tensão em seus extremos e com ajuda de uma fórmula matemática, obtemos o valor do resistor desconhecido. Para começar um projeto, copie o cabeçalho de um projeto pronto e comece alterando o modelo, e ajuste a palavra de configuração para o tipo de oscilador, watchdog ou não, etc. Depois defina o que será entrada e o que será saida nos registradores ‘tris x’ da vida. Defina a situação inicial de registradores e portas. Dai, comece a usar sua imaginação!!!
      Claudio

Comments are closed.