RECEPTOR GENERICO PARA CONTROLES REMOTOS (CHAVEIRINHOS) COM HT6P20B USANDO AT89C2051

Gostaria de usar seu AT89C2051 , juntamente com controle remotos comerciais que usam o HT6P20B, para controlar suas aplicações remotas? Seu preço é bem ‘nice’ para nós ‘pobres hobistas’. Que tal uma placa genérica, e voce liga o que desejar na saida?

A idéia é usar o mesmo esquema do ‘RECEPTOR GENERICO COM HCS’, já publicada , mas usando um novo código Hex especifico para decodificar os sinais recebidos de um HT6P20B. Como o AT89C2051 não tem EEprom interna, o jeito é usar uma externa. Mas tem o lado bom: em uma aplicação com muitos controles salvos, se der problema na placa, pode-se trocar a EEprom para a placa nova, salvando todos os controles codificados. Isto é bom para quem faz manutenção no sistema (ex. portão de um predio, alarme residencia com ‘n’ sensores remotos,etc’). Optei pela 24C02, suficiente para a maioria das aplicações. Mas, se desejar, poderá alterar o codigo ASM para uma de maior capacidade ou mesmo, com outra comunicação (como as spi 93cxx). Nesta placa , para este codigo Hex, só serão usadas as saidas 12 e 13 do AT89C2051. As saidas dos pinos 14 e 15 não serão usados, não necessitando montar os led’ 3 e 4. A razão é que o HT6P20B somente comanda 2 botões. Nesta placa genérica, poderão ser gravados até 82 controles/sensores remotos. Quando a memória estiver cheia, não será permitida o aprendizado de novos controles/sensores. O sotfware faz com que o led pisque de forma rapida por 10 segundos para avisar que chegou o limite de aprendizado. Somente se for zerada (apagada) a EEprom, é que poderemos novamente começar a gravar. Como novidade, ao invés de programar cada botão, resolvi ‘zerar’ os bits correspondentes aos 2 botões. Assim, ‘aprendendo’ um botão, irá aprender o outro automaticamente (ou seja, um endereço para 2 botões). A rotina de recepção do sinal de RF na entrada ‘sin’ no pino 3 é bem simples e não usa timer: Em um loop, a cada 50 microsegundos é lido esta entrada , se ela é 1 ou 0. Estes são armazenado em LC(0) e HC(1). Subtraindo o valor um do outro, poderemos saber se o bit recebido foi 1 ou 0 ( lembrando que bit ‘0’ igual HC maior que LC e ‘1’ igual a HC menor que LC). Conforme o datasheet do HT6P20B, cada unidade de bit transmitido é composto de 3 partes (ou 3 periodos iguais denominados ‘y’). Sendo o primeiro = 0, o segundo= 0, o terceiro=1 temos um bit ‘1’ recebido. Se o primeiro for = 0, o segundo= 1, o terceiro = 1 temos um ‘0’ recebido. O periodo entre transmissões e composto de 23y (ou 23 periodos de tempo igual a ‘y’) em nivel baixo. Após isto, recebemos um ‘y’ em nivel ‘1’ dando o sinal que podemos iniciar a recepção. Ao termino dos bits utéis, é enviado um ‘anticode’ de ‘1010’ (que geralmente desprezamos). São necessárias 2 recepções para se comparar e confirmar os bytes recebidos, em virtude de possivéis interferencias no meio . Isto dá mais segurança ao sistema. Nunca é demais lembrar que o receptor de RF escolhido no receptor tem que ser da mesma frequencia do controle remoto/sensor sem fio escolhido. É um erro clássico esquecer disto, pois ainda existem muitos controles em 330Mhz (ou proximo disto), sendo que os novos são de 433Mhz.
Quanto ao aprendizado é simples: aperte um botão do controle ou acione os sensor remoto. Imediatamente aperte o botão ‘learn’. Se piscar uma vez, é porque ocorreu o aprendizado. Os leds correspondente na saida irão se acender confirmando o aprendizado. Já para apagar toda a memória, aperte o botão ‘learn’ por mais de 10 seg., o led ‘learn’ irá piscar por 3 vezes, apagando todos os controles. Necessita em seguida , reaprender todos os controles que serão usados. Alguns sensores ligam os 2 led aos serem ativados. As saidas dos led’s poderão ser usadas para acionar transistores que poderão ligar rele, lampadas, fotoacopladores, triac’s,etc. Mas dai é com voce…..!!!

Para obter o esquema click aqui

Segue o código ASM:

rx_gen_ht6p_v2P1_asm

Segue o código HEX:

rx_gen_ht6p_v2P1_hex

Obs. A montagem foi feita em placa de protoboard e não tenho ainda sugestão de placa.

Até o próximo artigo!!!

17 comments on “RECEPTOR GENERICO PARA CONTROLES REMOTOS (CHAVEIRINHOS) COM HT6P20B USANDO AT89C2051

  1. Olá Sandro! Deixa ver se eu entendi bem: Voce deseja receber o sinal do HT6p, mais o sinal do Hcs , no mesmo receptor, é isto? Com ‘sem ter de programar’, voce dá a entender que deseja usar a parte fixa da transmissão, é isto mesmo?

  2. Olá Cladio.

    Cladio,nesse projeto a possibilidade de encrementar,o cis; HCS200 …301,sem ter que reprogramar o HCS.

    Aguardo sua resposta…

  3. Olá Cladio.Obrigado pelo Parabéns,mas o merito é todo
    seu.Eu apenas tentei expressar os erros,fiz as mudanças que você postou no asm e ficou Ótimo.Agora vou tentar terminar o hcs prog.Quero te agradecer pela ajuda,Valeu mesmo.

  4. Claudio tudo bom,já fiz tudo o que você falou,não deu certo,Resolvi fazer de outra maneira,mas como eu não
    endendo muito do codigo asm.Fiz o seguinte,Criei um novo botão p/ apagar coloquei na rotina;TAPAGAMENTO:
    e retirei o tempo; DJNZ Z2,L1H, e compilei o arquivo
    gravei no at90c2051,e testei e funcionou tudo.
    Eu entendi que o tempo(MOV Z2,#TGR),não esta funcionando,mas não sei como corrigir.Com dois botões,1 p/aprender,2 p/apagar.testei as eeprom 24c02,24c04, estão gravando e apagando tudo ok.

    Claudio,Obrigado pela Atenção…

    1. Sandro: Parabéns pela sua solução criativa!!!
      Que canseira, não! Mas, identifiquei o problema,com sua ajuda. Encontrei uma falha no programa asm, que, se o receptor de 433mhz estiver gerando ruidos espurios, ou outras transmssões interferentes, o programa tentava ler o sinal e ia para o inicio, recarregando o contador ‘z1 e z2’. Conclusão: ‘Nunca’ nesta situação apagaria a memória. A mudança no programa envolve recarregar este contadores ‘somente’ quando o botão ‘learn’ não estiver apertado. Assim, mesmo com interferencias, irá apagar completamente a memória. Creio que a situação de ruidos deve existir aonde voce está. Caso queirar testar esta situação, basta colocar um fone de ouvido de cristal na saida do rx 433mhz. Os arquivos postados agora já foram corrigidos. Quero pedir desculpas pelo inconveniente e agradecer pela ajuda no desenvolvimento.
      Claudio

  5. Sandro! Fiz o seguinte: Peguei esquema e arquivo hex do site e coloquei no pen drive. Fui até a bancada e abri o pen drive no esquema, e com um protoboard, montei peça por peça as ligações. Depois carreguei o arquivo hex em um at89c2051. Coloquei uma memória virgem (não programada) 24c02. Ao tentar gravar um controle, o led ‘learn’ pisca por mais de 10 segundos,indicando memória cheia. Isto ocorre porque o endereço ’00’ da eeprom é um ponteiro da quantidade de controles gravados. E na virgem, o endereço ’00’ está com ‘ff’, muito além da capacidade maxima de controles. Assim, ao colocar uma eeprom virgem tem que ser ‘apagada’ por apertar o botão ‘learn’ por mais de 10 segundos. Após o apagamento, será colocado automaticamente no endereço ’00’ o valor ’00′(nenhum controle). Após o que, basta, de forma normal, ‘aprender ‘ os controles. Quando voce colocou a memória virgem no hcs prog, ele também tem um ponteiro no endereço zero, que incrementa a cada nova gravação. Por isto deu certo. Na montagem no protoboard que fiz HOJE , não tive problemas nenhum com apagamento ou aprendizado. Testei com atmel 24c02 smd, st 24c04 e até com 2 atmel 24c08a. Todas operaram NORMALMENTE (após apagamento inicial). Pensei se a rotina de tempo talvez estivesse ‘muito justa’. Coloquei cristal de 20 mhz para testar se daria problemas. Caso estivesse no limite não rodaria. Mas,rodou sem problemas. Assim, chego a conclusão que não é problema de software, mas o hardware de sua montagem. Outra hipotese, seria uma eeprom com alguma diferença de fabricante e funcionalidade
    extra nos seus pinos. Por favor, detalhe o fabricante da eeprom com todas as ‘letrinhas’ impressas. Explique se o led ‘learn’ pisca 3 vezes após o apagamento ou se isto não acontece, mesmo apertando por muito tempo? Ao aprender um controle, o led ‘learn’ pisca uma vez? Ao colocar memória virgem, fica piscando rapido por mais de 10 segundos? Aguardo resposta…..

Comments are closed.

Back To Top