NOVO RECEPTOR GENERICO COM PIC 16F628A PARA HT6P20B E TAMBÉM HCS200…301 (SEM HOPPING CODE) – COM OPÇÃO DE APAGAMENTO INDIVIDUAL DE CONTROLES E LCD

Gostaria de montar um receptor para controle remoto, cuja aplicação necessite que se aprenda centenas deles? Apresento-lhes o BIG_GEN_PIC628_MIX_E…

Veja o esquema abaixo:

Este projeto foi baseado no BIG_GEN_6P20B51E, adaptando de AT89c2051 para o PIC16F628A, muito usado pelos hobistas.
O visor LCD foi essencial para podermos acessar posições de memória, visando apagar os controles (chaveirinhos) de forma individual. Esta aplicação permite usar chaveirinhos com circuito integrado do tipo Hcs200…301 ou Ht6p20b, independente do fabricante (usa apenas a parte fixa do código, portanto, não é Roller code).

Este projeto, BIG_GEN_PIC628_MIX_E é uma placa generica com 2 saidas para uso nos pinos 6 e 7 do PIC16F628A. Voce poderá ligar sua aplicação nestes pinos para usa-lo como controlador remoto, acionamento de portão automático, iluminação, etc. Permite o uso de 254 controles (máximo). Estes ficam com seus endereços armazenados na EEprom externa 24c08. Em caso de pane, a EEprom poderá ser usada em outra placa igual, sem perder a programação dos controles cadastrados. Quando o numero de controles chegar a 254, não haverá mais aprendizado, e uma mensagem aparecerá no lcd : ‘limite max mem’ . Se algum controle for apagado , este espaço na memória será usado para alocar um novo controle somente quando tiver atingido o limite maximo de controles na memória. Para controlar a placa, temos 4 botões, sendo: ‘learn’ para aprendizado do controle e para apagamento, botão ‘1’ para incremento rapido do contador de numero de controle, botão ‘2’ para incremento lento e ‘reset’ para cancelar operações e reiniciar.

Ao ligar o BIG_GEN, aparecerá no visor do lcd o nome da placa e em seguida aparecerá:

‘AGUARDANDO TX..!’.

Ficará com esta mensagem até que um controle seja acionado, ou um ‘reset’. Se um controle for acionado e este não estiver programado (aprendido), aparecerá a mensagem:

‘RECEBENDO TX N.: TX DESCONHECIDO’.

Para programar(aprender) este controle (chaveirinho), basta apertar qualquer um dos seus botões e manter apertado. Em seguida, aperte o botão ‘LEARN’ por apenas 1 segundo, que irá aparecer a mensagem:

‘OK! TX APRENDIDO’

Acione novamente o controle (chaveirinho) e irá aparecer a mensagem:

‘RECEBENDO TX N.: XXX’ (Sendo XXX o numero do controle recebido)

Este número tem que ser marcado no controle e registrado em uma lista de usuarios/controles.
Esta mensagem ficará no lcd até que uma nova transmissão ocorra, ou se for feita operação de apagamento ou ainda, um ‘reset’.
Como funciona a operação de apagamento?
De duas formas: a forma geral (apagar toda a memória) e a forma individual (apagar um único controle).
Para entrar em ‘modo de apagamento’ faça o seguinte:

1) APAGAMENTO INDIVIDUAL:
Aperte o botão ‘learn’ por mais de 10 segundos, ou até que apareça a mensagem:

‘REMOVER CONTROLE’

Logo em seguida, o lcd irá mostrar na linha superior:

‘APAGAR UNICO TX?’

E na linha inferior:

‘DIG: 1=SIM 2=NÃO’

Se o botão ‘1’ for apertado, aparecerá a mensagem na linha superior:

‘ESCOLHA O N. DO TX’

Depois de um tempo pequeno, será limpo o visor e aparecerá a mensagem na linha superior:

‘1=^R 2= L=E R=C’

Isto significa:
Aperte botão ‘1’ para incremento rapido do contador com numero do controle
Aperte botão ‘2’ para incremento lento do contador com numero do controle
Aperte botão ‘L’ (LEARN) para efetivar o apagamento do número escolhido (mostrado na linha 2 do lcd).
Aperte botão ‘R’ (RESET) para cancelar operação ou espere 30 segundos sem acionar botões.

Na linha 2 aparecerá os valores de 1 a 254, que pode ser alterado com botão ‘1’ ou ‘2’(modo lento/rapido).
Após escolher o numero do controle a apagar, aperte o botão ‘LEARN’. Após isto, aparecerá a mensagem:

‘APAGAMENTO OK!’

Isto confirma que o número do controle escolhido foi devidamente apagado. Após esta etapa, o programa vai para o inicio, apresentando o nome da placa e a mensagem de ‘aguardando tx!’.

2) APAGAMENTO GERAL:
Aperte o botão ‘learn’ por mais de 10 segundos, ou até que apareça a mensagem:

‘REMOVER CONTROLE’

Logo em seguida, o lcd irá mostrar na linha superior:

‘APAGAR UNICO TX?’

E na linha inferior:

‘DIG: 1=SIM 2=NÃO’

Se o botão ‘2’ for apertado, aparecerá a mensagem na linha superior:

‘APAGAR TODOS TX?’

E na linha 2 aparecerá as opções:

‘DIG: 1=SIM 2=NÃO ‘

Aperte botão ‘1’(sim) para apagar geral. Se apertar botão ‘2’(não) irá cancelar a operação com a mensagem:

‘APAG. CANCELADO!’

Após apertar botão ‘1’(sim), aparecerá mensagem de confirmação:

‘CONFIRME: TODOS!’

Aperte botão ‘1’(sim) para confirmar e iniciar o apagamento total da memória. Caso aperte o botão ‘2’(não) irá cancelar a operação com a mensagem:

‘APAG. CANCELADO!’

Depois de confirmado , ainda apagando a memória, aparecerá a mensagem:

‘AGUARDE……..’

e então, com a memória já apagada, aparecerá a mensagem:

‘APAGAMENTO OK!’

Após o que, o programa irá ao início, apresentando o nome da placa e a mensagem de ‘aguardando tx!’.

Com respeito ao programa ASM, foi usada rotinas de verificação da entrada de RF , no pino 3 do PIC16F628A, testando a cada 50 microsegundos, e incrementando contadores para nivel 1 e 0. A diferença entre eles determina se o bit a ser deslocado no resultado será ‘1’ ou ‘0’. Após 2 transmissões serem recebidas, estas são comparadas para garantir fidelidade na recepção.
Após isto, o programa vai verificar se tem registrado na memória o número do controle recebido. Senão, mostará a mensagem de ‘tx desconhecido’. Verifica também se o botão ‘learn’ está pressionado, e se tiver, grava o número na proxima posição livre da memória, até um total de 254 controles. Quando em ‘modo de apagamento’, se não for concluida ou se ficar sem acionar nenhum botão por 25 segundos, automaticamente irá a ‘reset’. No ‘modo de apagamento’, não é possivel receber nenhuma transmissão de controles. Por isso, deve ser uma operação rápida. Se for acidentalmente acionada, sairá para ‘modo de uso’ por tempo. A variavel que controla este tempo é ‘TAMG’ ,podendo ser alterada para mais ou menos. O aprendizado dos controles ocorre de forma sequencial, ou seja, a cada controle aprendido receberá o próximo número. Se a memória atingir o limite máximo, haverá uma procura por números apagados e somente nesta situação é que serão usados estes espaços da memória. Por exemplo: Voce programou um controle, cujo número foi 254. Na sequencia, voce programou mais um que recebeu o número 47. Este último, foi programado em uma posição anteriormente apagada.
Foi feita esta montagem apenas em protoboard, usando o esquema acima. Espero que este projeto possa ser de base para sua aplicação.

Segue abaixo o arquivo ASM:

BIG_GEN_PIC_MIX_ASM

Segue abaixo o arquivo HEX:

BIG_GEN_PIC_MIX_HEX

Datasheet Pic16f628a
datasheet 24c08

Assuntos relacionados:
Big_gen_mix com at89c2051
Big_gen somente para Ht6p20b com at89c2051
Como ler sinal transmitido por controle remoto rf

Curiosidades:
Zepelim
Ouvindo sons do espaço
Porque as estrelas são cintilantes?

Outros assuntos:
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!!!

30 comments on “NOVO RECEPTOR GENERICO COM PIC 16F628A PARA HT6P20B E TAMBÉM HCS200…301 (SEM HOPPING CODE) – COM OPÇÃO DE APAGAMENTO INDIVIDUAL DE CONTROLES E LCD

  1. Oi tudo bem? Parabéns pelo projeto, testei ele aqui com controle de alarme da positron e aparece OK! TX APRENDIDO, mas quando aperto o botão no controle aparece RECEBENDO TX NR.: TX DESCONHECIDO!, o que pode estar acontecendo de errado? Abraço.

    1. Olá Aparecido!
      Experimente com outros modelos de controles. Alguns controles novos com Hcs200…301 tem dificuldade em funcionar quando programados pelo fornecedor deles para funcionar em modo de minima potencia de transmissão.
      Os que usam circuito integrado ht6p20b tendem a funcionar sem problemas.
      Cláudio

  2. :mrgreen: Olá Claudio, montei esta versão de receptora e me surgiu uma ideia e necessidade, porem não estou conseguindo fazer, (como sempre ne),as posições dos controles com opção de em vez de números de 001 a 255, ser sala 101 a sala 104 e assim em diante até sala 1001 a 1004, esta necessidade e para facilitar o cadastro e apagamento pelo o numero da sala e as teclas com a opção de incrementar e decrementar os números em uma velocidade só mesmo. Valeu ai por enquanto pelas belas ideias e exemplos que nos compartilha, abraço. 😀

    1. Olá Foxcon!
      Não entendi bem sua necessidade. Quantas salas são? 255? Seria 101,102,103,104 e depois pula para o segundo andar como 201,202,203,204 e terceiro como 301… até 1001,1002,1003,1004 (64 andares de 4 salas)? Talvez, se for o caso, antes de apresentar o numero deverá converte-lo por meio de uma tabela (255 posições) ou por uma formula matemática (mais fácil, mas tem que pensar qual formula).
      Cláudio

      1. 😛 Caro Claudio,a numeração das salas são assim mesmo, 101,102,103,104 e depois pula para o segundo andar como 201,202,203,204 e terceiro como 301… até 1001,1002,1003,1004 (64 andares de 4 salas), a necessidade de colocar os números das salas correspondente ao controle e para registrar a entrada de um controle da sala e se o seguintes controles desta mesma sala não conseguir abrir o portão, controle de vagas seria o nome correto, cada sala desta teria no máximo 4 controles, o controle que chegar primeiro e acionar e entrar os seguintes 3 não consegue abrir ate este que registrou primeiro sair, a identificação da entrada teria dois sensores de barreira para saber se esta entrando e ou saindo para limpar da memoria ou um FLAG, para que os próximos pode entrar no local, e meio que complicado de eu explicar mais se tiver mais alguma dúvida da minha necessidade posso fazer um esboço da ideia para vc em desenho, Claudio desde ja eu agradeço pela a sua atenção, abraço… :mrgreen:

        1. Olá Foxconn! Puxa, mas que confuso! Percebo que você tem uma divertida ‘charada’ para resolver com microcontrolador!!! Estratégia de segurança ou algo assim?
          Cláudio

          1. 🙂 Ok Claudio, nem é mesmo para segurança do local, e sim dar uma melhora no uso das vagas da garagem do dito condomínio, e que os usuários das salas se que tem mais de um carro acabam usando mais de uma vaga que é por direito dele, colocando os demais carros nas vagas dos vizinhos, ai ja viu a brigueira ne, a sala tem direito so a uma vaga, se estiver uma entrada do controle da sala os demais usuarios desta sala não entra, a minha dificuldade seria mesmo e o registro destes controles…

          2. Olá Foxconn! Você não acha que esses que fazem isto não vão achar um jeito burlar o ‘esquema’?
            Cláudio

          3. 😛 Olá Claudio,eu tb pensei nesta hipótese, estou bolando um esquema com dois sensores de barreira, para indicador ao micro que esta entrando quando, agora se o indivíduo mau intencionado, ele pode entrar com o controle e sair de a pe pelo o portão, liberando a entrada do proximo carro, mais pensei nisso tambem no posicionamento das barreiras, de uma forma que fique as duas para ser acionada pelo o comprimento do carro ou uma moto, agora se passar uma pessoa não vai conseguir acionar as duas ao mesmo tempo, e uma ideia, e ai o que vc acha desta maluquice 💡 ,,,,,

          4. Olá Foxconn!
            Sinceramente, acho difícil com microcontroladores porque exigirá atualizações constantes no sistema cada vez que alguém conseguir ‘burlar’ o sistema! Então você coloca um novo sensor aqui, depois mais um ali, etc. Com uso de um programa rodando em um PC ficaria mais fácil atualizar. É igual aos bancos que estão sempre ‘tapando buraco’ dos que tentam furtar no sistema. Mas de repente, eu esteja errado, e você possa achar um sistema ‘confortável’ para todos os usuários do sistema, de maneira que não ‘queiram’ fazer isto.
            Cláudio

          5. 🙁 Olá Claudio estou aqui novamente a lhe perguntar,se tem como vc fazer um versão ou ate mesmo mexer nesta mesmo para a seleção de posição, para quando for cadastrar o controle ser igual ao de quando for apagar, ter esta seleção,aqui no meu caso e necessidade já me resolve e muito o problema de usuários das salas, valeu e obrigado… 😛

          6. Olá Foxcon! De novo não entendi o que você deseja! Como assim ‘ para quando for cadastrar o controle ser igual ao de quando for apagar’?
            Cláudio

          7. 🙂 Ok, Claudio, quando vc vai apagar um controle, que faz pelas teclas up e down, para localizar a posição do controle na eprom, e a necessidade aqui minha para na hora de cadastrar. Ou seja na hora de cadastrar ao invés de ir incrementando automático a posição a onde vai ficar o código na eprom , vc que seleciona pelas teclas a posição correspondente, desta forma já consigo designar as posições na eprom com o numero da sala. blz…

          8. Olá Foxconn!
            Entendi bem agora! Teria que se pensar em acrescentar uma rotina de ‘buscar a posição desejada’. Experimente, talvez, copiar a rotina de busca no apagamento e usa-la para o ‘aprendizado’ do controle. Como você usaria? Aprenderia 4 controles para o primeiro apartamento, mais 4 para o segundo e assim sucessivamente? No sistema atual, se você fizer uma lista com ‘número das posições/ controle de apartamento’ também não daria certo? Ou tem que ver com o sistema de bloqueio que tenciona fazer?
            Cláudio

          9. 🙂 Ok Claudio, e isto emsmo que vc entendeu,não necessita de nomear as posições como sala, ja dando as posições como 001,002,003 em diante, eu consigo vincular em uma lista as posições com a sala, e é mesmo para aquela situação em que comentei com vc anteriormente, mais não consigo fazer nada sem a posição estar acertada, com ela ok, ja consigo sabe se teve o acesso ao portão pela a posição, seta o flag da posição toda vez que entrar,e limpa quando sair, assim consigo testar ela na hora do acionamento do rele de comando para o portão, o usuário da sala 101 que e a posição 001 na eprom, aciona o tx, e um controle valido beleza vai e testa o flag de abertura da posição 001, esta setado, não aciona o rele,se não esta setado aciona o rele de abertura, bom acho que agora conseguir passar para vc a minha situação minha aqui, mais ja adianto um obrigado pela sua atenção ok, um abraço….

          10. Olá Foxconn! Vou dar uma analisada sobre esta mudança. Mas terei que faze-lo quando tiver mais tempo, tendo que montar tudo no protoboard. Enquanto isto, tente ver se consegue alterar o asm.
            Cláudio

          11. Ok Claudio, vou neste fim de semana dar uma estudada no asm, para separar a rotina de busca na eprom e conversão para o numero da posição, valeu ai pela força obrigado….

  3. Cláudio, será que teria como você alterar o código para que depois de ocorrer um acionamento que seja mostrado o numero do controle que acionou?

    1. Olá ‘Silva45’! Quando um controle é acionado, o número da posição que ele foi cadastrado irá aparecer no lcd. Mostrar os códigos transmitidos não é apropriado, por segurança.
      Claudio

  4. Bom dia, o que eu preciso e pegar o endereço da epron que reconheceu o controle para usar em uma tabela diferente, não vou usar lcd. Meu problema e sua divisão para 03 digito (centena, dezena unidade) só preciso de 99 endereços.

    1. Olá Adriano!
      No registrador ‘BR0’ você já tem de 0 a 99 controles possíveis de ser acionados. A rotina ‘CALL conv_asc2 ‘ apenas converte ele em ascii para envio ao LCD, sendo em ‘w’ o valor de um nible e ‘r1’ o outro.
      No meu ver, se estou entendendo bem o que você quer fazer, basta usar o valor de ‘BR0’ em alguma comparação de tabela (ou salto ‘goto’).
      Se não, explique melhor por favor.
      Cláudio

Comments are closed.

Back To Top