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

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 código hex no microcontrolador PIC 12F629, e colocando na mesma placa do receptor de controle remoto genérico já publicado, você terá a opção de fazer experiências interessantes ou ainda , agregar a uma aplicação que deseje fazer ou usar. O programa permite a captura dos 24 bits 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 período 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 código 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 genérica.

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 idêntica ao acima, mas com opção de inverter a saída 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):

Na versão 7, com opção de usar mais um led (led3) no pino 3, podendo ser alterado o programa para modo ‘PULSO’ ou ‘RETENÇÃO’, por comentar e descomentar na ‘opção de usuário’ do arquivo ASM e recompilar. Para facilitar, segue uma pasta com arquivos compilados para modo PULSO e outra para modo RETENÇÃO, atualizada em 15/10/2017:

RX_GEN_HT6P20_V7_PULSO_

RX_GEN_HT6P20_V7_RET_

Segue vídeo caseiro do funcionamento da versão 7 em modo retenção:

Segue arquivo ASM para versão acima, mas com inversão das saídas 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 saída por um número de vezes, alterar qual saída 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’

Segue abaixo uma versão de 1 canal, modo pulso, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P20B_PULSO_XC8

Segue abaixo uma versão de 1 canal, modo retenção, feito em “C” no compilador MPLAB-IDE XC8:

RX_HT6P_XC8_RET

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

248 comments on “RECEPTOR DE CONTROLE REMOTO GENERICO PARA HT6P20B COM PIC 12F629/675

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

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

  3. 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. 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. Olá Genilson!
        Realmente não entendi o que você deseja. Estes receptores já não tem display!!!
        Cláudio

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

  4. 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. 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. 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. 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. 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. 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. 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. 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. Olá Waymovie!
            Voce verificou se não é por tempo que ele está desligando? Qual é o código que você está usando?
            Cláudio

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

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

Comments are closed.

Back To Top