RECEPTOR GENÉRICO PARA PT2240B – COM PIC 12F675 (REF122)

0

Em muitas localidades existe facilidade para obter controles remotos (chaveirinho) com circuito integrado PT2240b, a preços modestos. Como usa-los em sua aplicação?

Este artigo mostra como fazer um receptor para controle remoto que use internamente o ci PT2240b.
Veja o esquema abaixo:

O circuito apresenta um PIC12F675 para decodificar os sinais recebidos por um receptor comercial de 433mhz. Se desejar usar um PIC12F629, basta alterar o modelo do microcontrolador no arquivo ASM e recompilar.
Temos as 4 saídas, que no circuito em questão, apenas acendem leds ao apertar os botões do transmissor.
Estes leds podem ser substituidos por transistores que acionem reles de carga, para controlar outros equipamentos.
Para usar um controle em conjunto com este receptor, será necessário primeiro aprender (learn) o controle. Para isto, basta apertar o botão ‘learn’ e também apertar um dos botões do controle remoto. Ao soltar o botão ‘learn’, deverá dar uma breve piscada no led ‘learn’ para indicar o aprendizado. Vários controles podem ser aprendidos. Querendo apagar os controles da memória, basta apertar o botão ‘learn’ por mais de 5 segundos. Ao começar a piscar o led ‘learn’, poderá soltar o botão, pois já terá sido concluido o apagamento da inteira EEprom (todos os controles apagados).
O protocolo do PT2240b é composto pelo envio de 20 bits de endereço (serial number), mais 4 bits de dados referentes aos 4 botões, se foram acionados ou não no controle remoto. Segue um bit de sincronismo, no qual está incluido uma pausa na transmissão, entre frames enviados.
Visto que nos transmissores existe um resistor que determina a frequência de clock, variando entre 4m7 a 430k, pode ser necessário, em alguns casos, alterar o valor de algumas ‘equates’ no ASM. Foi usado um valor, que reproduz um clock por volta de 100khz (valor muito usado nos controles comerciais).
No código ASM, a entrada de RF é verificada a cada 100 useg, e se for ‘0’ incrementará o contador ‘LC’ e se ‘1’, o contador ‘HC’.
A rotina faz uso de 2 flags para controlar a captura dos bits recebidos. São eles os ‘FLAGH’ e ‘FLAGL’. Somente quando os 2 estiverem setados e o contador ‘LC’ não ultrapassar a contagem máxima dada pela equate ‘Tmax’, que o bit será deslocado no buffer de recepção de bits, composto por Res2 a Res0. A subtração do conteudo de ‘HC’ menos ‘LC’ que determinará o bit a ser deslocado como ‘1’ ou ‘0’ (carry). Para garantir uma recepção sem erros, a primeira recepção é comparada com uma segunda recepção. Somente se houver igualdade é que será acionado as saídas correspondentes. Para mais detalhes do circuito integrado PT2240b e seu protocolo, veja o seu datasheet.
Obs. Este circuito foi montado apenas em protoboard, sujeito a bugs ainda não identificados. Está sendo fornecido o arquivo ASM que poderá ser odificado conforme as necessidades dos hobistas.
Poderá usar além de controles remotos comerciais com ci PT2240b, este tx feito com PIC 12f675 ‘clone_pt2240b’, publicado neste blog.

Segue pasta com os arquivos, atualizada em 12/03/2015:

RX_GEN_PT2240B_FILES

Para os que desejam uma versão com possibilidade de escolher individualmente cada pino para modo pulso ou retenção, por comentar na opção de usuário e depois recompilar no Mplab, segue pasta com arquivos, atualizada em 12/03/2015:

RX_GEN_PT2240B_RET_FILES

Caso deseje uma versão em ‘C’ para compilador CCS, poderá obter os arquivos em pasta compactada clicando abaixo:

rx_gen_2240_ret_C

Nesta versão também podemos escolher o modo de operação pino a pino, por mudar a ‘opção do usuário’ e recompilar.
O modo de operação de aprendizado foi alterada: Aperte o botão ‘learn’ e acenderá o led ‘learn’. Acione o controle, que ao aprender, apagará o led ‘learn’. Uma atenção especial deverá ser dada ao ‘byte de calibração’ no pic, que deverá estar intacto. Se ele for perdido em um apagamento acidental, o circuito não funcionará. Foi previsto uma opção de usuário, para carregar um byte provisório, que permitirá o funcionamento nestas condições.
Curiosidade: Por que não funciona um programa sem o byte de calibração? No compilador ‘c’, de forma automática, no início do programa, irá buscar o byte de calibração usando uma chamada de rotina (call) para o endereço 0x3ff. Para retornar da rotina, precisa encontrar o ‘retlw’ + valor de calibração (por ex. 3480; onde 34= retlw e 80= 0x80 para a calibração). Se estiver ‘apagado’ encontrará um 0x3fff. Não ocorrerá o retorno da subrotina e o programa se perde e reseta (vai para org0x00) e recomeça…reseta…. em loop eterno. Caso tenha perdido o byte de calibração e não quiser usar um provisório, poderá seguir as instruções do artigo ‘como calibrar a frequência do oscilador interno do pic 12f675/629‘ deste blog.
Como descobrir se perdi o byte de calibração de meu PIC? Basta ler a Flash (a memória de programa) e procurar no endereço 0x3ff (último) se tem um número começando com 34xx. Se encontrar, então existe o byte. Mas se observar apenas um ‘0x3ff’ nesta posição, então ele foi apagado.

Manuais:
PT2240b
Pic12F675

Curiosidades:
A passagem do Noroeste — realização de um sonho?
As ilhas Féroe — ligadas de um modo especial
Navegar orientando-se pelas estrelas
Os tesouros do maior lago da América Central
Recife — cidade que surgiu do açúcar
O mistério de Nan Madol
Os escravos esquecidos dos Mares do Sul
Os desastres naturais e o fator humano
O salmão — um “rei” em apuros
Lamu: a ilha perdida no tempo

Outros assuntos:

Deus é o culpado pelo nosso sofrimento?
O que os números significam na Bíblia? A numerologia tem base bíblica?
Lidar com sogros
Aprenda a perdoar
Lidar com dívidas
Como disciplinar seu filho adolescente
Por que eu me corto?
Desempenhem bem o papel de pais
Como fazer seu segundo casamento dar certo
O que acontece quando morremos?
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
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!!!

0

29 comments

  1. 0

    Hallo Claudio !! With new hex file everiting is OK. Any RC works OK.
    Thank you for your help, attention end patience 🙂
    THANKS END LUCK!!! REGARDS FROM BULGARIA 🙂

  2. 0

    Hi Cladio , i test this :

    delete oll R. controlers

    Learn only RC /re. contr./ №1 , read a hex ,this is a hex from eeprom
    00 16 8A 17 02 FF…… RC №1 work OK.

    aftar that deletig RC.

    Learn only re. contr. №2 ,read a hex, this is a hex from eeprom
    00 16 9E 2C 02 FF…… RC №2 work OK.

    Again delete RC

    Learn first RC №1, work OK, learn and RC №2 then work only RC №2… №1 does not work, read a hex from eeprom :
    00 16 8A 17 02 9E 2C 0 2FF……
    If i learn RC №2 and after that learn RC №1 then work only RC №1 .

    RC are like this :
    http://millenium-bg.net/millenium-model-slim-L/alarma-millenium-slim-l-242
    from car alarm system

    thank you for your help, i have not good experiance whit MCU.

    1. 0

      Hi Barlog!
      Ok, I need to know what hex file that was used in its assembly. Could you tell me what ?
      Claudio

  3. 0

    here are hex values from EEPROM :
    00 06 8A 14 02 9E 2C 0 2FF…… ; №1 + №2
    00 03 9E 2C 02 FF……. ; only №2
    00 03 8A 14 02 FF……. ; only №1

    1. 0

      Hi Barlog!
      I see that recorded the two remotes . Already working? If not, what is hex which used ?
      Claudio

  4. 0

    Hallo Claudio, thanks for your answare.
    i do everyting like your recomendations.But work only last learned remote controler…. R.controlers are comersial, with PT2240b – 4 butons, MCU is PIC12f675, i writing “hex” again but problem is same…. work only last learned r. controler.
    Sorry for my bad english . Regards from Bulgaria :))

    1. 0

      Hi Barlog!
      Try to learn a control and then read the eeprom through the pic programmer. Note the hex value read . Delete all controls. Learn the other control. Note the hex value read . Then you can compare if the codes are the same.
      Cláudio

  5. 0

    Hallo from Bulgaria ,
    my circuit work wint only one remote controler, After learning second r.controler circuit working only whit second, first not work ?? 😕

    1. 0

      Hi Barlog!
      I think you are deleting the remote control when you press more than 5 seconds, the learning button. Try this: press the remote button , and keeping fires , press and release the learning button. Then repeat for each desired remote control.
      Cláudio

  6. 0

    Hello!
    My circuit not work. I used New RF Wireless Transmitter & Receiver Kit Module 433Mhz for Arduino/ARM/MCU WL.
    This module is not supported?
    the link with module description:http://www.james robertson.eu/pages/2013/apr/28/rf-fa1000a-on-ebay.html
    The hex code has written without error, and circuit is made correctly.
    Thankyou!

    1. 0

      Hi crapone!
      I think have not problem to use that receiver as RX. Are you using a remote control tx with pt2240b inside?
      Claudio

      1. 0

        I tested with:
        1. TX AND RX GENÉRICO PARA PT2240B ( from your site )
        2. HS2240 car key fob ( from my car ) and GENÉRICO RX PARA PT2240B
        In booth case not work.
        I connected a led to DATA pin from RX module. The led blink rapidly. Its normally this?

        1. 0

          Hi crapone!
          When you push any botom for a transmission you will see the led blinking ( if wired at Data terminal in rx, that you mention it). I use a piezoeletric fone to ‘listen’ the transmission instead a led. Did you learn the tx before use? Is the wiring ok?
          Cláudio

  7. 0

    Olá bom dia ficou otimo funciona 100% agora se puder tirar uma duvida eu te agradeço. Eu montei a maioria dos controles remoto de seu site e pelo menos aqueles que montei funcionou mas eu notei que quando o RX recebe sinal do TX ele demora tipo uns milionesimos de segundo para acionar a saida .Isto nw tem atrapalhado em nada é que fiquei curioso para saber o motivo .Outra coisa vc tem publicado alguns tx genericos para PT 22xx e sei que para clonar no caso o meu controle de alarme preciso do codigo que é enviado e a forma mais facil de fazer isso seria usando um dos testes de controle remoto que vc publicou, porem ele nw é para esta familia PT22xx então o teste nw vai indicar nada no display certo.Agora a minha pergunta se eu analisar o hex de um rx ja casado com meu transmissor seria possivel extrair o serial do meu controle de lá ? e escreve lo no fonte dos clones publicados . Obrigado e parabens pelos projetos hoje vou montar o tx para pt2240 depois te retorno .Um abraço Edmilson LS

    1. 0

      Olá Edmilson!
      Quando você aperta um botão do TX, começa a transmissão bit a bit dos bytes a enviar. No ht6p20b temos 24 bits, transmitidos serialmente. Se cada bit demorar 1ms para transmitir teremos 24 milisegundos. Some o espaço entre transmissões de 15 a 20 milisegundo. O receptor precisa de 2 transmissões corretas para operar. Assim, no pior caso seria (24+20) *2 = 88 ms . Se falhar um bit qualquer, teremos que ter mais 2 transmissões corretas para acionar. Nesta hipótese, já gastaríamos 176 mseg. Temos o tempo de procura do controle na EEprom, que dependendo de sua posição poderá gastar mais alguns milisegundos. Então, tempos de 200 a 250 milisegundos de atraso podem ser esperados, entre apertar o botão e o receptor acionar.
      Para reduzir estes tempos, teríamos que ter um protocolo mais rápido, onde cada bit fosse enviado em alguns microsegundos. Para isto, o meio de transmissão não poderia ter apenas 4 kbauds, como são os RX e TX comerciais usados atualmente, mas teriam que ser de centenas de kbauds. Quanto a outra pergunta, se você conseguir extrair o serial do seu controle por ler o microcontrolador e usar este serial para programar no asm do artigo ‘clone’ deverá também funcionar. A maioria dos ci dos controles tem um bloqueio que não permite a leitura do código. Mas os controles com código fixo podem ser escaneados e copiados com equipamentos especiais. O único sistema que não permite isto é o ‘Hopping code’, pois cada transmissão é diferente da anterior e se baseia em uma ‘Key’ comum no TX e no RX, para decodificação.
      Claudio

  8. 0

    Olá Claudio montei o receptor e o mesmo funciona 100% com todas as 4 teclas.Tambem testei o apagamento de controles e funcionou. No meu caso o valor do resistor responsavel pelo clock é de 4m7 então nw teve que mudar nada no asm .Agora vou montar o tx generico para pt 2240 e testar tambem vou tentar tornar as saidas em modo retenção depois te aviso se eu consegui. E mais uma vez vc se superou parabens pelos seus projetos,e que Deus te de bastante saude e sabedoria para continuar publicando .Obrigado Edmilson LS

    1. 0

      Olá Edmilson! Fico muito feliz que deu certo! Obrigado por realizar os testes para mim e retornar as informações. Para fazer a ‘retenção’ terá que inverter a saída (toglle) a cada acionamento. Visto que ao acionar poderá gerar muitos ‘frames’ seguidos, isto fará que a saída alterne rapidamente. Para evitar isto, terá que usar um novo ‘flag’ que permita apenas uma mudança por acionamento (setando ) e ao soltar, deverá contar um tempo em que deverá resetar este flag. Estude exemplos realizados com ht6p20b nos artigos anteriores. Divirta-se!
      Cláudio

Comments are closed.