RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

2

Decodificar transmissores de controle remoto que usam o ci HT6P20B não é algo muito dificil de se fazer. Para ajudar os que desejam implementar aplicações com este circuito integrado, segue esta sugestão.

Adquirindo um controle remoto comercial (qualquer um usado em alarmes, portões, etc que use o HT6P20B) , carregando o codigo hexa no microcontrolador PIC 12F629, e colocando na mesma placa do receptor de controle remoto generico já publicado, voce terá a opção de fazer experiencias interessantes ou ainda , agregar a uma aplicação que deseje fazer ou usar. O programa assembler captura os 24 bites enviados pelo transmissor (chaveirinho) e testa se já existe este endereço gravado na EEprom. Se tiver, testará os bit 6 e 7 da ultima palavra transmitida, que contem a chave apertada. Conforme o botão apertado, acenderá o Led1 ou Led2, por um perido de 0,5 segundo e apaga de novo. Se manter o botão apertado, irá continuar aceso. Caso o endereço não esteja gravado na EEprom, necessitará ser ‘aprendido’ apertando o botão ‘learn’ na placa e acionando um dos botões do controle remoto. Após piscar uma vez o ‘ led learn’ na placa, terá sido bem sucedido a operação de aprendizado.
O HT6P20B já vem de fabrica programado com o serial number que é recebido , com mais 2 bits que correspondem aos 2 botões (S1 e S2) nos pinos 1 e 2 do HT6P20B.
Mais informações, veja o datasheet do HT6P20B.
Para gravar o codigo hex no chip, poderá usar o SIMPLES PROGRAMADOR DE PIC e um software programador como o ‘WINPIC2000′, que é uma mão na roda para todos os hobistas.

Para obter uma versão em ‘C’, veja o artigo “RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629″> ‘RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629’ deste blog.

Segue abaixo o arquivo ASM:

RX_GEN_HT6P20_V3P1_ASM

Segue abaixo o arquivo HEX a ser gravado no chip PIC 12F629:

RX_GEN_HT6P20_V3P1_HEX

A versão acima está dando um bug ao programar 42 botões de controle, sendo operacional com menos. Segue abaixo pasta com arquivos de uma versão corrigida e melhorada. Foi alterado o modo de programar e ao atingir 42 botões aprendidos, o led ‘learn’ piscará para indicar memória cheia:

RX_GEN_HT6P20_V3P2_ASM

Clique aqui para ver o esquema da placa generica.

Clique aqui para ver a sugestão da placa de circuito impresso.

clique aqui para ver a montagem dos componentes na placa visto pelo lado cobreado e lista de materiais.

Segue abaixo versão ASM/HEX que quando mantém o botão apertado, o led se mantém aceso, sem piscar:

RX_GEN_HT6P_V4P1_ASM

RX_GEN_HT6P_V4P1_HEX

Segue abaixo versão identica ao acima, mas com opção de inverter a saida no código Asm:

RX_GEN_HT6P20B_V41_INVERTIDO_ASM

RX_GEN_HT6P20B_V41_INVERT_HEX

Segue versão para 3 leds com aprimoramentos:

RX_GEN_HT6P_V5P1_ASM

RX_GEN_HT6P_V5P1_HEX

Segue arquivo ASM (versão 6) com opção de usar o pino 3 como entrada para uma chave seletora para modo ‘PULSO/RETENÇÃO’:

RX_GEN_629_V6P1_ASM

Segue arquivo HEX (versão 6):

RX_GEN_629_V6P1_HEX

Segue esquema de ligação (versão 6):

Segue arquivo ASM (versão 7) com opção de usar mais um led (led3) no pino 3, com opção de programa para ‘PULSO/RETENÇÃO’, por comentar e descomentar na ‘opção de usuario’ do arquivo ASM:

RX_GEN_HT6P_V7P1_ASM

Segue arquivo Hex (versão7) já compilado para ‘RETENÇÃO’:

RX_GEN_HT6P_V7P1_HEX

Segue arquivo ASM para versão acima, mas com inversão das saidas no modo Pulso (alterável no linha de código como opção).

RX_GEN_HT6P_V7P1_INVERTIDO_ASM

Segue arquivo HEX para versão acima:

RX_GEN_HT6P_V7P1_INVERTIDO_HEX

Segue esquema para versão 7 abaixo:

Segue arquivo ASM para versão 8 (apenas didática, apresentando como podemos piscar os led’s na saida por um número de vezes, alterar qual saida fará isto, piscar mais de um led junto, alterar tempo aceso dos led’s , alterar tempo apagado, etc.

RX_GEN_629_V8BP1_ASM

Segue o arquivo ASM para versão 9 (idem versão 6, mas com aprendizado individual de controles, para poder usar um controle
com uma ou mais placa):

RX_GEN_629_V9AP1_ASM

Segue o arquivo HEX para a versão 9:

RX_GEN_629_V9AP1_HEX

Os arquivos abaixo permitem operação mista, entre retenção e pulso.
Acionando o botão 1 apenas, obtemos acendimento do led1 e se soltar, apaga. O mesmo com o botão 2 e led2 (modo pulso).
Mas se apertar os dois juntos, acende o led 3. Soltando-os e apertando-os de novo, apaga (retenção no led 3)
Obs. Necessita de pull up no pino 3 para funcionar. Veja esquema abaixo da V10.

Segue o arquivo Asm para a versão 10:

RX_GEN_629_V10P1_ASM

Segue o arquivo Hex para versão 10:

RX_GEN_629_V10P1_HEX

Segue o esquema para versão 10:

Esquema v10

Segue pasta zipada com versão 11 (14/07/2015) com 3 canais, programável no arquivo “C” (Compilador CCS C) por comentar/descomentar as linhas, para funcionar em modo retenção ou pulso, saída normal ou invertida, de forma individual para cada canal. Rotina de recepção alterada para testar cada parte do bit recebido (em teste):

RX_GEN_675_V11

Veja também o artigo:‘RECEPTOR DE 3 CANAIS PARA USO COM CONTROLE REMOTO (CI HT6P20B) E PULSO/RETENÇÃO INDIVIDUAL- COM PIC 12F675’

Links:
datasheet 12f629

Curiosidades:
controle remoto e o efeito estufa
ataques cibernéticos
Comportamento anti-colisão dos peixes
Jóqueis-robos para camelos

Outros assuntos:
Como acabar com a tática do silêncio
Os milagres são possíveis – 3 objeções
Como enfrentar o bullying sem ter de partir para a briga (animação)
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
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
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?

Até o próximo artigo!!!

2

248 comments

  1. 0

    sobre a ideia de um quarto botão é que as vezes vc quer fazer um projeto com 4 rele para comandar motores ou até outros circuitos e existe no mercado um controle com apenas 2 teclas ai surgiu uma ideia de usar dois controles assim poderia ser controlado uma parte por alguem e outra por outra pessoa tipo um sistema de um industria em que um setor só pode ser comandado por um determinado chefe e outro setor por outro mas com uma unica central entende , e afinal o led status so tem a função de informar que recebeu o sinal do controle isso seria descartado apos a gravação , ja estando aqui teria tb como fazer um modificação neste projeto de 3 canais para ter a opção via jumper de modo pulso ou modo retenção e indo mais alem seria possivel tipo um pic12f675 com botões de entrada tipo 3 botões comandar um outro pic para acionar o modo de trabalho tipo sei la este seu projeto sendo controla por um outro pic assim por I2C , foi so uma ideia pq assim seria possivel a pessoa trabalhar com modo pulso ou modo trava selecionado o canal pelo botão sem ter quer progamar o micro .

    1. 0

      Olá Liliano! Se eu entendi bem, seria mais ou menos um receptor com 2 setores diferentes, sendo que podeira gravar talvez, metade da eeprom para aprender e acionar 2 reles e a outra metade para aprender e acionar mais outros 2 reles diferentes. Quanto a poder optar por retenção ou pulso, isto seria em base individual (cada saida) ou geral (para todas as saidas)? Se for em base geral, talvez dê com a quantidade de pinos limitada do 12f629. Mas, se for de modo individual, será necessário usar um microcontrolador com mais ports, como o 16f628a, por exemplo. Neste caso, fazendo uso de simples ‘jumps’ de aterramento, poderiamos definir se determinada saída funcionará em modo ‘pulso’ ou ‘retenção’. Quanto a comunicação usando protocolo i2c com outro microcontrolador, fiquei meio confuso, sobre qual será o objetivo final desejado. Que informações seriam transmitidas e para fazer o quê? Você tem um exemplo prático de uso para clarear as idéias?
      Cláudio

  2. 0

    Claudio, obrigado. Deixe-me perguntar, tenho que fazer alguma proteção eletromagnética, pois irei usar 3 reles na saida do PIC e vou acionar cargas AC.

  3. 0

    😛
    Claudio sou novo aqui no blog, mas gostaria de parabeniza-lo da iniciativa.
    Sobre o projeto do RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629, preciso algo parecido mas com detalhes:
    Ao inves de ter uma chave de seleção para pulso/retenção, ele ser 100% on/off. Apertou uma vez o botão 1 inverte o estado da saida, a mesma coisa para o botão 2 e 3. simplesmente on/off para os 3 botões.
    Tem como me enviar o ASM com as alterações por e_mail??

  4. 0

    valeu amigo agora deu certo, vou montar na real para ver o funcionamento. mai fica aqui meu pedido se alguerm sabe fazer esse codigo no mikroc. para que eu possa enteder que so sei fazer algumas coisas no mikroc.

  5. 0

    não funciona o comando learn, so funciona para apagar a epron, não reconhece os controles, eu gostaria da deixa para solicitar umas informações sobre o chama atendente, eu não consegui fazer reconhercer mais controles, e nem entendi como o asm faz a decodificação dos controles e acendimento dos leds, ou seja, que parte do asm ele procura na epron o controle gravado e acende o led especifico.
    grato pela atenção.

    1. 0

      Olá Adriano! (complemento da resposta de 27/01/13 , 22:54 h) A decodificação é meio complicada de entender. A entrada de sinal vindo do receptor (sin) será constantemente vigiada a cada 50 microsegundos. Se for ‘0’ incrementa contador “LC” e se for ‘1’ Incrementa “HC”. Quando ocorre o primeiro ‘1’ será setado o ‘flag’ e testado se o contador “LC” passou do valor ‘tmax’. Se passou, indica que houve um grande intervalo antes ( intervalo entre transmissões). Então reseta contadores e repete a aquisição de valores. Agora, se o intervalo for menor que ‘tmax’, indica que um bit está sendo recebido e ira copia-lo no registradores de resultados e decrementar o contador de número de bit recebidos (28 bits). Em outra palavras, o sistema testa se entrada é ‘1’ ou ‘0’ constantemente e analiza todos os pulsos ‘1’ quanto se houve ou não um grande intervalo antes. Se houve reseta, se não, copia o bit recebido como valido. Detalhe: O bit recebido é obtido pela diferença entre o registrador ‘HC’ e ‘LC’.
      Espero que você tenha ‘pegado’ um pouco esta ‘confusão de bits’. Quanto ao chama atendente, especifique melhor o que está acontecendo.
      Claudio

      1. 0

        🙂 Olá Claudio eu aqui de novo naquela situação dos controles de cortar os arames 9 no total, e como funciona este modelo então para ler e comfirmar o codigo recebido…Valeu

        1. 0

          Olá Agnaldo! Este modelo de controle trabalha com 3 estados: aterrado, ligado ao vcc e aberto. Cada bit é transmitido com formato duplo. Na época , cada fabricante usava também um jogo de rx e cx ,gerando frequências de clock diferentes de transmissão ( um tipo de baud rate). Isto torna mais dificil fazer um leitor de código para ele.
          Claudio

    1. 0

      Olá Adriano! Poderia ser mais especifico: Está funcionando , apagando, etc mas não acende o led na hora de gravar o controle, é isto?
      Claudio

  6. 0

    ola Claudio, esta fazendo um trabalho maravilhoso passando seus conhecimentos para os mais. também tenho um duvida? quantos CHAVERINHO da para grava na memoria do 629. montei o v7 pulso só esta gravando um CHAVERINHO, quando gravo. apaga o anterior.
    e obrigado…

    1. 0

      Olá George! É para gravar muitos (42 botões, 24 controles , conforme versão). Vou verificar assim que tiver um tempinho para montar no protoboard.
      Claudio

      1. 0

        ola Claudio, lembrei de um detalhe o pic onde gravei o v7. eu já tinha gravado varias vezes por cima. sera por isso?
        meu gravador e o picbanne
        para todos pic´s aparece a opção apagar, menos para 629.
        desde já agradeço…

        1. 0

          Olá George! Para testar seu pic, carregue um programa simples qualquer, do tipo ‘pisca um led’. Se funcionar, descarte a falha do pic.
          Cláudio

  7. 0

    amigo estou tentando copilar no mplab, mao esta dando erro. apesar que nao sei mexer no mplab, tem alguma configuraçao que tem que fazer nele para copilar. so seu usar o microc mesmo.

    1. 0

      Olá Luciano! Vocêe precisa ver na mensagem pós compilação, qual erro está dando e corrigir. No Mplab, inicialmente, você deve criar um projeto novo e dar um nome qualquer. Em seguida deve abrir um novo arquivo e salvar com terminação .asm. Deve colar o arquivo terminação asm deste site , dentro deste novo arquivo que você criou. Em seguida deve ‘somar’ (add) este arquivo ao projeto. Ai você poderá compilar (buiding). Leia os tutoriais do Mplab na Internet e alguns videos do YouTube.
      Cláudio

  8. 0

    amigo teria com vc fazer essa programaçao com mikroc. que estou estudando a um tempo nele. e gostaria de enteder essa comuniçao.

    1. 0

      Olá Luciano! Eu normalmente, prefiro programar em assembler usando o Mplab. Já fiz alguns projetos em ‘c’, mas não sou ‘expert’ (aliás, lembrando que sou ‘um mero hobista’ e não programador profissional!!!). Em uma oportunidade futura, verei se posso monta-lo em ‘c’. Mas caso, outro colega, que esteja lendo este blog, que já o tenha feito e quizer compartilhar, poderá se manifestar.
      Claudio

  9. 0

    Ok claudio, nesta forma de preencher com 01 em todos os campos ja resolveu, ai eu testei tb com 02 deu certo tb, eu fiz uma leitura em uma eeprom de teclado de senha, e vi que tem alocações de ponteiro, para posicionar as senhas em cada local, so que perderia posições para maior quantidade de controles ne, e se acrecentase uma eeprom externa, seria uma solução ne, abraços.

  10. 0

    ❗ Olá claudio,em testes com o pcb, notei um fato, se a receptora receber uma transmissão com os bits FFFFFF,neste caso foi um ruido ele acionou o rele 3, que e conrrespondente ao 3 botão, não tinha feito o cadastro dele,mas ai fiz a leitura do micro e da eeprom para ler o que tinha de codigo salvo, e confirmei que era ruido, o que pode ser feito para que nao ocorra este acionamento involutario. Valeu.

    1. 0

      Claudio não sei se seria uma alternativa mais olha o que eu fiz ai para tentar tirar este recebimento de codigo errado,

      APAGAEEPROM ;OK TESTADA E APROVADA
      ; ROTINA PARA APAGAR TODAS AS POSIÇOES DA EEPROM DO 16F628
      MOVLW 0X80 ;TOTAL DE 128 + 1 BYTES DE EEPROM
      MOVWF AUX
      RET6
      CLRWDT
      MOVFW AUX
      MOVLW .1 ;ACERTA ENDEREÇO TIRANDO 1
      SUBWF AUX,W
      BANK1
      movwf EEADR
      ;======================================================================
      MOVLW 0X01 ;o que vc colocar aqui vai preencher a eeprom quando resetar estava;0XFF
      ;======================================================================
      movwf EEDATA
      bcf EECON1, EEIF
      bsf EECON1, WREN ; enable Write\par
      movlw 0x55
      movwf EECON2
      movlw 0xAA
      movwf EECON2
      bsf EECON1, WR
      WRITE_SN_C clrwdt
      btfsc EECON1, WR ; Write complete ?\par
      goto WRITE_SN_C
      bcf EECON1, WREN ; disable Write\par
      BANK0
      DECFSZ AUX,F
      GOTO ESPERA
      clrwdt
      RETLW 0H
      ESPERA ;DELAY ENTRE APAGAMENTOS
      MOVLW .8
      MOVWF R1
      CG1
      MOVLW .255
      MOVWF R2

      DECFSZ R2,F
      GOTO $-1
      DECFSZ R1,F
      GOTO CG1
      GOTO RET6

      ORG H’2100′
      DE .0

      acho quer resolveu, mais esta função so completa a eeprom depois do resetar

    2. 0

      Olá Agnaldo! Quando a eeprom está limpa deverá ficar com ‘ff’ em todas as suas casas como padrão. O que pode ser feito é desprezar controles que emitam ‘ffffffff’ ( o que incluiria o ruido), ou mais além ainda, escolher no código de tanto a tanto (janela) que poderia receber. Escrever ’01’ em toda memória poderá solucionar ou não. Experimente e veja se não existe ruido que se pareça com ‘01010101’.
      Cláudio

  11. 0

    :mrgreen: Olá Claudio, montei o pcb e testado, 100% no funcionamento, tem como postar o desenho do pcb aqui, para disponibilizar a todos, arquivo no proteus, valeu

  12. 0

    Caro amigo sou eu mais uma vez , isso é pra mim , tenho uma ideia sobre um amplificador controlado pelo chaveirinho o que eu precisaria é um controle de volume sendo uma saida do 12f675 variando a tensão de 0V até 5V isso por dois botoes um para cima e outro para baixo , o terceiro botão seria para mute , esta variação de tensão entraria no tda8199 , ele é um ci controlador de audio de 2 canais sendo variando o audio pelo variação de tensão no pino dele , pensei na ideia de usar ate um 16f628 com display mostrador mas para uma versão mais simples um 12F675 sem mostrador entende , seria possivel isso ?

  13. 0

    Boa tarde Claudio muito obrigado por me responder.Em relação aos pulsos que tx dar então é possivel trata-lo.Então posso assim que o tx gerar esses pulsos eu confirmar atraves de “tempo” se é bug ou se é real transmissão .Claudio desculpe-me de ficar fazendo tantas perguntas.

  14. 0

    Boa tarde Claudio agradeço-lhe pelo Blog muito util mesmo.Eu fiz esse programa acima com o PIC 16F628A e funcionou redondinho.Eu tenho que fazer um programa parecido para o meu curso final só que em LINGUAGEM C e gostaria que vc me tirasse algumas dúvidas.
    1ª-Estava analisando com o osciloscopio e esta dando um monte de interferencia ou seja o pulso de entrada que é para ficar em nivel logico 0 as vezes ele dá uns bugs rápido para nivel 1.Minha duvida é tem como tirar essa interferência?
    2ª-Só para confirmar esse ci da holtec manda 03 BYTES ou 24 pulsos num tempo de 50ms certo?

    1. 0

      Ola Genilsonsa!
      Com respeito a entrada de sinal vindo do receptor de rf, é normal ocorrer ‘pulsos’ do nada, relativo a sinais espúrios presentes a todo momento na faixa de frequência, e que o programa já trata. Com respeito ao tempo total da transmissão, ela poderá variar de acordo com o circuito rc colocado junto ao chip transmissor. Veja o data sheet do ht6p20b para saber a faixa admissível de trabalho.
      Claudio

  15. 0

    Bom dia Claudio.
    pode ser desta forma mesmo, programo o 3º botão na controladora do portão.
    Esta versão V9 quando não está com nenhum TX gravado na memória as saidas 1 e 2 ficam acionando e desacionando. Liguei o circuito em 12Vcc e após 10 segundos aproximadamente as saidas acionaram, gravei um TX então parou de acionar e desacionar as saidas apaguei o TX do receptor e deixei ligado o circuito e as saidas ficaram acionando e desacionando, gravei outro PIC e deixei ligado e após 23 segundos começou a acionar e desacionar as saidas, é normal isto???

    1. 0

      Olá Roberto! Com certeza não é normal. Irei verificar aonde tem ‘gato no telhado’. Aguarde…..
      Cláudio

    2. 0

      Olá roberto eu tb tive este problema aqui, mais sim com o 3 rele, o ruido aqui foi provocado por um mause usb ótico. fiz a comparação com o ESQUEMA TESTER_3 COM LCD para fazer a leitura do que esta recebendo. e travou justamente com a leitura FFFFFF, que é o que tem na eeprom quando esta fazia.

  16. 0

    Isto mesmo Cláudio, já uso hoje no movimentador do portão 01 TX de 3 botões onde somente 01 botão está configurado, então eu poderia usar os outro 02 botões para acionar a receptora programada por você, para isso a gravação terá que ser independente na sua receptora e o 3º botão não deverá ser reconhecido a não ser que seja programado.

  17. 0

    Bom dia Claudio.
    Testei a versão V6 e esta está funcionando corretamente conforme sugerido. A versão V7 RETENÇÃO.HEX não está disponível para download, apenas a versão V7 PULSO, esta versão ainda não coloquei em testes.

    Mais uma sugestão, tem como alterar a versão V6, gravar individualmente os botões do TX igual a versão V3 e não acionar nenhuma saida quando precionado o 3º botão de um TX de 3 botões??? Desta forma poderei utilizar 01 TX de 3 botões, um aciona a abertura e fchamento do portão, e os outros 2 botões acionaria 02 lâmpada quando necessário. Penso em instalar isto no sitio melhorando a segurança e a comodidade quando se chega a noite no local. Agradeço pela paciência e a atenção.

    1. 0

      Olá Roberto! Realmente, está havendo um problema com o arquivo v7 retenção, que está dando erro. Estamos acertando a situação.
      Com respeito a sugestão, se eu entendi bem, parece que voce quer fazer 2 receptores , usando um mesmo chaveirinho, sendo que gravaria um botão para a placa do portão, e os outros 2 gravaria na placa de uma aplicação que acenderia a iluminação em determinado lugar, é isto???
      Claudio

  18. 0

    ahh. se fosse no começo eu nem iria ver( não entendia absolutamente nada , agora entendo nada rsrs ), mas como to tentando aprender logo estranhei , ainda mais do jeito de como você explicou cada comando separadamente. ficou mais fácil de entender o que faz cada comando . obrigado de novo. até a próxima . um abraço .

  19. 0

    olá claudio . mais uma vez de agradeço por me ajudar . a versão RX_GEN_629_V8_ASM é exatamente o que eu quero , muito obrigado . só uma dúvida referente a rotina para acionamento dos leds :

    em “ROTINA PARA AMBOS BOTÕES (OU O 3º BOTÃO)” – a 4ºlinha de comando é BSF LED1( liga o led1 ).

    em “ROTINA PARA O BOTÃO DIREITO” – a 4ºlinha de comando também é BSF LED1 ( liga o led1 ).

    e porque em “ROTINA PARA O BOTÃO ESQUERDO” – a 6ºlinha ( referente a 4ºlinha dos outros ) de comando é BCF LED1 ( desliga o led1 ) ?? e a próxima linha ai sim é BSF LED1 ??

    1. 0

      Olá Michael! O ‘porque’ se chama ‘falha nossa’. Quando temos a facilidade do ‘ copiar e colar’ , buscamos as linhas de código parecidas e quando fazemos isto em varias linhas, quase ‘sempre’ esquecemos de alterar alguma coisa . Se ao compilar não dá zebra, como no caso de linhas comentadas, a coisa passa despercebida.
      Claudio

  20. 0

    olá claudio , não conseguir fazer , tá erro na hora de compilar e também não entendi ao certo o que fazer e como fazer .
    coloca a rotina completa para mim , ai posso ver onde estou errando .

    no caso quero para versão RX_GEN_HT6P_V5_ASM com 3 botões ,
    desde a linha ” ;MODO XOR_LED ” até ” GOTO INICIO ” fazendo favor .

    põe assim :

    quando aperto o 1º botão pisca 2 vezes o led1
    quando aperto o 2º botão pisca 10 vezes o led1
    quando aperto o 3º botão pisca 20 vezes o led1

    e outra coisa que percebi , se ficar apertando o botão direto ele fica repetindo a função , ou seja , pisca o número de piscada de novo .

    ex: 1ºbotão = 2 piscada , se ficar pressionando o 1ºbotão pisca 2 vezes depois mais 2 vezes depois mais 2 vezes e assim por diante . tem como fazer piscar somente uma sequencia mesmo se ficar pressionando o botão ??

    desde já agradeço a paciência comigo .

    1. 0

      Olá Michael!
      Estou postando a versão 6 e versão 7. Estude como foi usado flags para controlar a sequencia de acionamentos dos leds para não ficar piscando.
      Continue tentando. Isto é bom para desenvolver raciocinio lógico. Tente fazer um fluxograma da idéia e depois, passe para assembler.
      Claudio

  21. 0

    Obrigado pelo retorno Claudio,
    Pode partir do principio de que este HEX é para ser utilizado com TX de 3 botões caso utilizar TX de 2 botões poderá ocorrer a situação citada por você.

    1. 0

      Olá Roberto! Voce tem razão. Veja as versões 6 e 7 postados hoje. Verifique se atingiu seu objetivo.
      Claudio

  22. 0

    Bom dia Claudio.
    Utilizando um controle de 3 botões:
    – botão 1 aciona saída 1 e esta saída permanece acionada até receber um novo sinal/comando do botão 1 para. Da mesma forma para as saídas 2 e 3, é a mesma função de retenção da IDÉIA 1 só que sem a opção de setar a função PULSO / RETENÇÃO, a função será sempre retenção, hoje a função está como pulso. Obrigado.

    1. 0

      Olá Roberto
      Entendi! Fazer retenção para o led 1 e 2 não é dificil. Mas para o led 3 tem a questão da simultaneidade, por que, se for acionado um antes que o outro ao apertar (latencia dos musculos humanos)por um tempo maior que o tempo de 3 instruções (3 microseg) já não funcionará. Mas vamos ver se dá para encarar este desafio, talvez com alguma rotina de delay e multiplas verifições. Aguarde, assim que tiver um tempinho vou brincar com esta ‘palavra cruzada’…
      Claudio

  23. 0

    Olá Roberto! Obrigado pelos seus comentários apreciativos. Realmente, é possivel usar o pino 3 como escolha para retenção ou pulso, no caso da versão 4. Agora, na versão 5, foi agregado um terceiro led , cujo acionamento ocorrerá quando os DOIS botões estiverem acionados.
    Explique melhor, por favor, a idéia que voce tem em mente quanto a “1 comando do tx aciona a saida referente ao botão pressionado e outro desaciona” , visto termos apenas 2 botões e 3 leds? Seria o caso, de acionar concomitante os 2 botões, uma vez para ligar e aciona-los de novo para desligar?
    Voce deseja acionar que dispositivos?
    Claudio

  24. 0

    eu quase consegui fazer o que eu quero , mas só com a versâo 3 ,ou seja, com 2 botões e não com 3 ( o que eu quero )
    eu fiz a seguinte mudança:

    onde estava:

    ACIONAR

    BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
    BSF LED1 ;ATIVA LED1
    BTFSS RES2,7
    BCF LED1 ;APAGA LED1

    BTFSC RES2,6
    BSF LED2 ;ATIVA LED2
    BTFSS RES2,6
    BCF LED2 ;APAGA LED2

    MOVLW .20
    CALL DELAYM ;TEMPO QUE SE MANTEM ACESOS
    BCF LED1
    BCF LED2
    GOTO INICIO

    coloquei assim :

    ACIONAR

    BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,7
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,7
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,7
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM

    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BSF LED1 ;ACENDE LED (UMA PISCADA)
    MOVLW .2
    CALL DELAYM
    BTFSC RES2,6
    BCF LED1 ;APAGA LED
    MOVLW .2
    CALL DELAYM

    GOTO INICIO

    ou seja :

    quando aperto o 1º botão pisca 2 vezes o led1
    quando aperto o 2º botão pisca 6 vezes o led1

    como faço para adicionar o 3º botão ??
    tem um jeito mais fácil de colocar a quantidade de piscada ??

    1. 0

      Olá Michael!
      Vejo que voce já tá pegando o jeito. Parabéns!
      Para testar o 3º botão , tem que testar os bits 7 e depois o 6 do registrador RES2. Só que tem que usar logica ‘E’ além de ter de temporizar para depois ‘testar’ novamente estes dois bits, após algum tempo, por causa que ‘nenhuma pessoa'(exceto um ‘ninja’) consegue apertar os dois botões ao mesmo tempo. É até dificil de explicar . Quanto a tempos em milisegundos, basta modificar a rotina de delay para contar exatos 1mseg com um valor de ‘w’ = 1. E depois tem de ajustar tudo que usa esta rotina atual. Ou voce poderá pegar dois registradores temporários e usa-los para fazer uma subrotina de nome, por ex. ‘delay_Milisegundos’ que substituiria a subrotina ‘delaym’.
      Quanto a jeito mais facil de fazer piscar varias vezes o led, é usar outro registrador temporário, no qual se carregue a quantidade de piscadas e fazer um loop decrementado ele a cada piscada.

      Ficaria assim:
      movlw .10 ;carrega para 10 piscadas p.ex.
      movwf temp1 ; em ‘w’ tem por o numero de piscadas a ser dada
      meu_loop:
      bsf led1 ;por exemplo ‘led1’
      movlw .2
      call delaym ; ou a sua nova rotina
      bcf led1 ;tem que ser o mesmo acima
      decfsz temp1,f ;decrementa
      goto meu_loop ;não chegou a zero, vai piscar de novo
      (aqui a proxima instrução, pois já acabou de piscar)
      Vá tentando, que é assim que se aprende.
      Claudio

  25. 0

    olá claudio , tem como fazer uma rotina um pouco diferente :
    ao invés de acender 3 leds independentes , fazer piscar somente um led de acordo com o botão apertado .
    ex:

    1º botão apertado do controle = pisca led1 1 vez
    2º botão apertado do controle = pisca led1 2 vezes
    3º botao apertado do controle = pisca led1 3 vezes

    o outro circuito já está em casa funcionando !!

    ah !! e tem como eu definir o tempo no .asm do led aceso e do led apagado em milisegundos ??

    obrigado pela sua atenção de novo .

  26. 0

    Bom Dia Claudio.
    Sou iniciante no ramo da eletrônica, montei o circuito e testei os .HEX funcionou perfeitamente, parabéns por publicar seus conhecimentos e incentivar os novos proficionais da area respondendo e interagindo com os usuários.
    Estava acompanhado as idéias do michaelverdan e resolvi contribuir.

    IDÉIA 1)Na versão 4 é possivel você implementar a função PULSO / RETENÇÂO, colocando um resistor de PULL UP (5V) no pino 3 do PIC a função fica em modo PULSO (saida fica acionada em quanto o controle TX está acionado) e quando colocado GND no pino 3 a função fica em modo RETENÇÃO (um comando aciona a saída e outro comando desaciona as saídas independentemente).

    IDÉIA 2) Na versão 5 inverter a lógica, hoje as saídas estão funcionando somente como PULSO, alterar para modo RETENÇÃO (1 comando do TX aciona a saída refente ao botão precionado e outro comando desaciona a saída.

    Agradeço pela atenção.

  27. 0

    era isso mesmo que queria . agora está mais que perfeito . muito obrigado mesmo . ficou super legal só precisar cadastrar 1 botão e os outros 2 cadastrarem automaticamente . excelente trabalho e super rápido . um abraço .

  28. 0

    ECP é a marca do controle e tem 3 botões .

    o que eu quero é que os 3 botões do controle funcionem separadamente , um para cada canal . pelo que me parece o 3º botão envia os 2 códigos juntos ( acendendo os 2 leds juntos ).

    ex: montei o circuito, cadastrei os 3 botões do controle e funciona assim :

    1º botão apertado do controle = acende o led 1
    2º botão apertado do controle = acende o led 2
    3º botao apertado do controle = acende os 2 leds ao mesmo tempo

    e o que eu quero é o seguinte :

    1º botão apertado do controle = acende o led 1
    2º botão apertado do controle = acende o led 2
    3º botao apertado do controle = acende o led 3

    sendo que não tem o led 3 , e tem o pino 3 do pic 12f629 que está sobrando . será que tem como fazer funcionar desse jeito usando o pino 3 para acender o led 3 com o 3º botão apertado sem acender o led 1 e 2 ??
    desculpe pelo trabalho que estou de dando .

  29. 0

    Olá Michael! Por favor, especifique o que voce quer.
    Seria para acender um terceiro led quando os 2 botões estiverem pressionados? O que é o ECP em questão?

    Claudio

  30. 0

    oi , não querendo abusar da sua ajuda ( que foi MUITO útil ) estava pensando se daria para usar o pino 3 do pic para se ter um 3ºcanal pois no controle ECP que tenho tem 3 botões ( este último ativa os 2 canais no receptor ao mesmo tempo ).

  31. 0

    olá Claudio, não sei nada de assembler , mas consegui mudar o MOVLW .20 para MOVLW .5 , recompilei ( aprendi hoje ) com o Mplab Ide e funcionou perfeitamente .
    será que tem como você me falar onde eu mudo no .asm para o led ficar aceso o tempo que ficar pressionando o controle ??

    1. 0

      Olá Michael! Para fazer isto, em vez de uma temporização seguida logo após ligar um led de saida (no caso o MOVLW .20/ CAL DELAY) teremos que eliminar esta parte e fazer uma temporização ‘na sequencia de código’ , ou seja, logo após ligar um led, nós carregariamos
      um valor pré determinado em contadores que seriam decrementados a medida que o programa segue, e ao termino da carga, desligaria os led’s. Mas, enquanto voce mantém um botão pressionado, sempre ocorrerá a carga, impedindo de apagar o led acionado. Assim que eu tiver um tempo, vou montar o circuito no protoboard e fazer uma rotina desta forma. Outra opção, seria usar a temporização de um dos timers com prescaller para p. ex. 1seg e enquanto o botão estiver pressionado, resetaria o timer, impedindo de dar overflow, cuja interrupção setaria todas as saidas de led. Aguarde…. mas, continue tentando…
      Claudio

    2. 0

      Olá Michael! Esperimente o codigo adicional postado acima (rx_gen_ht6p_v4_asm) e veja se é o que voce quer.
      Claudio

      1. 0

        olá claudio , era isso mesmo que eu queria , muito obrigado , se todos fossem iguais a você o mundo seria bem diferente . muito obrigado pela sua atenção .

  32. 0

    olá , muito bom esse receptor e super simples o circuito .
    montei e funcionou ,sendo que quando fico acionando o controle direto o led fica piscando ( ele tem que ficar direto né? ) . você pode me ajudar .
    desde já agradeço .

    1. 0

      Olá Michael! Agradeço pelo seu retorno. Quanto ao fato de piscar, o programa Asm foi feito assim para se parecer a ‘ um toque de botão’ (temporiza ligado por um tempo e logo desliga). Voce poderá tratar este evento na sua aplicação ou se conhecer um pouco de Assembler,
      alterar o programa Asm para realizar o que voce deseja e depois recompila-lo no Mplab Ide.
      Abraço

  33. 0

    muito bom o controle,fiz e funcionou blz,utilizei ele num alarme simples que fiz,usava uma chave de toque para ligar pois sei pouco de programacao,que tal mais adiante um discador para 3 numeros e teclado com pic16f628,qdo dispara sirene aciona um pino do pic para discar,.parabens.

    1. 0

      Olá Ismael!!! Obrigado pelo retorno. Fico feliz que obteve sucesso. Quanto a sua sugestão, já está anotada no ‘ caderninho de idéias’.
      Sucesso com suas montagens.
      Cláudio

  34. 0

    Boa tarde Claudio, problema resolvido era um pequeno defeito de hardware que um amigo fabricou.
    a ponta do resistor de 10k que teria que ficar no +B 5v estava no GND provocando o apagamento ao ligar o sistema. E gostaria de saber onde posso alterar no arquivo ASM
    para que a resposta do receptor fique como um HT12D não permanecendo aqueles segundos acionado, ficando com uma resposta mais rapida EX: apertou no controle acende soltou apaga.
    Agradeço a sua colaboração, um abraço.

    1. 0

      Olá Snake!
      Fico feliz. Para alterar o tempo que fica ligado cada led, vá na parte do código ASM escrito ‘ACIONAR’ e logo voce verá ‘MOVLW .20’ e na próxima linha ‘CALL DELAYM’. Altere o valor de ‘.20’ para menos, conforme seu gosto, fazendo tentativas. ( Ex. .5) Com o código atual, se voce colocar um valor menor ficará mais rápido, mas ainda dará uma piscada no led até a próxima recepção ser concluida. Claudio

  35. 0

    Olá Snake. Se eu entendi bem, com o resistor de 10k ao +vcc 5v ele já fica apagando direto, é isto? É muito estranho, pois a presença deste resistor que faz a polarização que impede justamente isto. Está sendo ligado ao +vcc ou de repente, está sendo ligado ao gnd? O botão não esta com problemas, ficando ligado direto? Confira todo o teu hardware com o esquema fornecido acima. Voce está usando o ARQUIVO HEX: RX_GEN_HT6P20B_V3_HEX ou anterior? Conforme o comentário do colega Vagner, não teve ,por enquanto, problema com o software atualizado. Faça estas verificações e depois da um retorno,
    Cláudio

  36. 0

    Olá Claudio. Parabens pela iniciativa de compartilhar seu conhecimento.
    Montei este receptor mas estou com um pequeno problema, com o resistor de 10k no lugar quando ligo ele pisca 3x indicando apagamento da memória, quando desligo o resistor fica normal, porem quando aperto o botão do controle ele aprende automaticamente sem ter que pressionar o botão aprender.
    pode me ajudar, des de já agradeço.

  37. 0

    Boa tarde Cláudio.
    Esta nova versão RX_GEN_HT6P20B_V3_HEX está em testes à mais de uma semana e está funcionando redondinha, vou implementar a função de pulso / retenção utilizando o pino 4 que está vago e continuar nos testes. Obrigado.

  38. 0

    Realmente eu estava usando o código anterior. Agradeço muito pela atenção e parabéns pela iniciativa! Um abraço. Diego

  39. 0

    Olá Diego!
    Gostaria de saber se voce está usando o novo código postado acima ‘RX_GEN_HT6P20B_V3_HEX, revisado em 05-08-2012 ou é ainda o anterior? No aguardo…
    Cláudio

  40. 0

    Oi Claudio, eu não possuo o pic 12f629, então utilizei o 12f675, descomentei as linhas identificadas para ele funcionar, elegrava certo mas não apaga a eprom segurando o botão learn. Sabe o que eu posso fazer para corrigir isto? Muito obrigado. Um abraço.

  41. 0

    Bom dia Cláudio.
    Aparentetente é uma hibrida receptora compativel com a que eu estou utilizando, esta receptora que eu utilizo é a mesma que a empressa PPA e a ECP utiliza em seus circuitos. Respondendo a sua pergunta, após o travamento deixei ligado por aproximadamente 3 horas e não destravou, tive que desligar o circuito e religar novamente. Quanto ao colocar o capacitor entre os pinos 1 e 8 já está colocado desde o inicio dos testes, mesmo utilizando o seu HEX também ocorre o travamento. Por acaso você tem o contato do ricardo_jr, acredito que ele também tenha montado o circuito, você pode verificar com ele se também teve o problema? Vou ver com um colega aqui da empresa que é mais “expert” do que eu em programação para analizarmos juntos o seu ASM, qual quer noticia lhe informo. Obrigado pelo retorno, bom final de semana. Até mais.

    1. 0

      Olá Vagner!
      Consegui pegar o defeito depois de 2 dias ligados!!! Identifiquei que, sob interferencias na entrada, o código de procura por controles gravados na memória entrava em loop infinito, cessando apenas com um reset. Coloquei uma provisão no codigo ,caso isto aconteça, direciona para ação correta. Estou testando já a um dia e em situações ‘forçadas’ com interferencia ‘artificial’ que causava pane no código anterior, neste não mais afeta. Acredito que esteja solucionado o problema de ‘travamento’. Peço que voce carregue o novo código acima e faça seus testes, visto que ‘um bom teste’ deverá ser feito em pelo menos 5 dias utéis, para termos plena certeza. Me retorne o resultado, quer positivo, quer negativo, por favor. Agradeço a sua colaboração e ‘paciência’ no desenvolvimento deste projeto.

      Obrigado Cláudio

  42. 0

    Olá Vagner! Bug interessante este que está dando!
    Estou usando um receptor do tipo 433MHZ ASK RX MODULE
    Conforme poderá ver a aparencia no link :http://image.made-in-china.com/2f0j00QMWaswuRYKzI/433MHz-ASK-RX-Module.jpg
    Só não posso afirmar com certeza se é o mesmo, pois tem aparecido muitas ‘copias’ identicas por ai,sem nome ou fabricante. Mas funcionam, e custam por volta de 18,00 reais o tx +rx. Talvez o pane possa ocorrer em uma ocasião de alto ruido na frequencia de 433mhz. Pergunta? Depois que trava, esperando sem resetar ,ele volta a funcionar? Ou nunca volta? O tempo que passa sem travar varia de 2 horas e meia até 2 dias. Parece realmente ser uma influencia externa. Lógicamente, nem sempre ‘tapamos todos os buracos’ do que pode acontecer em um programa. Qual será a situação esquecida que está se manifestando?
    Sei que voce quer respostas, mas enquanto não acontecer comigo será dificil. Farei o seguinte: Vou montar mais uma vez o circuito e testar por um periodo maior. Pode ser que eu pegue o problema.
    Enquanto isto, analize se suas alterações poderiam, de alguma forma , colaborar com o problema. Também, coloque um capacitor de .1 microfarads junto aos terminais +5v e – (se possivel ,bem nos pinos 1 e 8 do 12f629). Se você tem facilidade em programar, sinta-se a vontade para alterar o software e faça testes, também. Caso encontre o problema antes de mim, me de um retorno.
    Claúdio

  43. 0

    Bom dia Cláudio.
    Testei o HEX com wacht dog postado, agora os leds que estão nas saidas e o led do learn ficam piscando contiuamente bem fracos, não é necessário precionar o botão learn para memorizar os transmissores e a memória não está apagando para descadastrar os transmissores. Quando acionado o transmissor os leds das saidas acionam normalmente.
    ————————————————–
    Os testes do HEX anterior foram feitos em locais diferentes (em 03 cidades distante +/- 25KM uma da outra, na empresa onde trabalho na minha casa e na casa de um amigo)e com 02 circuitos, um deles travou em 2,5 horas e o outro ficou ligado dois dias e também travou. Auteramos o ASM e utilizei o pino 04 que estava vago para acionar as saidas setando PULSO ou RETENÇÃO e também trava, neste ASM não será possível programar PULSO ou RETENÇÃO pois o software está sempre se resetando. Estou utilizando uma hibrida receptora 433,92 MHz fabricada pela DHAY DO BRASIL a mesma utilizada em outros projetos, qual receptora você utiliza? Hibridas receptoras podem influênciar no funcionamento do circuito? Qual hibrida você utiliza? Obrigo pelo retorno. Até mais.

    1. 0

      Olá Vagner!
      Como sempre, testei o circuito postado com o arquivo hex e não tive problemas aqui. Mas sei que, tudo na eletronica é possivel. Por ex., em regiões de fortes interferencias podem acontecer coisas estranhas com qualquer microcontrolador.
      Por favor, experimente a versão com WatchDog postado acima. Nesta versão, sem haver recepção, ele ‘reseta’ pelo watchdog. Acho que se for interferencias fortes na sua região, deverá resolver. Vamos tentar? Depois voce me retorna se deu certo,ok!!!
      Cláudio

  44. 0

    Bom dia Claudio.
    Primeiramente quero parabenizar por dividir seus conhecimentos com todos.
    Bom, montei o receptor na protobord primeiramente ede inicio funcionou perfeitamente mas depois de algum tempo ligado o circuito travou sendo necessário desligar e religar novamente “resetar”, isto aconteu várias vezes pensei que pudesse ser algum mal contato da protobord então montei em uma placa padrão mas continuou travando, já testei o circuito com fonte chaveada 12V/1A e com bateria 12V/7A. Pergunto, você tem idéia do que possa está acontecendo? No aguado. Obrigado.

  45. 0

    Olá Claudio. Parabens pela iniciativa de disponibilizar seu conhecimento.
    Montei o receptor generico para HT6P20B, mas não funcionou…
    O esquema diverge um pouco do software. No software, o pino 2(GPIO5) tem ligado tanto o led quanto o botão Learn, e no esuqema estão em pinos separados. Alem disso não consigo fazer o circuito aprender o codigo. Pode ajudar ?
    Obrigado

    1. 0

      Olá Ricardo! Voce tem razão! Os arquivos anteriores asm e hex realmente eram para outra placa, postado por engano.Já mudei para os coretos (rx_gen_ht6p20b_ok_asm e hex). Testei a montagem em protoboard e funcionou redondo com o esquema apresentado no Post . Acredito que se voce carregar o novo arquivo hex acima, vai funcionar também. Para teste usei um controle de portão ppa e também um receptor de presença da genno. Me dá um retorno quando possivel. Desculpe o inconveniente.

Comments are closed.