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

1

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

1

248 comentários sobre “RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

  1. 0

    Boa tarde claudio tudo bem? a um tempo atrás vc me passou uma alteração para ser feita,passou um bom tempo, agora que estou com tempo para concluir o projeto fiz a pci, porem está dando um bug,Preciso que ao acionar um botão do controle HT6P20,o pino 5 do pic12f629 fica led aceso, e ao acionar outro botao o led do pino 5 apaga e acende o led do pino 6, assim sucessivamente.
    Seria possivel voce me ajudar mais uma vez? Fico muito Grato!Valeu.

  2. 0

    Cláudio, boa noite!

    Para fins de aprendizado montei este circuito em minha protoboard, baixei o arquivo, compilei, gerou o arquivo HEX, utilizei o programador K150 para gravar o pic e fui testar …. Porém … o mesmo não está gravando o controle que estou utilizando (http://produto.mercadolivre.com.br/MLB-655061336-controle-remoto-jfl-rolling-code-433-mhz-para-porto-alarme-_JM) na memória.

    Por exemplo: se eu segurar o botão ‘learn’, após um período longo de tempo, é setado a memória apagando todos os controles nele gravados, ok, isso deu certo, se eu segurar o botão por um tempo o ‘learn’ pisca 3 vezes indicando o mesmo. Ok, mas quando fui gravar, simplesmente não funcionou! Ou seja, o led nao pisca uma vez indicando que foi gravado nem nada, simplesmente não funciona auhsuahsuha

    Se pudesse me ajudar ficaria muito agradecido, pois já testei todas as ligações, e até o receptor rf, visto que ele altera-se o valor de tensão quando um botão do emissor (chaveirinho) é apertado, e esta tudo ok pelo que testei.

    1. 0

      Olá Bruno!
      Se não me engano, este seu controle trabalha com sistema ‘rolling code’, que troca os dados a cada transmissão, geralmente usando o integrado da família Hcs xxx. Já o receptor de controle remoto genérico para Ht6p20b tem que usar o integrado Ht6p20b no chaveirinho transmissor. Por favor, abra seu controle e verifique se isto acontece. Se não for, terá que adquirir um controle que tenha ele ou usar um outro software como o receptor genérico flex com esquema de montagem apropriado. Mas no último caso, não será possível aproveitar a parte ‘rolling code’, mas unicamente o serial enviado. Para usar a função ‘rolling’ exige-se que o integrado HCSxxx seja programado para uma chave criptografada e a mesma tem de ser usada no receptor. Fica bem complexo e não recomendo para iniciantes.
      Cláudio

      1. 0

        Cláudio, boa tarde!

        Então, comprei este chaveirinho mais especificamente pois ele vem com o smd do HT6p20b, porém, não me atentei a este detalhe do ‘rolling code’, pois desconhecia isso …

        Irei adquirir outro controle remoto genérico, com o HT6p20b porém dessa vez sem o ‘rollin code’ e farei o teste novamente. Muito obrigado.

        1. 0

          Olá Bruno !
          Se este seu controle usa o smd Ht6p20b então deveria funcionar, exceto que não seja da frequência 433mhz. Verifique se a frequência veio corretamente compatível com o teu receptor. Se veio errada, você decidirá se compra outro tx ou receptor.
          Cláudio

  3. 0

    Parabéns pela dedicação.

    Embora estes controles sejam bastante INSEGUROS, pois são de fácil clonagem, bastando identificar a sequencia e repetir.

    Gostaria de comentar também, que tenho feito uso do receptor comercial (http://www.spya.net/ftp/intrusao/ecp/manuais/Manual%20Reptor%20433MHz%202%20Canais.pdf) para ocasiões onde não são necessárias muita segurança.

    Poderia sugerir para uma próxima versão, um receptor que tenha seleção de função, como ocorre no receptor citado acima.

    Obrigado.

    1. 0

      Olá rtek1000!
      Obrigado por seu elogio aos trabalhos realizados pelo blog. Agradeço também a sua sugestão, que talvez possa ser base para um futuro artigo.
      Cláudio

  4. 0

    Bom dia Claudio!Estou querendo montar um tipo de interruptor pro farol de de milha de carro.Gostaria de saber se voce pode montar um programa com pic12f629.
    Seria assim,(EXEMPLO). NO PINO 2 DO CI VAI TER UM BOTAO DE PULSO,(tipo que usa nos controles remotos).quando acionar pra o terra, fica asceso um led1 que vai ser no pino 3 do ci, e tambem o led2 pino 4. Quando eu acionar duas vezes em seguida, fica o led1 piscando,o led2 apagado,e fica aceso o led3 que vai sair do pino 5 do ci.E quando eu presionar o botao por mais de 2 segundos apaga tudo, tem como? Quanto vc cobra? Valeu!
    a pinagem do ci nao precisa ser esta sequencia, pode ser a que der pra fazer.ABRAÇOS.
    Geraldo Santos (gsnsoares@yahoo.com.br)

    1. 0

      Olá Geraldo!
      Parece que você tem uma ideia interessante! Mas não realizo programas comercialmente, apenas para o blog e em base experimental, pois sou apenas um hobista nesta atividade. Se você puder compartilhar a ideia conosco poderei colocar no ‘caderninho’ para no futuro fazer um artigo que possa ser usado por outros colegas. Agora se for algum projeto para fins comerciais, então poderá direcionar o trabalho para um profissional de programação da sua escolha.

      Cláudio

  5. 0

    Boa noite Claudio;
    Conforme explicado, modificaria o tempo das saídas estou certo?
    Como farei para mudar apenas a saída 2 por exemplo, preciso de uma com tempo curto e outra com tempo longo 120s.
    Estes tempo servirão para luz de cortesia para uma garagem.
    Desde já agradeço a atenção.

    1. 0

      Olá Marcelorxds!
      Sim, modificaria os tempos de saídas. Seguindo aquele exemplo anterior, poderá fazer um desvio do programa para acessar um delay maior e o outro menor:

      Veja a porção do código abaixo modificada para funcionar com 2 tempos diferentes:

      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

      BTFSS LED2
      GOTO TEMPORIZA_LED1
      MOVLW .20
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO (TEMPO CURTO)
      BCF LED2
      TEMPORIZA_LED1:
      BTFSS LED1
      GOTO INICIO
      MOVLW .255 (TEMPO LONGO)
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO
      MOVLW .255
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO
      MOVLW .255
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO
      MOVLW .255
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO
      MOVLW .255
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESO ;COLOQUE QUANTOS FOREM NECESSÁRIOS PARA SEU TEMPO DESEJADO
      ….
      BCF LED1
      GOTO INICIO

      Este é um jeito , no meu ver, mais simples para sua necessidade.

      Cláudio

  6. 0

    BOA TARDE,
    PARABÉNS PELO TRABALHO, SOU INICIANTE EM PROGRAMAÇÃO,GOSTARIA DE SABER SE É POSSÍVEL NESTE OU OUTRO CONFIGURAR A SAÍDA PULSO COMO TEMPORIZADA
    OU AUMENTAR O TEMPO DO PULSO?

    1. 0

      Olá Marcelo! Sim, é possível. Mas cada versão postada será de uma forma diferente. Por exemplo, na versão RX_GEN_HT6P20BV3P1.ASM basta alterar o valor do delay do tempo ligado, conforme porção de código abaixo e recompilar:

      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 << aumente este valor para mais tempo
      CALL DELAYM ;TEMPO QUE SE MANTEM ACESOS
      BCF LED1
      BCF LED2
      GOTO INICIO

      Se o tempo requerido for grande, haverá necessidade de usar mais registradores em cascata.

      Cláudio

  7. 0

    Olá, Lários… Ainda não desisti…tenho estudado a programação em C (CCS), mas como faço isso por hobby, tenho muitas dificuldades… gostaria muito de desenvolver um projeto em que, no mesmo PIC, pudesse fazer a decodificação do HT6P20 e as demais rotinas, como acionar um motor, por exemplo… Acontece que tenho pesquisado muito na internet e a rotina para decodificação do “maldito” parece um segredo guardado a sete chaves… além de ter poucos exemplos, são muito complexos… ficaria eternamente grato (na verdade ja sou) se escrevesse o código desse teu decodificador em C (pode ser a V1 mesmo)… não tenho pressa, ja estou esperando ha tempos mesmo… de qualquer forma, sou muito grato aos teus projetos e ensinamentos. Grande Abraço.

    1. 0

      Olá Waymovie!
      Realmente, não encontramos muitos artigos sobre isto. O problema geralmente é que dependendo da aplicação, temos que escolher a forma de recepção de sinais rf mais apropriada ao conjunto: por interrupção de pino de entrada, por interrupção de timer, por inclusão na rotina em loop constante. A temporização para recepção de sinais pode ser um grande problema junto com outras rotinas. Assim, cada caso “é um caso”. Poderá usar as informações do artigo “RECEPTOR GENERICO FLEX – UM PROGRAMA PARA VARIAS OPÇÕES DE CIRCUITOS INTEGRADOS – COM PIC 12F675/629” para iniciar seus testes.
      Cláudio

    1. 0

      Olá Douglas!
      Como os esquemas obviamente serão diferentes, faça primeiro um esquema elétrico novo, com as entradas e saídas, escolhendo quais pinos deseja usar e suas funções . (Use o datasheet ) Inicie escolhendo qual das versões deseja fazer (simples, com retenção, etc, das versões v1 a v7). Abra o arquivo asm escolhido no Mplab e salve-o com um novo nome. Substitua os arquivos de ‘include’ de pic 12f629 para o modelo 16f628a. Depois terá que alterar o port de GPIO para ‘PORTA’ ou ‘PORTB’, acertando também o sentido do port usado (entrada ou saída) com o registrador TRISA ou TRISB. Use o datasheet para identificar quais são os pinos e sua funções. Altere a palavra de configuração para corresponder de forma idêntica. As grafias costumam ser diferentes entre os pic’s usados e apresentarão erro ao compilar. (Abra os arquivos ‘includes’ com um Notepad e veja como ele deve ser grafado). Compile o arquivo e elimine algum erro gerado na transição de modelo. Se tudo correr bem, grave um pic 16f628a . Monte o esquema elétrico e insira o pic já gravado. Alimente o circuito. Grave o controle remoto na memória, conforme os procedimentos explicados no artigo.
      Existem ‘n’ pics disponíveis no mercado, sendo impossível para mim fazer uma versão para cada modelo. Mas, com um pouco de paciência e persistência, você conseguirá fazer esta modificação.
      Cláudio

  8. 0

    Bom dia cláudio!parabéns pelo projeto,estou fazendo um modelo de um mini elevador eu usei a sua versão 6 com retenção com pic 12f629.Se possível, gostaria que modificasse, ao pressionar um botão do controle remoto led 1, fica aceso,e ao pressionar o outro botão do controle, led 1 apaga e acende o led 2,assim vice versa.E ter uma opção de apagar o led que estiver aceso via aterramento de um dos pinos do pic, vou usar sensor fim de curso, ou se tiver como fazer um comparador de tensão para apagar os leds, melhor ainda,aí não precisa de sensor fim de curso.Valeu!

    1. 0

      Olá Geraldo!

      Obrigado por seu comentário apreciativo. Não estou em condições de mexer com isto agora, mas você mesmo
      poderá fazer as modificações no asm, que julgar necessárias.
      Como sugestão, você poderá usar o asm RX_GEN_HT6P20_V3P2_ASM e fazer algumas mudanças nele conforme segue:

      Localize a porção de código abaixo no asm citado:

      ;===================================================

      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

      ;==============================================

      substitua toda esta parte, com muito cuidado para não
      pegar linhas erradas, por esta parte abaixo:
      (Use control_c, control_v , para copiar e colar sobre a
      área marcada no asm)

      ;===================================================
      ACIONAR

      BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
      GOTO SEGA1
      BSF LED1 ;LIGA LED1
      BCF LED2 ;DESLIGA LED2

      SEGA1
      BTFSS RES2,6 ;TESTA QUAIS BOTÕES
      GOTO SEGA2
      BSF LED2 ;LIGA LED1
      BCF LED1 ;DESLIGA LED2

      SEGA2

      GOTO INICIO
      ;====================================================

      também, deverá localizar esta porção de código abaixo:

      INICIO:

      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
      MOVWF BITCOUNTER

      L0
      BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
      CLRF HC
      CLRF LC
      L1
      ;———————————

      e substituir por esta:

      INICIO:
      BANK1
      BSF TRISIO,4 ;PINO 3 COMO ENTRADA
      BANK0
      BTFSC GPIO,4
      GOTO CONTJ7
      BCF LED1 ;APAGA LEDS SE PINO 3 FOR ATERRADO
      BCF LED2

      CONTJ7
      CLRF RES3
      CLRF RES2
      CLRF RES1
      CLRF RES0
      MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
      MOVWF BITCOUNTER

      L0
      BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
      CLRF HC
      CLRF LC
      L1
      ;———————————

      esquema em : http://larios.tecnologia.ws/iBlog/wp-content/photos/2012/05/DECODER-GENERICO-PIC629.bmp

      Acrescente no pino 3 um interruptor (botão) ao gnd e pull up de 10k ao vcc, igual ao pino 4.Este irá apagar o led.

      Depois destas mudanças, salve o arquivo com um novo nome e recompile usando o Mplab para obter um novo hex.
      Grave o pic com este novo hex alterado. Não testei, mas deverá funcionar (se não errei… é claro!)

      Cláudio

    2. 0

      Opa! Claudio, me perdoe pela minha inesperiencia em programação,montei a placa deu certo,mas a modificação que vc me passou,infelizmente não funcionou, acredito eu que fiz algo errado.Se conseguisse pelo menos fazer a opção de apertar um botão, ficar aceso led 1 e ao apertar outro botão apagar led 1 e acende led 2 e vice versa, ficarei muito satisfeito. Para mim fazer a opção de resetar, fiz um circuito que ao acionar o sensor, corta a alimentação do pic, assim vem tudo apagado.Valeu!

      1. 0

        Olá Geraldo!
        Realmente não foi culpa sua. Olhando melhor o programa, percebi que eu cometi um engano na parte do ‘acionar’. Por favor, tente usar a porção de código parte abaixo:

        ;=========================================================================
        ACIONAR

        BTFSS RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
        GOTO SEGA1
        BSF LED1 ;LIGA LED1
        BCF LED2 ;DESLIGA LED2

        SEGA1
        BTFSS RES2,6 ;TESTA QUAIS BOTÕES
        GOTO SEGA2
        BSF LED2 ;LIGA LED1
        BCF LED1 ;DESLIGA LED2

        SEGA2
        GOTO INICIO

        ;==============================================================
        A anterior estava dando mensagem de erro em pelo menos 2 pontos.

        O resto da mudança segue a mesma.

        Fico no aguardo.

        Cláudio

    3. 0

      Bom dia claudio, já estou sem graça por te incomodar!
      como falei,não entendo de programação, fiz todas as alterações nos códigos que você me passou,mas na hora de compilar no mplab dá erro e não compila! tem 3 dias que estou tentando,kkkk, me ajude por favor!!!!!Valeu!

    4. 0

      o erro que dá, e;Debug build of project `C:\Users\Guilherme\Desktop\HT6p20\ht6p20.mcp’ started.
      Language tool versions: MPASMWIN.exe v5.34, mplink.exe v4.34
      Preprocessor symbol `__DEBUG’ is defined.
      Mon Sep 08 15:26:35 2014
      ———————————————————————-
      Build aborted. The project contains no source files.
      ———————————————————————-
      Debug build of project `C:\Users\Guilherme\Desktop\HT6p20\ht6p20.mcp’ failed.
      Language tool versions: MPASMWIN.exe v5.34, mplink.exe v4.34
      Preprocessor symbol `__DEBUG’ is defined.
      Mon Sep 08 15:26:35 2014
      ———————————————————————-
      BUILD FAILED

      1. 0

        Olá Geraldo! Parece que você esqueceu de incluir o seu asm no projeto. Você deverá ir na aba ‘Projects’ e em seguida na aba ‘ Adds file to project’ e adicionar o arquivo com o assembler desejado (tem que ter terminação ‘.asm’, se não estiver salve com esta terminação). Então tente de novo compilar. Deverá desaparecer a mensagem “Buid aborted. The project contains no source files”.
        Cláudio

          1. 0

            Olá Geraldo! Parabéns pela sua persistência! Espero que não tenha mais ‘medo do compilador’.
            Cláudio

  9. 0

    Boa Tarde Claudio, primeiro parabéns por todos os projetos. Bom eu gostaria de saber se há como aumentar a capacidade de gravação de txs de 21 para mais sem mudar o pic ou adicionar memoria externa. Fico no aguardo de uma resposta. Grato. Tiago

    1. 0

      Olá Tiago!
      Obrigado por seu comentário apreciativo. Quanto a aumentar o número de controles, o pic citado tem apenas 128 bytes de eeprom, usando 3 bytes por botão (modo individual) ou 3 bytes por controle (modo aprendizado único). Fica meio ‘apertado’ fazer isto no pic 12f629/675 , pois necessitaria mais 2 pinos para ligar uma memória I2c (24c08 por exemplo), pois temos apenas 6 io’s, sendo uma para recepção do tx, uma para o botão de aprendizado, uma para o led, 3 para saídas dos canais. Faltaria para a eeprom externa. Poderá ver alguma coisa sobre isto estudando o artigo ‘BIG_GEN II – RECEPTOR GENERICO (GRAVA ATÉ 255 CONTROLES HT6P20B/HCS200…301) – COM GRAVAÇÃO E APAGAMENTO INDIVIDUAL DE CONTROLES E LCD’.
      Claudio

  10. 0

    boa tarde Claudio, amigão montei o hardware deste receptor genérico pra usar com modo pulso e cadastrando individualmente os botoes do tx para aproveitar o maximo da memória, montei a pcb e fui até um distribuidor pra testar com txs mesmo, notei um bug que talvez não tenha percebido ainda,ou talvez tenha até corrigido, mas na versão que carreguei pro pic esteja ainda o erro, acontece o seguinte, cadastrei 41 tx, quando vou cadastrar o 42° ele aceita o cadastro mas não salva e junto apaga a memoria do primeiro tx que foi cadastrado, ai tento cadastrar outro, que deveria ir apagando os outros códigos e o que acontece, ele cadastra esse tx mas apaga todos os outros códigos da memória,como se tivesse feito um reset, mas como não tinha como eu acessar a memória pra visualizar o que está cadastrado nelas, ele de qualquer forma perde todos os outros tx tendo que cadastrar tudo de novo, não tem uma forma de bloquear o cadastro de novos TXs quando ele encher a memória? limitar em 40 txs e se tentar cadastrar piscar o led de alguma forma diferente acusando erro e não permitir mais o cadastro, usei a versão RX_GEN_HT6P20_V3P1_ASM
    grande abraço!

  11. 0

    lario fiz os procedimentos conforme sua orientação,continua sem compilar vou baixar uma outra versão do mplab pode ser que seja isto.pois outros arquivos eu compilo normal e este nem o arquivo original não quer compilar.rsrsrrs

  12. 0

    hem lario o hex da versão 6 está ok eu apenas não conseguir foi mudar de pic. quando compilo aprensenta
    erro 115, dai nao consigo decifrar o que o meu amigo compilador está querendo me dizer.rsrrs

    1. 0

      Olá José! Verifique, por favor, se não está havendo um ‘label’ repetido. Ao mudar de pic, de 629 para 675, e vice-versa, certifique de comentar um e descomentar o outro, senão não funciona.
      ;ESCOLHA APENAS UM MODELO MICROCONTROLADOR
      ;(DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS, NUNCA AS 2 OPÇÕES)

      #DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629 ;para 629
      ;#DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675

      ou

      ;ESCOLHA APENAS UM MODELO MICROCONTROLADOR
      ;(DESCOMENTE A OPÇÃO DESEJADA E COMENTE AS OUTRAS, NUNCA AS 2 OPÇÕES)

      ;#DEFINE PIC_629 ;ESCOLHE MICROCONTROLADOR PIC12F629
      #DEFINE PIC_675 ;ESCOLHE MICROCONTROLADOR PIC12F675 ;para 675
      Claudio

  13. 0

    olá claudio depois que recebir meu chaveirinho ht6p
    montei varios projetos contido neste site,so estou um pouco intrigado é que nao conseguir compilar a versão 6 deste receptor RX_GEN_629_V6P1_ASM será que voce poderia me dar uma ajudinha quero usar o pic 12f675,nem mesmo o 629 não compila.fico no aguardo abraço

  14. 0

    Eu quero parabenizar Claudio Larios, pelo que tem feito para o leitor, mais não estou conseguindo copilar pelo arquivo que postou, eu uso picburne.
    tem como você me passar o arquivo copilado do receptor(12f629) para controles 6p20 por e-mail,
    obrigado pela atenção.
    Rodrigo

    1. 0

      Olá Rodrigo! Obrigado por seu comentário encorajador. Você poderá baixar o arquivo desejado deste blog, com extensão de texto (_hex) e salva-lo com extensão .hex. Se tiver problemas, mesmo assim, use o WinPic800 (gratuito) para abrir o arquivo _hex fornecido. Escolha o microcontrolador igual ao usado no _hex, senão dará mensagem de erro de microcontrolador (por tamanho do arquivo). Note que na hora que você for ‘abrir’ o arquivo no WinPic800, deverá mudar o filtro do ‘tipo’ de *.hex para *.* . Após abrir, salve-o como arquivo *.hex, em uma pasta de sua preferencia e com o nome desejado. Com este arquivo terá que abrir.
      Claudio

  15. 0

    Olá Larios!! Estão muito bons os projetos postados… muito legal mesmo essa iniciativa. Olha só, to precisando de um receptor muito parecido com esse, só que gostaria que só tivesse uma saída… ou seja, que ele aprendesse, por exemplo, os três botões de controle e, independentemente do botão pressionado, fosse enviado um PULSO na saída existente… pesquisei muitas vezes nas várias opções aqui disponíveis, mas não encontrei uma que tivesse essa característica… Tem como verificar isso pra mim??? Abraço e parabéns pelo trabalho.

    1. 0

      Olá Waymovie!
      Infelizmente, não dá para fazer todas as combinações possÍveis de receptores. Mas poderá usar o ASM da versão ‘RX_GEN_HT6P_V4P1_ASM’ e altera-la para o modo que deseja.
      Faça o seguinte:

      Nas parte de ‘DEFINES’, escolha para uma única saída por fazer o seguinte:
      DE:
      ERRORLEVEL -302
      __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF

      #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
      #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
      #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
      #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
      #DEFINE FLAGGR FLAGS,2 ;FLAG DE ‘LEARN’ APRENDER
      #DEFINE SIN GPIO,0 ;PINO 7 IN RF
      #DEFINE LRN GPIO,3 ;PINO 4 IN LEARN BOTTON
      #DEFINE LED GPIO,5 ;PINO 2 SAIDA LED ‘LEARN’
      #DEFINE LED2 GPIO,2 ;PINO 5- SAIDA DO LED2
      #DEFINE LED1 GPIO,1 ;PINO 6- SAIDA DO LED1

      para

      ERRORLEVEL -302
      __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF

      #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
      #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
      #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
      #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
      #DEFINE FLAGGR FLAGS,2 ;FLAG DE ‘LEARN’ APRENDER
      #DEFINE SIN GPIO,0 ;PINO 7 IN RF
      #DEFINE LRN GPIO,3 ;PINO 4 IN LEARN BOTTON
      #DEFINE LED GPIO,5 ;PINO 2 SAIDA LED ‘LEARN’
      #DEFINE LED2 GPIO,2 ;PINO 5- SAIDA DO LED2 ;<——————-deixe iguais
      #DEFINE LED1 GPIO,2 ;PINO 5- SAIDA DO LED2 ;<——————- estes dois (poderia ser o outro pino também, nos dois)

      Escolha o modelo do microcontrolador por comentar/descomentar as linhas no programa em:

      ; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO
      ; LIST P=12f675 , R=DEC
      LIST P=12f629 , R=DEC
      ; INCLUDE "P12F675.INC"
      INCLUDE "P12F629.INC"

      e também:

      ;DESCOMENTAR ABAIXO PARA 12F675
      ; BANK1
      ; MOVLW .0
      ; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
      ; BANK0

      Em seguida, recomplie e use o Hex gerado para gravar o pic.

      Claudio

        1. 0

          Putz, Larios… Dessa vez não funcionou. Fiz conforme tu disse, recompilei usando o 12F629 e funciona somente um botao do controle… o outro botao é da uma piscadinha bem de leve, mas com o multimetro nem consegui medir a tensão, de tão fraquinha…. Confirma se a alteração que tem que fazer é só essa… Tentei com a versão RX_GEN_HT6P20_V3P1_ASM, mas tb não rolou. Aguardo

          1. 0

            Olá Waymovie!
            Não fique estressado com isto. Tenha certeza que é uma coisa simples. O segredo está em não desistir.
            Pode ‘colar’ o seu arquivo asm no comentário para dar uma olhada?
            Claudio

          2. 0

            Opa…. consegui o arquivo… ta aí. Abç..

            ;**************************************************************************
            ; RX_GEN_HT6P20B_V4P1.ASM
            ;
            ;
            ; RECEPTOR RF PARA CONTROLE REMOTOS (CHAVEIRINHOS) COM CI HT6P20B
            ;
            ; PARA DECODIFICAR UTILIZA UM PIC 12F629 (OPCIONALMENTE UM 12F675, DES-
            ; COMENTANDO/COMENTANDO AS LINHAS CITADAS NO TEXTO).
            ;
            ; CLAUDIO LÁRIOS INICIO: 27-07-2012 TERMINO:28-06-2012
            ; REVISADO : 05-8-2012
            ; (ELIMINADO ‘BUG’ QUE TRAVAVA SOB INTERFERENCIA FORTE NA ENTRADA ‘RFIN’)
            ; REVISADO 04-01-2013
            ; (ELIMINADO BUG DE FALSA RECEPÇÃO COM CÓDIGO ‘FFFFFF’C/ INTERFERÊNCIAS
            ; ELIMINADO BUG DE MAU FUNCIONAMENTO COM CÓDIGOS DE CONTROLES SEQUENCIAIS)

            ; VERSÃO4: MANTÉM LEDS ACESOS ENQUANTO BOTÃO FICAR PRESSIONADO (NÃO PISCA)
            ;**************************************************************************
            ;
            ; GRAVAR CONTROLE: APERTE UM BOTÃO DO CONTROLE E MANTENHA APERTADO.
            ; APERTE TAMBÉM O BOTÃO ‘LEARN’ NA PLACA (PINO 4 DO PIC 12F629 A MASSA)E
            ; SOLTE-O EM MENOS DE 1 SEGUNDOS. O LED ‘LEARN'(PINO 2) PISCARÁ 1
            ; VEZ, PARA INDICAR ‘CODE APRENDIDO’. REPITA ISTO COM O OUTRO BOTÃO DO CONTROLE
            ; E COM TODOS OS CONTROLES REMOTOS QUE FOR UTILIZAR, UM POR VEZ.
            ; APAGAR TODOS OS CONTROLES DA MEMÓRIA: APERTAR BOTÃO ‘LEARN’ NA PLACA E
            ; MANTENHA PRESSIONADO POR MAIS DE 10 SEGUNDOS. O LED ‘LEARN’ (PINO 2) PISCARÁ
            ; 3 VEZES , INDICANDO O PLENO APAGAMENTO DE TODOS OS SENSORES DA MEMÓRIA.
            ; APÓS ISTO, CADA CONTROLE DEVERÁ SER ‘REAPRENDIDO’ NOVAMENTE PARA OPERAR.
            ;***************************************************************************
            ; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO
            ; LIST P=12f675 , R=DEC
            LIST P=12f629 , R=DEC
            ; INCLUDE “P12F675.INC”
            INCLUDE “P12F629.INC”
            ;————————–
            ERRORLEVEL -302
            __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF

            #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
            #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
            #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
            #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
            #DEFINE FLAGGR FLAGS,2 ;FLAG DE ‘LEARN’ APRENDER
            #DEFINE SIN GPIO,0 ;PINO 7 IN RF
            #DEFINE LRN GPIO,3 ;PINO 4 IN LEARN BOTTON
            #DEFINE LED GPIO,5 ;PINO 2 SAIDA LED ‘LEARN’
            #DEFINE LED2 GPIO,2 ;PINO 5- SAIDA DO LED2 ;<——————-deixe iguais
            #DEFINE LED1 GPIO,2 ;PINO 5- SAIDA DO LED2 ;TMAX (REJEITAR DADO – PAUSA INICIAL)
            ;F’

            ;———————————–

            ;G
            MOVFW HC ;OBTEM O VALOR DE ‘CARRY'(HUM OU ZERO)
            SUBWF LC,W

            RRF RES3,F ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO
            RRF RES2,F
            RRF RES1,F
            RRF RES0,F
            ;————————————-
            ;H

            DECFSZ BITCOUNTER,F ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO
            GOTO L0 ;LE PROXIMO BIT

            MOVLW .4 ;DESPREZA OS BITS DE ‘ANTICODE’ 1010
            MOVWF BITCOUNTER
            ACERTA
            BCF STATUS,C
            RRF RES3,F
            RRF RES2,F
            RRF RES1,F
            RRF RES0,F ;RESULTADO FICA SOMENTE EM RES2 A RES0,DESPREZA RES3
            DECFSZ BITCOUNTER,F
            GOTO ACERTA

            BTFSC FLAG1 ;TESTA SE É A PRIMEIRA OU A SEGUNDA RECEPÇÃO
            GOTO PULA1
            MOVFW RES2 ;SALVA A PRIMEIRA LEITURA PARA COMPARAÇÃO COM UMA SEGUNDA
            MOVWF RES2A
            MOVFW RES1
            MOVWF RES1A
            MOVFW RES0
            MOVWF RES0A
            BSF FLAG1 ;SETA FLAG DE PRIMEIRA RECEPÇÃO

            GOTO INICIO
            PULA1
            BCF FLAG1 ;SEGUNDA RECEPÇÃO, COMPARA COM A PRIMEIRA
            MOVFW RES2
            XORWF RES2A,W
            BTFSS STATUS,Z
            GOTO RESETAC
            MOVFW RES1
            XORWF RES1A,W
            BTFSS STATUS,Z
            GOTO RESETAC
            MOVFW RES0
            XORWF RES0A,W
            BTFSS STATUS,Z
            GOTO RESETAC ;ERRO DE RECEPÇÁO
            GOTO AÇÃO ;OK – BOA RECEPÇÃO

            RESETAC
            CLRF RES3A ; APAGA RESULTADOS DE COMPARAÇÃO
            CLRF RES2A
            CLRF RES1A
            CLRF RES0A
            GOTO INICIO

            ;————————————-
            AÇÃO

            ;===========================================================
            ;ROTINA PARA ELIMINAR RECEPÇÃO ‘FFFFFF’ (MEMÓRIA VIRGEM)
            MOVFW RES2
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            MOVFW RES1
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            MOVFW RES0
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            GOTO RESETAC ;RECEBEU ‘FFFFFF’ = ERRO

            R_CONT
            ;========================================================

            ;I
            BTFSS LRN ;BOTÃO ESTÁ APERTADO?7
            BSF FLAGGR
            CALL PPT
            MOVWF TMP_SALVO ;SALVA TMP
            SUBLW .0
            BTFSC STATUS,Z ; É ‘0’?
            GOTO APRENDER ;NENHUM CONTROLE FOI GRAVADO
            MADDRESS
            MOVFW TMP_SALVO
            MOVWF ADDRESS
            CALL EEREAD
            XORWF RES2,W ;COMPARA COM RES2
            BTFSS STATUS,Z
            GOTO PROXIMO
            DECF ADDRESS,F
            MOVFW ADDRESS
            CALL EEREAD
            XORWF RES1,W ;COMPARA COM RES1
            BTFSS STATUS,Z
            GOTO PROXIMO
            DECF ADDRESS,F
            MOVFW ADDRESS
            CALL EEREAD
            XORWF RES0,W ;COMPARA COM RES0
            BTFSC STATUS,Z
            GOTO ACIONAR ;ENCONTRADO CONTROLE NA MEMÓRIA
            PROXIMO ;VAI PARA O PROXIMO ENDEREÇO DE MEMÓRIA PROCURAR….

            MOVLW .3
            SUBWF TMP_SALVO,F ;ACERTA DE 3 EM 3 A POSIÇÃO DE BUSCA NA MEMÓRIA

            BTFSS STATUS,C
            GOTO APRENDER

            BTFSS STATUS,Z
            GOTO MADDRESS ;VOLTA A BUSCA

            APRENDER
            BTFSS FLAGGR ;TESTA SE BOTÃO ‘LEARN’ ESTÁ PRESSIONADO
            GOTO INICIO ;NÃO ESTÁ.
            CALL PPT ;ESTÁ, PEGA PONTEIRO
            MOVWF ADDRESS ;PEGA O ENDEREÇO APONTADO
            SUBLW 0X7E ;LIMITE MAXIMO DA EEPROM (128-1 /3= 42 BOTÕES OU 24 CONTROLES)
            BTFSS STATUS,C
            CLRF ADDRESS ;INICIA SOBREGRAVAÇÃO
            INCF ADDRESS,F ;SOMA 1
            MOVFW RES0
            MOVWF TMP ;COLOCA EM ‘TMP’
            MOVFW ADDRESS ;DA O POSIÇÃO DE MEMORIA A SER GRAVADO
            CALL EEWRITE ;ROTINA DE ESCRITA NA EEPROM
            INCF ADDRESS,F ;PROXIMA POSIÇÃO DE ESCRITA NA EEPROM
            MOVFW RES1
            MOVWF TMP
            MOVFW ADDRESS
            CALL EEWRITE
            INCF ADDRESS,F
            MOVFW RES2
            MOVWF TMP
            MOVFW ADDRESS
            CALL EEWRITE
            MOVFW ADDRESS
            MOVWF TMP
            MOVLW .0
            CALL EEWRITE ;GRAVA NOVO ENDEREÇO DE PONTEIRO
            BCF FLAGGR
            BTFSS LRN
            GOTO $-1
            MOVLW .10 ;TEMPO DE ATRASO
            CALL DELAYM

            BSF LED ;LIGA LED
            MOVLW .10 ;TEMPO DE ATRASO
            CALL DELAYM
            BCF LED ;DESLIGA

            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

            ;————————————————————–
            DELAYM
            MOVWF R0
            XC
            CALL AGUARDE
            DECFSZ R0,F
            GOTO XC
            RETURN

            ;****************************************************
            ;PEGA PONTEIRO NA EEPROM – ULTIMO ENDEREÇO
            PPT
            MOVLW .0
            CALL EEREAD ;LE PONTEIRO DA EEPROM
            RETURN

            AGUARDE ;ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM

            MOVLW .64
            MOVWF R1
            CG2
            CLRWDT
            MOVLW .255
            MOVWF R2

            DECFSZ R2,F
            GOTO $-1
            DECFSZ R1,F
            GOTO CG2
            RETURN

            EEWRITE

            ; ******* EEPROM WRITE ENABLE ******************
            ;endereço esta em ADDRESS
            ;DADOS A ESCREVER ESTA EM TMP(MSB)

            BANK1
            movwf EEADR
            BANK0
            MOVFW TMP ;PEGA PRIMEIRO DADO
            BANK1
            movwf EEDATA
            bcf EECON1, EEIF
            bsf EECON1, WREN ; enable Write\par
            movlw 0x55
            movwf EECON2
            movlw 0xAA
            movwf EECON2
            bsf EECON1, WR
            WRITE_SN_A clrwdt
            btfsc EECON1, WR ; Write complete ?\par
            goto WRITE_SN_A
            bcf EECON1, WREN ; disable Write\par
            BANK0

            clrwdt

            ESPERA1 ;DELAY ENTRE APAGAMENTOS
            CALL AGUARDE
            RETURN

            EEREAD
            ;endereço esta em ADDRESS
            ;DADOS LIDOS SERÃO ESCRITOS EM TMP0

            clrwdt
            ; MOVFW ADDRESS

            BANK1
            movwf EEADR
            bsf EECON1, RD ; do a read\par
            clrwdt
            btfsc EECON1, RD ; Read done ?\par
            goto $-1
            movf EEDATA,W
            BANK0
            MOVWF TMP ;RECUPERA PRIMEIRO NUMERO DA EEPROM
            clrwdt

            RETURN
            ;——————————————————————————
            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 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

            end

          3. 0

            Olá Waymovie! Olhando por cima, já percebi que o asm está incompleto, faltando toda a parte de inicialização. Talvez na hora que você arrastou e colou, perdeu parte do arquivo.
            Pegue o ASM original da versão 4 e salve com outro nome. Altere conforme te expliquei e recompile.
            Cláudio

          4. 0

            Buenas!! Larios… fiz o procedimento bem na manha, e ainda apresentou problema… funciona o aprendizado e apagamento dos controles normalmente, funciona somente um botao (fica aceso enquanto o botao é pressionado) e o outro botao, quando pressionado, apresenta inumeras piscadinhas bem fraquinhas… segue o o novo asm que foi gerado no teste:

            ;**************************************************************************
            ; RX_GEN_HT6P20B_V4P1.ASM
            ;
            ;
            ; RECEPTOR RF PARA CONTROLE REMOTOS (CHAVEIRINHOS) COM CI HT6P20B
            ;
            ; PARA DECODIFICAR UTILIZA UM PIC 12F629 (OPCIONALMENTE UM 12F675, DES-
            ; COMENTANDO/COMENTANDO AS LINHAS CITADAS NO TEXTO).
            ;
            ; CLAUDIO LÁRIOS INICIO: 27-07-2012 TERMINO:28-06-2012
            ; REVISADO : 05-8-2012
            ; (ELIMINADO ‘BUG’ QUE TRAVAVA SOB INTERFERENCIA FORTE NA ENTRADA ‘RFIN’)
            ; REVISADO 04-01-2013
            ; (ELIMINADO BUG DE FALSA RECEPÇÃO COM CÓDIGO ‘FFFFFF’C/ INTERFERÊNCIAS
            ; ELIMINADO BUG DE MAU FUNCIONAMENTO COM CÓDIGOS DE CONTROLES SEQUENCIAIS)

            ; VERSÃO4: MANTÉM LEDS ACESOS ENQUANTO BOTÃO FICAR PRESSIONADO (NÃO PISCA)
            ;**************************************************************************
            ;
            ; GRAVAR CONTROLE: APERTE UM BOTÃO DO CONTROLE E MANTENHA APERTADO.
            ; APERTE TAMBÉM O BOTÃO ‘LEARN’ NA PLACA (PINO 4 DO PIC 12F629 A MASSA)E
            ; SOLTE-O EM MENOS DE 1 SEGUNDOS. O LED ‘LEARN'(PINO 2) PISCARÁ 1
            ; VEZ, PARA INDICAR ‘CODE APRENDIDO’. REPITA ISTO COM O OUTRO BOTÃO DO CONTROLE
            ; E COM TODOS OS CONTROLES REMOTOS QUE FOR UTILIZAR, UM POR VEZ.
            ; APAGAR TODOS OS CONTROLES DA MEMÓRIA: APERTAR BOTÃO ‘LEARN’ NA PLACA E
            ; MANTENHA PRESSIONADO POR MAIS DE 10 SEGUNDOS. O LED ‘LEARN’ (PINO 2) PISCARÁ
            ; 3 VEZES , INDICANDO O PLENO APAGAMENTO DE TODOS OS SENSORES DA MEMÓRIA.
            ; APÓS ISTO, CADA CONTROLE DEVERÁ SER ‘REAPRENDIDO’ NOVAMENTE PARA OPERAR.
            ;***************************************************************************
            ; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO
            ; LIST P=12f675 , R=DEC
            LIST P=12f629 , R=DEC
            ; INCLUDE “P12F675.INC”
            INCLUDE “P12F629.INC”
            ;————————–
            ERRORLEVEL -302
            __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_OFF

            #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
            #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1
            #DEFINE FLAG FLAGS,0 ;FLAG DE SITUAÇÃO
            #DEFINE FLAG1 FLAGS,1 ;FLAG DE NOVA LEITURA
            #DEFINE FLAGGR FLAGS,2 ;FLAG DE ‘LEARN’ APRENDER
            #DEFINE SIN GPIO,0 ;PINO 7 IN RF
            #DEFINE LRN GPIO,3 ;PINO 4 IN LEARN BOTTON
            #DEFINE LED GPIO,5 ;PINO 2 SAIDA LED ‘LEARN’
            #DEFINE LED2 GPIO,2 ;PINO 5- SAIDA DO LED2
            #DEFINE LED1 GPIO,2 ;PINO 5- SAIDA DO LED2

            CBLOCK 0X20
            RES3,RES2,RES1,RES0,AUX,C3,C2,C1,C0,WS,TEMP,BITCOUNTER,FLAGS,TL0,TL1,TL2,Z2,Z1,Y1,Y2
            LcdDelayCounter,LcdDelayCounter1,tmpLcdRegister,tmpLcdRegister1,SITUAÇÃO
            temp,SDATA,AUX2 ,LC,HC ,CONT,RES3A,RES2A,RES1A,RES0A,X,R0,R1,R2,TMP1,TMP2,TMP3,ADDRESS,TMP,TMP_SALVO
            ENDC

            WRCFG EQU B’00000000′ ; PORTB: EEPROM WRITE TRI-STATE VALUE
            YTRISA EQU B’001001′ ; PORTA: TRI-STATE VALUE
            TMAX EQU .50 ;TEMPO MAXIMO DO SINAL LOW
            QBYTE EQU .28 ;QUANTIDADE DE BYTES A SER RECEBIDO (22 ADRESS+ 2 DADO+ 4 ANTICODE)
            TGR EQU .255 ;TEMPO DE BOTÃO APERTADO PARA APAGAR GRAVAÇAO

            T_DESL_LED EQU .20 ;TEMPO MÁXIMO QUE LEDS FICAM ACESOS APÓS CESSAR TRANSMISSÃO

            ORG 0X00
            GOTO START
            ORG 0X04
            RETFIE

            START:
            MOVLW 0X07
            MOVWF CMCON ;DESLIGA COMPARADORES
            CLRF GPIO ; RESET PORT
            MOVLW YTRISA ; SETUP PORTA
            TRIS GPIO

            ;DESCOMENTAR ABAIXO PARA 12F675
            ; BANK1
            ; MOVLW .0
            ; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
            ; BANK0
            CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS
            MOVLW TGR
            MOVWF Z2
            CLRF Z1 ;LIMPA REGISTRADORES
            INICIO:

            CLRF RES3
            CLRF RES2
            CLRF RES1
            CLRF RES0
            MOVLW QBYTE ;PREPARA PARA A RECEPÇÃO COM NUMERO DE BITS A RECEBER
            MOVWF BITCOUNTER

            L0
            BCF FLAG ;LIMPA FLAG E REGISTRADORES DE RECEPÇÃO
            CLRF HC
            CLRF LC
            L1
            ;———————————

            BTFSS LRN ;TESTA BOTÃO ‘LEARN’ APERTADO
            GOTO TAPAGAMENTO ;APERTADO, COMEÇA A CONTAR TEMPO MAX. DE APAGAMENTO
            MOVLW TGR
            MOVWF Z2 ;RECARGA DO TEMPO DE APAGAMENTO
            CLRF Z1 ;LIMPA REGISTRADORES
            L1H
            GOTO SS5

            TAPAGAMENTO ;APAGAR TODOS OS CONTROLES DA MEMÓRIA
            DECFSZ Z1,F
            GOTO L1H
            DECFSZ Z2,F
            GOTO L1H
            CALL APAGAEEPROM ;ATINGIU TEMPO MAXIMO: APAGAR MEMÓRIA

            BSF LED ;ACENDE LED (UMA PISCADA)
            MOVLW .10
            CALL DELAYM
            BCF LED ;APAGA LED
            MOVLW .10
            CALL DELAYM
            BSF LED ;ACENDE LED (UMA PISCADA)
            MOVLW .10
            CALL DELAYM
            BCF LED ;APAGA LED
            MOVLW .10
            CALL DELAYM
            BSF LED ;ACENDE LED (UMA PISCADA)
            MOVLW .10
            CALL DELAYM
            BCF LED ;APAGA LED
            MOVLW .10
            CALL DELAYM

            BTFSS LRN ;AGUARDA SOLTAR BOTÃO ‘LEARN’
            GOTO $-1
            GOTO INICIO

            ;===================ROTINA DE RECEPÇÃO==========================
            SS5:
            ;A

            BTFSS FLAG ;TESTA FLAG DE HUM/ZERO RECEBIDO
            GOTO L2 ;FLAG=0
            ;——————————–
            ;B
            BTFSS SIN ;SIN ? TESTA SINAL DE ENTRADA DO RECEPTOR DE RF
            GOTO M0 ; SIN=0
            ;———————————-
            L2
            ;C
            BTFSS SIN ;SIN ?
            GOTO LA1 ;SIN=0
            ;————————————-
            ;E
            BSF FLAG ;SIN=1
            INCF HC,F
            BTFSC STATUS,Z
            DECF HC,F
            GOTO LA2 ;VAI CONTAR TEMPO DE 50 MICRO SEGUNDOS
            ;———————————————————
            LA1
            ;D
            INCF LC,F ;INCREMENTA REGISTRADOR DE LOW SIGNAL NA ENTRADA RF
            BTFSC STATUS,Z
            DECF LC,F
            LA2

            DECFSZ Y1,F ;CONTADOR DE TEMPO DE DESLIGAMENTO DE SAIDAS
            GOTO J0
            DECFSZ Y2,F ;CONTADOR DE TEMPO DE DESLIGAMENTO DE SAIDAS
            GOTO J0
            BCF LED1 ;APAGA LEDS
            BCF LED2
            INCF Y1,F
            INCF Y2,F
            J0

            MOVLW .11 ;.11 = 80 MICROSEG (ACERTA TEMPO ENTRE LEITURAS DA ENTRADA DE RF)
            MOVWF CONT
            DECFSZ CONT,F
            GOTO $-1
            GOTO L1

            M0
            ;———————————-
            ;F
            MOVFW LC ;TESTA SE NÃO PASSOU DO LIMITE MAXIMO DE TEMPO EM LOW NA ENTRADA DE RF
            SUBLW TMAX
            BTFSS STATUS,C
            GOTO INICIO ;C=0 (-) – LC>TMAX (REJEITAR DADO – PAUSA INICIAL)
            ;F’

            ;———————————–

            ;G
            MOVFW HC ;OBTEM O VALOR DE ‘CARRY'(HUM OU ZERO)
            SUBWF LC,W

            RRF RES3,F ;DESLOCA O BIT NOS REGISTRADORES DE RESULTADO
            RRF RES2,F
            RRF RES1,F
            RRF RES0,F
            ;————————————-
            ;H

            DECFSZ BITCOUNTER,F ;DECREMENTA O CONTADOR DE BITS A SER RECEBIDO
            GOTO L0 ;LE PROXIMO BIT

            MOVLW .4 ;DESPREZA OS BITS DE ‘ANTICODE’ 1010
            MOVWF BITCOUNTER
            ACERTA
            BCF STATUS,C
            RRF RES3,F
            RRF RES2,F
            RRF RES1,F
            RRF RES0,F ;RESULTADO FICA SOMENTE EM RES2 A RES0,DESPREZA RES3
            DECFSZ BITCOUNTER,F
            GOTO ACERTA

            BTFSC FLAG1 ;TESTA SE É A PRIMEIRA OU A SEGUNDA RECEPÇÃO
            GOTO PULA1
            MOVFW RES2 ;SALVA A PRIMEIRA LEITURA PARA COMPARAÇÃO COM UMA SEGUNDA
            MOVWF RES2A
            MOVFW RES1
            MOVWF RES1A
            MOVFW RES0
            MOVWF RES0A
            BSF FLAG1 ;SETA FLAG DE PRIMEIRA RECEPÇÃO

            GOTO INICIO
            PULA1
            BCF FLAG1 ;SEGUNDA RECEPÇÃO, COMPARA COM A PRIMEIRA
            MOVFW RES2
            XORWF RES2A,W
            BTFSS STATUS,Z
            GOTO RESETAC
            MOVFW RES1
            XORWF RES1A,W
            BTFSS STATUS,Z
            GOTO RESETAC
            MOVFW RES0
            XORWF RES0A,W
            BTFSS STATUS,Z
            GOTO RESETAC ;ERRO DE RECEPÇÁO
            GOTO AÇÃO ;OK – BOA RECEPÇÃO

            RESETAC
            CLRF RES3A ; APAGA RESULTADOS DE COMPARAÇÃO
            CLRF RES2A
            CLRF RES1A
            CLRF RES0A
            GOTO INICIO

            ;————————————-
            AÇÃO

            ;===========================================================
            ;ROTINA PARA ELIMINAR RECEPÇÃO ‘FFFFFF’ (MEMÓRIA VIRGEM)
            MOVFW RES2
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            MOVFW RES1
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            MOVFW RES0
            XORLW 0XFF
            BTFSS STATUS,Z
            GOTO R_CONT
            GOTO RESETAC ;RECEBEU ‘FFFFFF’ = ERRO

            R_CONT
            ;========================================================

            ;I
            BTFSS LRN ;BOTÃO ESTÁ APERTADO?7
            BSF FLAGGR
            CALL PPT
            MOVWF TMP_SALVO ;SALVA TMP
            SUBLW .0
            BTFSC STATUS,Z ; É ‘0’?
            GOTO APRENDER ;NENHUM CONTROLE FOI GRAVADO
            MADDRESS
            MOVFW TMP_SALVO
            MOVWF ADDRESS
            CALL EEREAD
            XORWF RES2,W ;COMPARA COM RES2
            BTFSS STATUS,Z
            GOTO PROXIMO
            DECF ADDRESS,F
            MOVFW ADDRESS
            CALL EEREAD
            XORWF RES1,W ;COMPARA COM RES1
            BTFSS STATUS,Z
            GOTO PROXIMO
            DECF ADDRESS,F
            MOVFW ADDRESS
            CALL EEREAD
            XORWF RES0,W ;COMPARA COM RES0
            BTFSC STATUS,Z
            GOTO ACIONAR ;ENCONTRADO CONTROLE NA MEMÓRIA
            PROXIMO ;VAI PARA O PROXIMO ENDEREÇO DE MEMÓRIA PROCURAR….

            MOVLW .3
            SUBWF TMP_SALVO,F ;ACERTA DE 3 EM 3 A POSIÇÃO DE BUSCA NA MEMÓRIA

            BTFSS STATUS,C
            GOTO APRENDER

            BTFSS STATUS,Z
            GOTO MADDRESS ;VOLTA A BUSCA

            APRENDER
            BTFSS FLAGGR ;TESTA SE BOTÃO ‘LEARN’ ESTÁ PRESSIONADO
            GOTO INICIO ;NÃO ESTÁ.
            CALL PPT ;ESTÁ, PEGA PONTEIRO
            MOVWF ADDRESS ;PEGA O ENDEREÇO APONTADO
            SUBLW 0X7E ;LIMITE MAXIMO DA EEPROM (128-1 /3= 42 BOTÕES OU 24 CONTROLES)
            BTFSS STATUS,C
            CLRF ADDRESS ;INICIA SOBREGRAVAÇÃO
            INCF ADDRESS,F ;SOMA 1
            MOVFW RES0
            MOVWF TMP ;COLOCA EM ‘TMP’
            MOVFW ADDRESS ;DA O POSIÇÃO DE MEMORIA A SER GRAVADO
            CALL EEWRITE ;ROTINA DE ESCRITA NA EEPROM
            INCF ADDRESS,F ;PROXIMA POSIÇÃO DE ESCRITA NA EEPROM
            MOVFW RES1
            MOVWF TMP
            MOVFW ADDRESS
            CALL EEWRITE
            INCF ADDRESS,F
            MOVFW RES2
            MOVWF TMP
            MOVFW ADDRESS
            CALL EEWRITE
            MOVFW ADDRESS
            MOVWF TMP
            MOVLW .0
            CALL EEWRITE ;GRAVA NOVO ENDEREÇO DE PONTEIRO
            BCF FLAGGR
            BTFSS LRN
            GOTO $-1
            MOVLW .10 ;TEMPO DE ATRASO
            CALL DELAYM

            BSF LED ;LIGA LED
            MOVLW .10 ;TEMPO DE ATRASO
            CALL DELAYM
            BCF LED ;DESLIGA

            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

            ;————————————————————–
            DELAYM
            MOVWF R0
            XC
            CALL AGUARDE
            DECFSZ R0,F
            GOTO XC
            RETURN

            ;****************************************************
            ;PEGA PONTEIRO NA EEPROM – ULTIMO ENDEREÇO
            PPT
            MOVLW .0
            CALL EEREAD ;LE PONTEIRO DA EEPROM
            RETURN

            AGUARDE ;ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM

            MOVLW .64
            MOVWF R1
            CG2
            CLRWDT
            MOVLW .255
            MOVWF R2

            DECFSZ R2,F
            GOTO $-1
            DECFSZ R1,F
            GOTO CG2
            RETURN

            EEWRITE

            ; ******* EEPROM WRITE ENABLE ******************
            ;endereço esta em ADDRESS
            ;DADOS A ESCREVER ESTA EM TMP(MSB)

            BANK1
            movwf EEADR
            BANK0
            MOVFW TMP ;PEGA PRIMEIRO DADO
            BANK1
            movwf EEDATA
            bcf EECON1, EEIF
            bsf EECON1, WREN ; enable Write\par
            movlw 0x55
            movwf EECON2
            movlw 0xAA
            movwf EECON2
            bsf EECON1, WR
            WRITE_SN_A clrwdt
            btfsc EECON1, WR ; Write complete ?\par
            goto WRITE_SN_A
            bcf EECON1, WREN ; disable Write\par
            BANK0

            clrwdt

            ESPERA1 ;DELAY ENTRE APAGAMENTOS
            CALL AGUARDE
            RETURN

            EEREAD
            ;endereço esta em ADDRESS
            ;DADOS LIDOS SERÃO ESCRITOS EM TMP0

            clrwdt
            ; MOVFW ADDRESS

            BANK1
            movwf EEADR
            bsf EECON1, RD ; do a read\par
            clrwdt
            btfsc EECON1, RD ; Read done ?\par
            goto $-1
            movf EEDATA,W
            BANK0
            MOVWF TMP ;RECUPERA PRIMEIRO NUMERO DA EEPROM
            clrwdt

            RETURN
            ;——————————————————————————
            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 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

            end

          5. 0

            Olá Waymovie!
            Você está indo bem.
            Analizando melhor o programa, necessitaremos alterar a seguinte porção:

            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 T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

            TROQUE POR ESTA PORÇÃO DE CÓDIGO:

            ACIONAR

            BTFSC RES2,7 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO
            GOTO LIGAR
            BTFSC RES2,6
            GOTO LIGAR
            BCF LED2 ;APAGA LED2
            BCF LED1; APAGAR LED1
            GOTO PUL_APAG
            LIGAR:
            BSF LED1 ;ATIVA LED1
            BSF LED2 ;ATIVA LED2
            PUL_APAG:
            MOVLW T_DESL_LED ;RECARGA DO TEMPORIZADOR DE DESLIGAMENTO
            MOVWF Y2
            MOVLW .255
            MOVWF Y1

            GOTO INICIO

  16. 0

    Hola Claudio:

    Muchas gracias por la respuesta claudio, pero me podrías decir si se puede reemplazar dicha instrucción para que no de ese “warning” y si es así por cual sería. Un abrazo claudio y nuevamente gracias.

    1. 0

      Olá Ricardo!
      Basta substituir onde aparecer:

      ‘TRIS GPIO ;( OU TRIS PORTB, TRIS PORTA,ETC)

      por :
      BSF STATUS,RP0 ; VAI PARA A PAGINA 1
      MOVWF TRISIO (OU TRISB, TRISA, ETC)
      BCF STATUS,RP0 ;RETORNA PARA A PAGINA 0

      Cláudio

  17. 0

    Hola Claudio:

    Estoy probando muchos de los proyectos posteados en el Blog, y la verdad que estoy “asombrado” por lo bien que funcionan y lo práctico que resultan ser. Pero quería preguntarte algo con respecto a la compilación de dichos programas. Si bien los programas no arrojan errores a la hora de compilar, aparece una señal de advertencia que no puedo decifrar y es la siguiente:Warning[224] C:
    \MODIFICACION\CONTROL1\SALIDAON1.ASM 96 : Use of this instruction is not recommended.
    “TRIS GPIO”. No sé porque el compilador arroja esta advertencia no existe ningun problema pues los circuitos funcionan a la perfección, pero me gustaría sabér, me parece que “TRIS” no corresponde al set de instrucciones del f629 pero no sé, esta advertencia aparece en varios programas de control remoto como: pulsador, salida temporizada 0,5s, pulso y retención. Ojo esto no es ninguna critica. Por favor no lo tomés a mal lo que pasa que como me gusta sabér, te molesto con esta pregunta. Bueno “Genio” no te robo mas tiempo nuevamente estoy muy agradecido por todo esto y te mando un gran abrazo de Argentina.

    1. 0

      Olá Ricardo!
      O Mplab_Ide pode gerar mensagens de ‘erro'(error) e de ‘advertência’ (Warning). Mensagens de erro não permitem a compilação. Já as mensagens de advertência permitem a compilação.
      A instrução ‘tris’ foi descontinuado o seu uso, substituída pela instrução ‘movlw xx , movwf trisx, tendo que acertar o banco manualmente. Você verá outras advertências, como quando esquece de indicar onde ficará o resultado (w,f) e o compilador escolhe automaticamente para ‘f'(registrador). Quando pegamos o endereço de uma instrução para ponteiro ( como em
      ‘movlw Registrador_Qualquer’, carregamos o endereço) , o compilador dará uma mensagem indicando que somente a parte baixa será usada (low). Na maioria dos avisos, não é preocupante. Mas podem indicar algum esquecimento, inofensivo ou perigoso. Por favor, não me chame de ‘Genio’ porque de modo algum se aplica a mim. Nem sequer sou um programador, apenas um ‘hobista’. Tudo que sei, eu recebi . A Um que dá sabedoria a quem Lhe pede. Também, pessoas bondosas compartilharam comigo o seu conhecimento. Por eu o reteria para mim? Estou aprendendo como todos vocês e não me envergonho de dizer isto. Por isto, sugestões são bem vindas. Por favor, não fique constrangido de perguntar. Se eu não souber, alguem do blog poderá ajudar.
      Claudio

  18. 0

    Hola Claudio:
    Soy argentino, y desde ya te agradesco el valioso aporte que haces, son muy pocas las personas que dicen lo que saben, todos estos valiosos programas correctamente y ordenadamente hechos con los diagramas explicativos correspondientes son de un valor incalculable.
    Me has dado una gran mano con mis proyectos, tengo algunas dudas, espero que en lo sucecivo me las aclares, espero que entiendas el castellano porque no se escribir en portugues, si lo entiendo
    Desde argentina te mando un abrazo y nuevamente MUCHAS GRACIAS!!!

    1. 0

      Hola Ricardo! Gracias por tus comentarios alentadores. Me alegra ser de ayuda. No te moleste en escribir en castellano, porque entiendo perfectamente.
      Claudio

  19. 0

    Claudio,

    Estou precisando de um receptor para HT6P20B, COM pic 16F628 e memória para 512 transmissores, preciso que tenha um bip ao ligar e dois ao desligar e um canal para gravar sensores sem fio, que pode ser no modo pulso para 2 minutos. Esse projeto pode ser usado para central de alarmes, veja se você tens alguma coisa aí para me ajudar, estou precisando demais e é útil para todos.
    De já te agradeço.

    Luiz de Matos

    1. 0

      Olá Luiz! É um receptor ‘caprichado’ este que você procura , hen! Não tenho nada neste sentido. O mais próximo é o big_gen, mas para apenas 254 controles, o qual usa uma memória 24c08 para guardar os controles. Poderá usa-lo como base para a sua necessidade, usando uma 24c16 ou memória maior. Para obter os canais, sugiro que estude o artigo’ faça uma central de alarme de 3 canais’ para se ter uma ideia de como gravar controles em zonas separadas e apaga-los. Com certeza, trata-se de um projeto trabalhoso para ser desenvolvido em assembly (é nesta hora que o ‘C’ dá uma rasteira).
      Claudio

  20. 0

    Salve! Por um acaso, tem algum projeto de um transmissor com uso do HT6P20?? melhor se for estilo TX Car… to procurando mas não to achando… Abraço

        1. 0

          Olá Waymovie!
          O esquema em sí é simples, mas ‘fazer as bobinas impressas’ e conseguir acertar a ‘frequência exata’ é outra história.
          Claudio

  21. 0

    Caro amigo Claudio na versão RX_GEN_629_V8BP1
    onde posso escolher a quantidade de pulsos e alterar o tempo de ligado e desligado onde altero o valor que padrão é 1 = 50 milisegundos
    no meu caso preciso testar para 75 milisegundos
    mas como faço este tempo .

    MOVLW .1 ;* MUDE PARA O TEMPO DESEJADO (SENDO 1 = 50MILISEG)
    CALL DELAYM ;ROTINA DE TEMPO
    onde se encontra esta rotina de tempo ( DELAYM ) para que eu mesmo possa alterar . assim com este programa estou aprendendo mais sobre assembler . obrigado mais uma ves pela sua atenção

    1. 0

      Olá Liliano!
      Você esta indo muito bem.
      A rotina ‘delaym’ se encontra na seguinte porção de código:

      ;OUTRAS ROTINAS
      ;===============================================================
      ;PEGA PONTEIRO NA EEPROM – ULTIMO ENDEREÇO
      PPT
      MOVLW .0
      CALL EEREAD ;LE PONTEIRO DA EEPROM
      RETURN
      ;————————————————————–
      DELAYM ; DELAY= 50 MSEG X ‘W’
      MOVWF R0
      XC
      CALL AGUARDE
      DECFSZ R0,F
      GOTO XC
      RETURN

      AGUARDE ; ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM (50 MSEG)
      MOVLW .50 ; Você poderá colocar outros valores aqui, até o máximo de .255 (limite do registrador)
      MOVWF R2
      CALL DELAY_1MS ;ROTINA DE 1 MILISEGUNDOS
      DECFSZ R2,F
      GOTO $-2
      RETURN
      DELAY_1MS
      MOVLW .199
      MOVWF R1
      CLRWDT
      NOP
      DECFSZ R1,F
      GOTO $-3
      RETURN

      Você poderia chamar ao invés de ‘movlw .1/call delaym’, uma nova rotina usando o delay de 1 milisegundos da subrotina ‘delay_1ms’. Ficaria assim:

      movlw .75 ;tempo de 75 milisegundos
      movwf temp ;carrega um registrador qualquer que não esteja sendo usado ou um temporario
      vv1
      call delay_1ms
      decfsz temp,f
      goto vv1
      goto segue_tua_rotina

      outraparte

      bsf porta,6
      …..

      ou faze-la em forma de subrotina:

      bcf portb,1
      goto outraparte

      ;====================================rotina que vai dar um delay de 75 milisegundos
      meu_tempo
      movlw .75 ;tempo de 75 milisegundos
      movwf temp ;carrega um registrador qualquer que não esteja sendo usado ou um temporario
      vv1
      call delay_1ms
      decfsz temp,f
      return
      ;==================================fim da rotina de 75 ms
      Colocando no fim do programa ou em um local que tenha um goto antes e não haja ‘btfsc, btfss ou decfsz’.

      Depois é só chamar a subrotina:
      ….
      call meu_tempo ;tempo de 75 milisegundos
      …..

      Claudio

      1. 0

        Amigo estou aprendendo com vc ,agora pensando estou precisando temporizar a recepção do controle pois o que acontece , quando pressiono o botão para 2 pulsos em tempo de 50ms se eu mantenho pressionado ele repete a função seguidamente , na minha ideia eu usaria esta rotina :
        MOVLW .20
        CALL DELAYM ;TEMPO QUE SE MANTEM ACESOS
        BCF LED1
        BCF LED2
        GOTO INICIO
        peguei da versão 3 do projeto acima dai pensei em colocar esta rotina para cada botão assim poderia escolher um tempo de atrasa acho que o unico problema seria o travamento de todo sistema devido estar trabalhando com delay , mas assim inibiria o receptor de receber por um tempo novos pulsos , agora preciso acrescentar esta rotina em algum outro lugar , informar que ela vai acontecer ?
        ou bastar colar e modificar logo depois do apagamento do led de saida ?

        1. 0

          Olá Liliano!
          Por favor,não tenha medo de mudar/compilar e testar na prática. Modifique conforme você acha que vai dar certo e testa em um protoboard. Verifique se atende as necessidades. Se atender, é só usar. Se não, tente mudar de novo. Pense no que está acontecendo, e onde ficaria melhor a mudança, ou até mesmo fazer uma alteração radical, se for o caso. E assim sucessivamente, até obter sucesso.
          Claudio

      2. 0

        Amigo mudei aqui deu certo , eu pensei bem não sei se o pensamento ta certo mas que funcionou , ao inves de colocar um delay para cada botão sabendo que o objetivo era de travar a recepção , coloquei no final onde apagaria os leds dai qualquer botão acionado trava o sistema vou enviar o asm pra vc e o hex dai vc se quiser postar amigo foi uma simples modificação mas que abriu a mente para outras

    2. 0

      Olá Liliano!
      Estava esquecendo:
      A porção do programa que altera as piscadas é esta:

      ;==================================================================================================
      ;ROTINA PARA ACIONAMENTO DOS LEDS
      ACIONAR
      MOVFW RES3 ;RECUPERA OS BOTÕES
      MOVWF RES2

      ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ; PISCANDO LED’S CONFORME BOTÃO ACIONADO
      ; PREDEFINIÇÃO DE NUMERO DE PISCADAS POR BOTÃO:
      ; BOTÃO DIREITO = 2 PISCADAS
      ; BOTÃO ESQUERDO= 10 PISCADAS
      ; AMBOS BOTÕES OU 3ºBOTÃO = 20 PISCADAS
      ; OBS. ENQUANTO EM PROCESSO DE PISCADAS, NÃO ACEITA COMANDOS.
      ; ONDE TIVER * (ASTERISTICOS) PODERÁ SER MUDADO A GOSTO DO USUARIO
      ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      BTFSS RES2,7 ; SE OS DOIS BOTÕES ESTIVEREM ACIONADOS (OU 3ºBOTÃO)
      GOTO SJ7 ;NÃO ESTÃO,ACIONA BOTÃO ESQUERDO APENAS
      BTFSS RES2,6
      GOTO SJ5
      ;ROTINA PARA AMBOS BOTÕES (OU O 3º BOTÃO)
      MOVLW .20 ;* AQUI, COLOQUE O NUMERO DE PISCADAS (NO CASO, 20 PISCADAS) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MOVWF AUX1 ;USE UM REGISTRADOR TEMPORÁRIO VXL1 ;------------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BSF LED1 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED1) ;BSF LED2 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED2) BSF LED3 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED3) ;------------------------------------------------------------------------------------------- MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ ACESO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO ;------------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BCF LED1 ;* O MESMO O LED QUE DESLIGARÁ ;BCF LED2 ;* O MESMO O LED QUE DESLIGARÁ BCF LED3 ;* O MESMO O LED QUE DESLIGARÁ ;-------------------------------------------------------------------------------------------- MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ APAGADO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO DECFSZ AUX1,F ;DECREMENTA REGISTRADOR COM NUMERO DE PISCADA DESEJADO GOTO VXL1 GOTO SJ6 ; PULA OS OUTROS TESTES SJ5 ;ROTINA PARA O BOTÃO DIREITO MOVLW .2 ;* AQUI, COLOQUE O NUMERO DE PISCADAS ( NO CASO 2 PISCADAS) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MOVWF AUX1 ;USE UM REGISTRADOR TEMPORÁRIO VXL2 ;----------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BSF LED1 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED1) ;BSF LED2 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED2) BSF LED3 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED2) ;----------------------------------------------------------------------------------------- MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ ACESO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO ;----------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BCF LED1 ;* O MESMO O LED QUE DESLIGARÁ ;BCF LED2 ;* O MESMO O LED QUE DESLIGARÁ BCF LED3 ;* O MESMO O LED QUE DESLIGARÁ ;----------------------------------------------------------------------------------------- MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ APAGADO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO DECFSZ AUX1,F ;DECREMENTA REGISTRADOR COM NUMERO DE PISCADA DESEJADO GOTO VXL2 GOTO SJ6 SJ7 ;ROTINA PARA O BOTÃO ESQUERDO BTFSS RES2,6 ;TESTA QUAIS BOTÕES FORAM ACIONADOS NA TRANSMISSÃO GOTO SJ7 MOVLW .10 ;* AQUI, COLOQUE O NUMERO DE PISCADAS (NO CASO, 10 PISCADAS) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MOVWF AUX1 ;USE UM REGISTRADOR TEMPORÁRIO VXL3 ;----------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BSF LED3 ;* O MESMO O LED QUE DESLIGARÁ ;BSF LED2 ;* O MESMO O LED QUE DESLIGARÁ BSF LED1 ;* ESCOLHE O LED QUE LIGARÁ (LED1...3, NO CASO, LED1) ;----------------------------------------------------------------------------------------- MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ ACESO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO ;----------------------------------------------------------------------------------------- ;DESCOMENTE A OPÇÃO E COMENTE AS OUTRAS (OBS. PODE SER MAIS DE UM LED) ;BCF LED3 ;* O MESMO O LED QUE DESLIGARÁ ;BCF LED2 ;* O MESMO O LED QUE DESLIGARÁ BCF LED1 ;* O MESMO O LED QUE DESLIGARÁ ;------------------------------------------------------------------------------------------ MOVLW .2 ;* MUDE PARA O TEMPO DESEJADO QUE FICARÁ APAGADO (SENDO 1 = 50MILISEG) CALL DELAYM ;ROTINA DE TEMPO DECFSZ AUX1,F ;DECREMENTA REGISTRADOR COM NUMERO DE PISCADA DESEJADO GOTO VXL3 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ KCONT SJ6 BCF LED1 ;DESLIGA TUDO BCF LED2 BCF LED3 GOTO INICIO ;============================================================================================ ; FIM DA ROTINA DE ACIONAMENTO DOS LEDS ;******************************************************************************************** Altere os valores onde mostrado por '<<<<<<<<<<<<<<<<<<<<< 'e recompile. Claudio

      1. 0

        Sim esta parte de modificar os pulsos eu consegui resolver amigo , ainda não consegui mudar o delaym , pensei que haveria uma rotina ja pronta podendo mudar , pois no projeto vc colocou padronizado 1=50ms , o tempo que queria alterar seria este e colocar para 1= 25ms assim poderia fazer tempos quebrados tipo 75ms , 125ms entedeu , o rapaz me falou a finalidade do projeto , sera usado em maquinas de alimentos estas que vc coloca o dinheiro e escolhe o lanche , para proteger de roubos pois tem gente arrombando as maquinas ele pensou em usar pulsos para equivaler ao dinheiro , tipo 2 pulsos = $2,00 e assim por diante o ideal seria 4 canais mas como ja tem este de 3 pronto e eu posso alterar , mesmo assim obrigado pela força vou quebrar um pouco a cabeça e aprender

        1. 0

          Olá Liliano!
          Quanto a alterar a rotina ‘delaym’, veja abaixo a porção de código:
          DELAYM ; DELAY= 50 MSEG X ‘W’
          MOVWF R0
          XC
          CALL AGUARDE
          DECFSZ R0,F
          GOTO XC
          RETURN

          AGUARDE ; ROTINA DE ATRASO ENTRE OPERAÇÕES DE EEPROM (50 MSEG)
          MOVLW .50 ; se você simplesmente colocar 25 aqui ao invés de 50, você terá tempo próximo de 25 milisegundos. apenas verifique se as outras rotinas que usam o ‘delaym’ não serão afetadas pela redução do tempo.
          MOVWF R2
          CALL DELAY_1MS ;ROTINA DE 1 MILISEGUNDOS
          DECFSZ R2,F
          GOTO $-2
          RETURN
          DELAY_1MS
          MOVLW .199
          MOVWF R1
          CLRWDT
          NOP
          DECFSZ R1,F
          GOTO $-3
          RETURN

          Continue se esforçando que sem falta, você conseguirá seus objetivos.
          Claudio

  22. 0

    Boa noite claudio muito obrigado pela tua explicação e pelo excelente blog.Eu alterei conforme vc pediu e funcionou,só que eu gravou dois botões e sempre acende o mesmo led 1,NESSE PROJETO NÃO É PARA CADA BOTÃO ACENDE LED DIFERENTE.Muito obrigado

    1. 0

      Olá Genilson!
      Por favor, verifique se nos ‘equates’ você não deixou o led1 igual ao led2 (ou seja, no mesmo bit da port).
      Claudio

  23. 0

    olá Claudio Lários,
    adorei o site, é a ferramenta que me faltava para aprender a trabalhar com microcontroladores pic, fiz a montagem dos circuitos acima, e funcionaram muito bem, eu gostaria de saber (uma dica) para fazer um receptor de 3 canais com aprendizagem individual, como na versão 9, só que a versão 9 é de 2 canais.

    tenho facilidade em desenhos de lay out (pcis), e ofereço minhas habilidades o sentido de colaboração, ajuda, pois me sinto ajudado ao usar as dicas deixadas no seu site.
    muito obrigado
    william ribeiro

    1. 0

      Olá William! Obrigado por seu comentário. A diferença entre o que aprende de forma individual e o que aprende todos de uma vez, está na forma como ele é gravado na EEprom. Se for apagado os bit 6,7 de res2, anes de grava-lo na Eeprom, o receptor aceitará com uma única programação os 3 botões, e usará 3 bytes por controles na Eeprom. Se forem mantidos os bits 6,7 de res2, cada botão terá que ser aprendido, ocupando assim 9 bytes na EEprom para um único controle. Sugiro que estude os vários programas fornecidos e altere eles segundo a sua necessidade. Verá que não é difícil e ajudará no seu desenvolvimento.
      Cláudio

      1. 0

        Olá Genilson!
        Realmente não entendi o que você deseja. Estes receptores já não tem display!!!
        Cláudio

        1. 0

          Olá Genilson!

          Não tenho, mas para alterar não é difícil. Basta mudar o arquivo ‘include 12f629’ para 16f628a e trocar as menções de ‘TRISIO’ e para ‘trisA’ ou ‘trisB’, e GPIO para PORTA OU PORTB, escolhendo os pinos que desejar usar. Depois, basta recompilar no Mplab_Ide.

          ex.
          LIST P=12f629 , R=DEC
          INCLUDE “P12F629.INC”

          por

          LIST P=16f628A , R=DEC
          INCLUDE “P16F628A.INC”

          E

          BANK1
          MOVLW B’111110′ ; SETUP PORTA
          MOVWF TRISIO
          BANK0

          POR

          BANK1
          MOVLW B’11110001′ ; SETUP PORTB
          MOVWF TRISB
          MOVLW B’11100000′ ; SETUP PORTA
          MOVWF TRISA

          Cláudio

  24. 0

    Salve! Evoluí muito no meu projeto do portao, graças a sua ajuda e também dom amigo foxconn. Só to com um defeitinho que não to entedendo: quando ligo a fonte na tomada uma saída do pic é acionada, sem acionar o controle… o que pode ser?? no mais, ta funcionando exatamente como programado.Abraço e muito obrigado, por enquanto.

    1. 0

      Olá Waymovie! O resistor foi colocado para dar uma polarização negativa apropriada. Mas poderá ser omitido se você trocar o resistor de 470 ohms por um de 4k7. Quanto a saida que fica acionada, que pino é , e ela fica direta ligada ou é apenas momentaneamente? Qual dos projetos você se refere?
      Claudio

      1. 0

        Olá! ja consegui solucionar… adicionei no ninicio do código um comando para setar rodos os pinos de saída a nível 0. Agora ta pefeito na protoboard… to estudando o Eagle agora pra tentar montar a placa… to com dificuldade pra achar alguns componentes, como o receptor RF 8 pinos e tb o trafo… mas to tentando… Obrigado.

        1. 0

          Opa! Grande Larios… cara, coloquei minha central de portao eletronico pra funcionar… utilizei esse post do receptor de controle para aprender os controles e implementei um 16f628A para as funções do portão. Muito parecido com o teu post da central de portões (q tb montei e funcinou 100%) mas implementei um terceiro relé para acionamento de uma lâmpada. Ta rolando um problema chato que não consigo entender… acho que é de eletrônica e não de programação (só “sei” linguagem C). Programei o PIC para setar nivel alto no pino da lâmpada sempre que o sensor de fechamento estiver aberto… ou seja, enquanto o portão estiver aberto, luz acesa. Funcionou perfeitamenete na protoboard e inclusive teste em um motor extra que tenho… simplesmente a luz sí fica acesa no trajeto do portão, desligando em ambos fins de curso. Ja viu algo parecido?? onde posso estar errando? Grande abraço.

          1. 0

            Olá Waymovie!
            Parabéns pelo seu projeto!!!
            Quanto ao que está acontecendo, parece que ao acionar um dos sensores, está resetando todas as saídas do port, inclusive a saída da lampada. Sugiro que você examine o código, se possível , rodando em um simulador, na parte que já acionou o motor e espera o acionamento do fim de curso.
            Claudio

          2. 0

            Salve! Continuo na mesma…em princípio o código ta certo… funciona bem em um motor de portão na bancada, mas falha em algumas situações em uso real… ainda hoje, por tres vezes, o portao parou após abrir pouco menos da metade… na quarta vez abriu normal (ainda que com o programação da luz errada)… algumas dúvidas: a distância da central para o motor, que é de uns 7 metros, influencia (ainda que não tive problemas com a central anterior)?? talvez o cumprimento dos fins de curso ou os fios do motor… também o que fazer com os pinos do PIC que sobraram??? não fiz nada com eles… Abç

          3. 0

            Olá Waymovie!
            Se você fez testes em bancada e não deu erro, é possível que seja uma causa externa. O comprimento dos fios é uma possibilidade para o defeito. Não passe eles juntos com fio de AC para teste. Tente colocar um capacitor de pequeno valor como 4,7 microfarads em cada fio do sensor a massa. Ou use um fio blindado, com malha aterrada. Verifique se alguma interferência não esteja resetando o seu pic e impedindo ele de prosseguir a rotina de abertura/fechamento. Certifique de colocar um capacitor de 0,1 uf, cerâmico, junto ao +Vcc e Gnd do pic, o mais próximo possível destes terminais. Certifique que o seu + Vcc esteja bem filtrado e bem regulado.
            Claudio

          4. 0

            Putz… não sei mais o que fazer… o portão insiste, eventualmente, em desligar antes do fim do percurso. Ja inclui dois capacitores de 100nf e nada; substituí esses dois capacitores por dois eletroliticos de 1uf e troquei os dois resistores de 10k (que são ligados ao 5v e aos dois fins de curso) por dois de 6,8k (tentativa e erro). mas tb não funcionou… simplesmente, de vez em quando, o portão para no meio, ou até antes do meio as vezes.Vou trocar os sensores fim de curso pra ver… mas não sei mais o que fazer… Muito frustrante não conseguir resolver e ter que voltar pra placa antiga (comercial)…

          5. 0

            Olá Waymovie!
            Voce verificou se não é por tempo que ele está desligando? Qual é o código que você está usando?
            Cláudio

          6. 0

            Cara, acho que não é o código, porque apresenta o erro apenas as vezes… aleatoriamente… também não tenho nenhuma rotina de temporização para fechamento/abertura… mas como não sou expert, também não posso duvidar… o código estám C, mas está fácil de entender pelos comentários que tem. Ainda acho que o problema está na ligação dos meus sensores de fim de curso… Fiz um pergunta pra ti no teu post da central de portão (que foi base pra fazer essa minha) sobre como estava tua programação para os sensores… tu me disse que eles eram acioados com o GND. Olhando teu esquema elétrico da central o R7 não está em pull up com um resistor de 10k, não tendo nenhuma fonte 5v ligada ao sensor… em princípio ta funcionando dessa forma, inclusive está montada no meu portão nesse momento… minha ligação não foi feita dessa forma… utilizei dois resistores de 10k (um para cada sensor) direto, sem utilizar as resistencias de 470R, como tu fez. pode me enviar um e-mail waymovie@gmail.com para eu te mandar meu esquema e código… cara, quero muito descobrir esse bug, isso ta tirando minhas noites de sono(exagerando, é claro)…

  25. 0

    Boa tarde Larios. Fico muito grato pelas dicas, acho que descobri o problema. Era uma configuração errada do me gravador e uma configuração no esquema de montagem do circuito receptor de rf, grato Tiago.

  26. 0

    Olá Cláudio! Primeirmante quero te agradecer pelos belos projetos aqui postados… tb quero compartilhar minha alegria porque consegui fazer funcionar esse projeto do Receptor de controle remoto, com dois leds… te pergunto: tentei utilzar o fio que sai de um dos leds para dar entrada (input) em PIV 16F628A para controlar um motor de portao. Mas não acontece nada… O programa que fiz, em C, ja que não entendo nada de ASM, tem um comando basico: se Input Pin_X, Output Pin_y via um transistor… meu pprograma funciona com um botão simulando no proteus… A entrada no PIC 16f que sai do 12F precisa ser em pullUp??

    1. 0

      Olá Waymovie! Obrigado por seu comentário e elogios. As saídas dos leds são em nível 1, não necessitando pull_up. Quanto a seu programa, já não posso dizer nada, mas geralmente é algum erro de esquecimento, como por exemplo, esquecer de programar a ‘palavra de configuração’ do pic, deixar o ‘Watch Dog’ ligado e coisas assim.
      Claudio

      1. 0

        Vou testar… então, se eu pegar no positivo do led que é uma saída em nível (1) do “teu” decodificador do HT, e ligar a um pino configurado como entreda no PIC 16F (meu projeto) deveria dar certo?? , devo ligar algum resistor? outra coisa estranha, que não consegui entender: fiz um teste na saíde de um dos leds, ligando a um BC548 e a um relê que acionava um Cooler de PC de 12V. Ao pressionar o controle o rele era acionado e também o cooler, mas o led não acende…por que será?
        Abç e obrigado…

        1. 0

          Olá Waymovie! Sim, sempre coloque um resistor de baixo valor 330 a 1k ohms, pois, de repente a entrada do pic está configurada como saída por engano, então teremos um curto que destruirá os pics. Quanto ao led, depende como você ligou, ele não acenderá. Por exemplo: Saí do pic vai para o resistor e depois ao led a massa. Se você ligar a base na junção resistor/led, não acenderá o led, mas funcionará o transistor e que estiver ligado no coletor. A tensão de base para emissor é de 0,7 volts, e o led precisa de 1,5 a 2,5 volts para funcionar. Assim, mantenha a ligação original dos leds e puxe um resistor de 4k7 direto do pino de saida do pic para a base do transistor. Então, voce verá acender o led e funcionar o transistor.

          PINO PIC——–|———-WWWW————–!>——-GND
          | 470 LED
          |——-WWWW——————————————BASE DO TRANSISTOR
          4K7

          Claudio

          1. 0

            Caraca… não consigo fazer funcionar… na saída do led tem uma tensão que oscila, quando aperto o botão do controle, de 0 a 1,7 V. Essa tensão é suficiente para alimentar o PIC?? to fazendo um teste simples: programei o 16F628A para piscar um led, recebendo como input a saída do led do teu projeto do receptor… mas testo a tensão do pino que configurei como saída e é Zero. Parece que que o meu input não é aceito…só tu pode me ajudar… Abraço.

          2. 0

            Olá waymovie! Faça o seguinte: Teste o seu circuito com pic 16f628a aplicando Vcc (+5v) via resistor de 470 ohms. Se não funcionar, verifique o programa e o seu hardware relacionado ao 16f628a. Se funcionar , ligue este resistor direto no pino de saída do pic. Ao acionar o controle remoto, o pino terá 5volts (vcc) e têm que funcionar.
            Claudio

          3. 0

            Opa! Agora funcionou… tu é o cara mesmo. Pena que meu código não funcionou… no proteus funciona perfeito, mas na prática não rolou… vou ter que dar uma analisada… tem como eu postar o código e projeto proteus pra ti dar uma olhada? se não der, obrigado da mesmo forma… ja me ajudou demais… grande abraço.

          4. 0

            Olá waymovie! Fico feliz que, em partes, você chegou a uma conclusão! Quanto a usar o proteus, não faço uso dele, por que ele tem algumas limitações que me impedem de trabalhar com ele.
            Mas se algum dos colegas quiser da sugestões…
            Claudio

          5. 0

            Larios, nesse modelo de receptor, caso eu tenha um controle com dois botoes, quando cadastro os controles eles ficam em “canais” diferentes. Para o caso de acionameto de um portao, que é meu projeto, teria como eu cadastrar os dois botoes para acionar o motor? tem esse programa pronto? gostaria que, independentemente do botao pressioado, o motor fosse acionado. essa situação atual, somente um botao funciona.

          6. 0

            Olá Waymovie! Por favor, identifique qual das versões você está se referindo. Você deseja que qualquer dos botões, se pressionado, atue na saída, é isto?
            Claudio

          7. 0

            mais uma: que software tu usa pra montar a placa de circuitos?? to usando o Eagle mas ta casca… não to achando alguns componentes, como o módulo RF e tb o TRAFO…

          8. 0

            Olá WayMovie! Use o que você achar mais conveniente. Alguns gostam do Eagle, mas outros tem dificuldade em usa-lo. Quanto a componentes, tente comprar na Internet.
            Claudio

  27. 0

    Boa tarde Larios, estou com problema para fazer rodar a versão 3P1_asm, não codifica nenhum botão e quando tento com as versões que apreendem todos os botões funciona normal. Tenho que mudar alguma coisa ou ela roda normal desta maneira.Ou pode ser mu gravador (Beeprog2C), estou compilando o ASM no Mplab. Desde ja meu muito obrigado. fico no aguardo.

    1. 0

      Olá Tiago! Voce está usando o microcontrolador 12f629 ou alterou no asm para 12f675?
      Se estiver usando o 12f675, descomente também algumas linhas logo no inicio do programa, para esta versão e depois recompilie.
      São estas:

      ;DESCOMENTAR ABAIXO PARA 12F675
      ; BANK1
      ; MOVLW .0
      ; MOVWF ANSEL ;LIBERA PORTAS DO AD (somente 12f675)
      ; BANK0

      Senão , não irá funcionar.

      Claudio

      1. 0

        Bom dia Larios estou usando pic 12f629, mesmo descomentando ou apagando continua não apreendendo o controle. Grato Tiago.

        1. 0

          Olá Tiago!
          Gostaria que você conferisse as ligações dos pinos do PIC, conforme abaixo:
          pino 1 = vcc
          pino 2 = led ‘learn’
          pino 3 = desligado
          pino 4= botão ‘learn’
          pino 5= led2
          pino 6= led1
          pino 7= entrada rf proveniente do receptor de 433mhz
          pino 8= vcc

          Outra coisa, gostaria que você conferisse se o controle remoto que está usando, tem o circuito integrado Ht6P20B. Na dúvida, abra-o e veja. Não serve o modelo Hcs… ou outros.
          Certifique que ele esteja funcionando. Para isto, ligue um fone a cristal ( capsula piezoeletrica ou campainha de telefone), com um resistor de 1k em série, na saída de rf do receptor para o gnd. Acione o controle e verifique se escuta um ruido característico de transmissão do sinal.
          Caso não escute nada, poderá estar com defeito (ou bateria fraca!!!) ou ser de uma frequência diferente do receptor. Lembre-se: tx e rx da mesma frequência sempre!!!
          Claudio

  28. 0

    😆 Eu quero parabenizar o amigo Claudio Larios, pelo maravilhoso desenvolvimento que tem feito para o leitor 6p20, seu trabalho ficou muito bom. Eu tive o prazer de colocar em funcionamento seu software e funcionou corretamente…parabens

    1. 0

      Olá ‘Agitec’! Obrigado pelo seu comentário e elogios. Fico feliz que conseguiu sucesso na sua montagem.
      Claudio

  29. 0

    A minha duvida é de como fazer uma saída com retenção e as outras duas como pulso. Estou tentando mas ainda não entendi muito bem a logica. Estou pensando em deixar em modo pulso e apagar toda referencia ao led1 da rotina pulso e direcionar para a rotina retenção mas somente o led1, me dá uma luz por favor.
    Obrigado

    1. 0

      Olá Marcia! Realmente não é fácil entender ‘de primeira’ a lógica envolvida. Mas, basicamente, o modo ‘pulso’ é o mais simples, onde apenas ligamos uma saída e deixamos ligado enquanto o botão estiver pressionado no tx. Usa-se um flag para determinar quando finalmente o botão do transmissor foi solto. Cada vez que recebe uma transmissão correta, o flag é setado e uma nova de carga de tempo é colocada em um contador. Quando não se recebe transmissão, gradativamente este contador vai ser decrementado até chegar a zero, quando vai resetar o flag, indicando que botão foi solto e a saida será desligada. Assim, apertando no tx liga a saída e soltando no tx, apaga o led da saída.
      Quanto ao modo retenção, antes de acionar a saída, precisamos testar se está ligada ou desligada e inverter a situação. Supondo que esteja ligada,irá desliga-la e acionar um flag para travar enquanto o botão do tx estiver acionado. Igualmente ao ao acima, depois de soltar o botão do tx, irá decrementar uma carga do contador e ao chegar a zero, irá resetar o flag, permitindo uma mudança na saída caso o botão seja novamente apertado no tx. Confuso! Juro que para mim também é difícil até para explicar.
      Tente, pois assim que eu tiver um tempinho irei postar uma versão nestas condições.
      Claudio

  30. 0

    Claudio Boa Noite.
    Eu tenho a mesma duvida do Mario, entendi mais ou menos a diferença entre pulso e retenção, mas não consegui sucesso nas modificações.O que eu entendi é que em retenção vc usou FLAGLED e em pulso BSF e BCF. BSF liga E BCF desliga? 😳
    Obrigada

    1. 0

      Olá Marcia! Quando falamos em ‘pulso’, significa que teremos a saída ligada enquanto o botão do transmissor estiver pressionado. Já o termo ‘retenção’ se refere a mudança de estado da saída a cada aperto do botão do transmissor, ou seja, apertando o botão uma vez e a saída ligará. Apertando de novo a saída desligará , e assim sucessivamente. Exatamente, qual é a dúvida?
      Claudio

  31. 0

    Claudio
    Parabéns pelo blog!!!
    Agora tenho uma pergunta se não for incomodo. Eu posso no mesmo programa ter o led 1 com retenção e o 2 e 3 como pulso? Se puder me ajudar eu agradeço.

    1. 0

      Olá Mário! Sim, é possível, mas terá que alterar toda a parte relacionada com a saída para os leds. Tente entender como foi obtido o efeito pulso/retenção e altere para suas necessidades.
      Cláudio

    2. 0

      Olá Mario! Veja por favor, o novo artigo ‘Receptor de 3 canais com pulso e retenção individuais‘.
      Claudio

  32. 0

    boa tarde Claudio

    parabens pelos projetos,bem eu montei o multimetro com os displey,bem ele acende os três zeros mas quando injeto tensão el lê 999 777 222 e nada de normalizar vc poderia por favor me dar uma luz abraço

  33. 0

    Boa tarde Claúdio.
    É possivel você fazer um receptor de 1 canal para que eu possa utilizar 01 controle TX de 02 ou 03 botões com 02 ou 03 receptores diferentes usaria um botão do controle para cada receptor? É possível colocar também seletor de pulso ou retenção nos receptores??? Desde já agradeço.

    1. 0

      Olá Roberto! Seria 3 receptores com um canal apenas, que pudessem aprender qualquer um dos 3 botões de um controle remoto de rf (ci Ht6p20b)?
      Cláudio

      1. 0

        Bom dia Claúdio.
        Isso mesmo Claúdio, desta forma posso acionar 03 receptores distintos com apenas 01 controle. É possível isto?

  34. 0

    Ola Claudio… olha eu novamente? mas dessa vez venho pedi umas dica! quero fazer uma alteração no RX_GEN_HT6P_V7_PULSO. eu mesmo quero fazer essa alteração. e o seguinte led1 e led2 continua do jeito que esta, mas o led3 quando pressionar o botão o led pisca trez vez. mas uma vez venho pedi sua ajuda. onde devo mexe no asm e que devo fazer!
    eu mesmo quero digita essa alteração com sua ajuda. desde já muito obrigado!!!
    George Lima

    1. 0

      Olá George! Por favor, veja como foi feito nesta versão aqui, estude , e tente fazer as alterações que você deseja. Atente para configuração inicial de registradores e declaração de registradores no banco da ram. A medida que você fizer alterações irá dar mensagens de erro na hora de compilar. Vá corrigindo, conforme o erro, e vai testando, até obter o resultado desejado. Pode ser que tenha que mexer várias vezes até obter um bom resultado. Mas, a alegria do bom resultado compensa!!!
      Claudio

  35. 0

    Entendo…
    Mesmo assim obrigado!
    Eu vou tentar aprender melhor assembler…
    Daí, se eu conseguir algo em C, posto aqui também…
    Velter.

  36. 0

    Olá, eu gostaria de saber se você poderia disponibilizar essa programação em C?
    É que eu não conheço muito assembler e gostaria de entender melhor o funcionamento do programa… Então se estivesse em C, eu poderia estudar melhor…
    Seria muito difícil pedir isso pra você?
    Desde já agradeço…
    Aguardo resposta.

    1. 0

      Olá Velter! A dificuldade que você tem em ‘assembler’ eu tenho com ‘C’ (aliás, sou apenas um simples hobista, sem qualificações de ‘programador’). Infelizmente, não tenho disponível em ‘C’. Mas você não é o primeiro que me pede isto. Quando tiver alguma coisa neste sentido, postarei.
      Cláudio

  37. 0

    Ola Claudio bom dia, lembrei porque falei a versão errada, era para ser a ( RX_GEN_HT6P_V7 ) mas com led aceso, quando mantém o botão apertado, o led se mantém apagado, sem piscar ou pulsar. a placa do portão usa o microcontrolador atmega8. os pinos vai ao terra para funciona as trés saídas independentes.
    mais uma vez me desculpa pelo incomodo.
    George Lima…

      1. 0

        Ola Claudio bom dia! alguma novidade na inversão do (RX_GEN_HT6P_V7)
        to no aguardo?
        obrigado!!!
        George Lima.

        1. 0

          Olá George! Veja os novos ASM e HEX. Cuidado com seus testes. Sinto muito pelo seu infortunio. Certifique de colocar alguma proteção durante seus testes, como um disjuntor de baixa amperagem em série que desarme com algum curto circuito. Alguns usam uma lampada de alta wattagem em série (como de refletores de 300 a 500 w). Em caso de curto, ela simplesmente acende e não queima o motor. Eu não entendi bem porque você precisa que seja invertido? É o seu sistema que opera ao contrário?
          Claudio

          1. 0

            Ola Claudio, vim aqui ti agradece, deu tudo certo. o projeto fico muito bom, esta tudo funcionado perfeitamente. obrigado? já esto ariscando minha primeira programação, hoje precisei de ajuda se deus quiser amanha poderei ajuda alguém. muito obrigado pela ajuda.
            George Lima…

  38. 0

    Ola Cláudio, boa noite! Em primeiro lugar muito obrigado pela atenção, e mil desculpa! e me perdoe por favor?
    Te passei a versão errada, só fui perceber quando gravei o pic e estalei na placa do portão.
    O motor começou fazer um barulho e queimo, ai percebi o erro. A versão v4 aciona dois canal ao mesmo tempo, vindo a queima o motor.
    A versão certa seria o ( RX_GEN_HT6P_V7_PULSO ) se vc pude inverte serei muito grato.
    Mais uma vez me perdoe…
    E muito obrigado e deus abençoe?
    George Lima..

  39. 0

    Ola Claudio! e isso mesmo ligando fica aceso apertando um botão do controle, ele apaga o led correspondente a cada saída. da pra inverte usando dois transistor npn e outro pnp, teria que usa dois transistor em cada saída, total de seis. eu queria eliminar os transistor invertendo a saída direto no pic? ate tentei muda no arquivo mas não tive sucesso tenho pouquíssimo conhecimento. gostaria muito de sua ajuda.

  40. 0

    ola Claudio, estou tentando muda a saídas do RX_GEN_HT6P_V4P1, (na versão original mantendo o botão apertado, o led se mantém aceso, sem piscar)
    “quero muda para o contrario! o led fica aceso quando. mantém o botão apertado, o led se mantem apagado sem pisca” já estou a duas semana tentado.
    se possível gostaria de sua ajuda para realiza essa mudança. tenho um receptor de portao da new back antiga que usa o sistema de corte de arame, para codifica. quero muda?
    desde já te agradeço…

    1. 0

      Olá George!
      Deixa ver se eu entendi. Quando liga tudo, fica aceso os leds de saída. Se você apertar um botão do controle, ele apagará o led correspondente no receptor. O mesmo com o outro botão do controle. Sem mexer com o arquivo original, você poderia usar um transistor npn para cada saída para inverter o estado de saída.
      Claudio

  41. 0

    Olá Claudio. Estou pensando em fazer um “repetidor” para aumentar o alcance dos controles. Basicamente peguei o seu RX_GEN_629_V9AP1 e, logo após an rotina ACAO, inclui o arquivo CLONE HT6P_PIC a partir da rotina ENVIAR. Como o que quero fazer é simplesmente receber um código e repetí-lo, preciso criar uma rotina de delay entre o recebimento do código e seu envio (durante o envio também preciso “desconectar” o receptor do meu repetidor para que ele não receba seu próprio código. Bem, depois desta “maravilhosa”explicação, vem a minha pergunta: como é que eu conto tempo no 629, ou quanto tempo demora cada instrução?
    Um abraço,
    Marcelo

    1. 0

      Olá Marcelo! Obrigado por comentar. O tempo de cada instrução é de 1 useg para frequência interna de clock de 4 mhz. Voce poderá carregar ‘w’ com um valor de delay e chamar a rotina ‘delaym’ que facilita. Ficaria assim:
      MOVLW .100
      CALL DELAYM

      Como a recepção é feita na rotina principal, não tem com que se preocupar em receber o próprio sinal, uma vez que estando transmitindo, não poderá receber ao mesmo tempo.
      Claudio

  42. 0

    AMIGO TIVE TESTANDO A VERSAO RX_GEN_HT6P20B_V4P1.ASM, ELA ESTA ASSIM APERTOU O BOTAO DO CONTROLE , MESMO FICANDO PRECIONADO O LED FICA PISCANDO E NAO ASCESO DIRETO. E OUTRA COISA QUANDO GRAVA O PRIMEIRO BOTAO FICA ASCENDENDO OS DOIS LED,… TERIA COMO FICA ASSIM CASSO O BOTAO FICA APERTADO ELE FIQUE ASCESO OU PELO MENOS CONTE UM TEMPO TIPO 1 MIM PARA DEPOIS APAGAR, E TAMBEM GRAVA PRIMEIRO BOTAO E SO ASCENDER UM LED NESSE PRIMEIRO BOTAO.

    1. 0

      Olá Luciano!
      Obrigado por seu cometário. A versão RX_GEN_HT6P20B_V4P1.ASM é feita para ficar aceso direto o led caso o botão esteja acionado, sem piscar. A casos, em que existe muita interferência no local, que impede recepções continuas, gerando o efeito de as vezes piscar. Eu não entendi bem. Você disse que quando grava o primeiro botão fica acendendo os 2 leds? Quais leds? led1 e led2? led ‘learn’ e led1? led2 e led ‘learn’? É porque aprendendo um botão, aprende também o outro e você quer que o aprendizado seja individual? Se for o caso, use a versão RX_GEN_629_V9AP1_ASM. Fico no aguardo por mais esclarecimentos.
      Claudio

  43. 0

    é isso mesmo amigo mas o que puder fazer ja ta bom tipo aquele sistema de 3 canais ter a opção modo pulso ou retenção com jumper pode ser no lugar do led status de gravação

  44. 0

    a ideia de usar um 16f628 tb daria certo , quantos canais seriam possiveis com a opção de pulso ou retenção , agora sobre o I2C foi so uma ideia com sei que o pic12f629 é limitado porem 2 micros destes no mercado custam em media uns 2,20 ja um pic16f628 custa em media uns 7,00 pensei na ideia de fazer um pic comandado outro , por isso do I2C , seria tipo um seria o seletor de modo , o outro receberia a data e acionaria a saida , fico pensando até mesmo com 3 canais teria como colocar a opção pulso ou retenção externa e não interna como vc fez em uma versão ja que a versão externa é limitada em 2 canais pois justamente tem o pino do juper e o pino do led status de gravação , não quere ser chato mais um amigo ja procurou comigo um tipo de circuito deste ele queria acionar um sistema de lampadas para uma peça porem umas lampadas deveriam piscar isso ele poderia fazer no modo pulso e outras lampadas deveriam ficar acessas isso em modo retenção não sei se consegui passar a ideia , agora imaginado um projeto em que possa ter mais canais e um sistema de modo de seleção pensei até na ideia , não sei se seria possivel mas de usar o modo analogico do pic16f628 atraves da vbariação de tensão selecionase o modo de determinado pino isso seria bem comlexo rsrsrs , mas mesmo se possivel tipo 6 canais e 6 modos de seleção , ja mais alem usando 2 pic 12f629 ou 675 daria 6 canais e 2 modos de leção o receptor seria em comum mais basta criar um unico projeto com 675 ou 629 tirando o led status trasnformando em saida e mantendo o jumper de modo pronto com duas montagens teria o modo pulso e o modo retenção separados e com 3 canais . amigo obrigado pela sua atenção

    1. 0

      Olá Liliano! Em suma, você gostaria de ter o máximo de canais com opção para ‘pulso’ e ”retenção’ externo, com os chip mais baratos.
      Claudio

Os comentários estão fechados.