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

0

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

0

17 comments

  1. 0

    Prezado Claudio.sim é isto mesmo? os dois sinais no mesmo
    receptor,usando a parte fixa da transmissão.
    ‘sem ter de programar o Hcs’.
    Obrigado pela atenção, Claudio.

    1. 0

      Entendi Sandro!!!
      Fazer funcionar uma rotina para 2 tipos não é algo fácil. Assim que tiver uma rotina que funcione apropriadamente, irei publica-la.
      Grato (pela paciência), Cláudio

  2. 0

    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?

  3. 0

    Olá Cladio.

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

    Aguardo sua resposta…

  4. 0

    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.

  5. 0

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

      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

  6. 0

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

  7. 0

    Olá Sandro! Situação interessante! Por favor, preciso saber qual é a EEprom que voce está usando, modelo,fabricante, todas as ‘letrinhas’ escritas nela. Acredito que voce está usando o esquema apontado por esta pagina do blog, com o pino 6 do at89c2051 ao botão ‘learn’ e pino 7 ao led ‘learn’, certo? Algumas EEprom podem ter tempo de gravação diferentes. Dependendo do fabricante,os pinos podem ter funcionalidades adicionais que podem estar atrapalhando o funcionamento. Também, a titulo de teste, coloque um cristal de por.ex 6mhz no lugar do de 12 mhz e veja se ‘apaga’ apertando o botão ‘learn’ por uns 20 segundos. Tente isto, por favor. (A propósito, voce conseguiu fazer funcionar o hcs_prog programador de hcs200..301 com at89s52?) Também, quantos chaveirinhos diferentes voce consegue aprender? Mais de um? Ou somente um e não grava mais? Tente usar uma 24c04 para teste.
    Claudio

  8. 0

    Cladio,

    Mudei o ci p/ at89c2051,ficou assim,se colocar a eeprom nova,não grava nenhum chaveiro,mas se colocar
    a eeprom, no HCS_PROG PROGRAMADOR,ligar e desligar e depois devolver ao cicuito correto,ele grava o chaveiros,mas não apaga.Chequei as pinagens,e esta
    de acordo ao que.Voce fez.Já regravei o at89c2051,
    mas não apaga o eeprom.

  9. 0

    Olá Claudio.
    Claudio,vc citou.Carreguei a eeprom 24c02 com valores aleatórios,a eeprom 24c02 esta sendo gravada antes de
    montar o circuito,Eu não entendi,estou colocando a eeprom 24c02 sem programar,e estou usando o chip at89s52,a onde estou errando.

    Obrigado pela atenção.

    1. 0

      Sandro,

      Basicamente o que foi dito é que colocou se na memória valores quaisquer(aletórios) para teste. Estes dados foram inseridos nesta memória, fora do circuito do projeto em questão.
      Após isto, foi-se adicionada a memória no circuito deste projeto e após o acionamento do botão “learn” o conteúdo que havia sido escrito na memória foi apagado.

      :mrgreen: :mrgreen:

    2. 0

      Olá Sandro
      Como Tiago explicou, usei a winprog2000 para colocar valores quaisquer na memória,tirando ela do soquete e fazendo isto externamente. Depois, coloquei ela no circuito e apertei por mais de 10 seg o botão ‘learn’ , gerando o apagamento. Tirei a memória do circuito e usei o winprog2000 para ler ela. Estava realmente com todos os endereços com ‘ff’ ou seja, apagou tudo. Voce disse que está usando o At89s52. O circuito original usa At89c2051. E foi testado com este. Voce acertou corretamente as diferenças de pinagens? Creio que com pinagens corretas, deveria funcionar também.
      Claudio

  10. 0

    Olá Cladio,parabéns,muito bom,montei o circuito estou
    testando,ficou legal,mas a EEprom 24C02 não apaga.
    Já troquei a EEprom mesmo assim não apaga,o resto está correto.

    Valeu mesmo…

    1. 0

      Prezado Sandro

      Vou pegar o arquivo hex e esquema do site para montar aqui em protoboard e ver se tem ‘gato no telhado’. Depois te dou um retorno.
      Claudio

      1. 0

        Caro Sandro
        Testei em protoboard o esquema com o codigo hex postado. Carreguei a eeprom 24c02 com valores aleatórios e depois a inseri no circuito. Apertei ‘learn’ por mais que 10 segundos e apagou toda a memória direitinho. Será que o pino 7 da sua eeprom esta aterrado. Se ficar flutuando (não ligado em nada) pode ocorrer de ler mas, as vezes não grava, portanto ,pode atrapalhar o apagamento.Se tiver, tenta recarregar o arquivo hex de novo, após um apagamento.
        Claudio

  11. 0

    Interessante esse circuito Claudio , esta mais perto do que estou buscando seguirei seguindo seu blog para novas idéias….Valeu mesmo..

Comments are closed.