Hoje encontramos no mercado, transmissores de controle remoto para portão e alarmes com vários circuitos integrados. Que tal um único código em que pudéssemos optar qual modelo usar?
Analisando as muitas situações de uso para os controles remotos, desejei tentar fazer um programa que atendesse as mais variadas necessidades dos hobistas. Por exemplo: Um artigo é postado para um receptor usando um HT6P20b, com 2 canais. Surge alguém que precisa de 3 canais. Outro hobista deseja um canal invertido. Ainda outro, que a saída seja em modo ‘retenção’ para todos os pinos. Sem falar dos que desejam um pino em modo ‘pulso’ e outros em ‘retenção’. Realmente se torna um pouco ‘enfadonho’, escrever e reescrever os códigos já publicados, com estas simples alterações. Também, em muitas localidades não se encontra determinado integrado usado na montagem, mas existe de outros modelos. Surgiu a ideia de escrever um código em que fosse possível montar nosso receptor a ‘LA CARTE’. Cada hobista escolheria sua opção e marcaria no código. Depois é só compilar e carregar o PIC.
As características desejadas obtidas neste código são estas:
1) Opção de escolher qual integrado do transmissor iremos decodificar. Assim, poderá ser optado pelo ci HT6P20B, PT2262,PT2240B e família HCS 200 …301 (somente em modo fixo, sem usar o HOPPING CODE).
Obs. Apenas um modelo pode ser usado por vez.
2) Opção de escolher de forma individual, se as saídas serão em modo ‘PULSO’ ou ‘RETENÇÃO’.
3) Opção de escolha de forma também individual, se as saídas serão ‘invertidas’ ou ‘normais’.
4) Opção por aprendizado único de todos os botões (para uso em um único aparelho) ou aprendizado individual (para uso com vários aparelhos)
5) Escolher entre o PIC 12f675 ou 629.
6) Escolher carregar um byte de calibração provisório (em situações de perda deste de forma acidental). Os Pics ‘encostados’ , por não funcionarem em programas gerados em compiladores ‘C’, pela falta deste byte de calibração, poderão ser reaproveitados.
7) Possibilidade de mudar quais pinos serão usados, respeitando as limitações para pinos específicos.
Outra necessidade é que fosse em uma linguagem mais ‘usual’ e não no ‘Assembly’, pois muitos tem ‘aversão’, uma genuína ‘idiossincrasia’ só da menção do nome desta nobre linguagem. Dando os primeiros passos na linguagem “C”, portanto, esta foi a linguagem escolhida para este humilde projeto de iniciante. Creio que, para quem já é experiente nesta linguagem, não terá dificuldade em alterar e talvez simplificar as linhas de código. Mas foi o que consegui e portanto, estou compartilhando. Todas sugestões serão bem recebidas, de como fazer de uma forma melhor.
Voltando ao código, foi usado o compilador CCS C para a compilação, podendo ser usado a versão de demonstração. Logo no início do programa, podemos alterar nossas escolhas em ‘Opções do Usuário’, por comentar ou descomentar as linhas relacionadas as opções.
A rotina faz uso da interrupção do Timer 0 a cada 100 microssegundos, para analisar o estado da entrada que tem o sinal do receptor de 433mhz (RFIN, pino 3). Se for ‘0’, irá incrementar o contador ‘LC’ e acionar o flag_L. Depois, quando a entrada ficar ‘1’, irá incrementar o contador ‘HC’. Quando a entrada rfin ficar ‘0’ novamente, será analisado se o contador ‘LC’ estourou um valor máximo, o que indicaria um intervalo grande (pausa entre transmissões) e que servirá de sincronização do sinal. Se o valor de ‘LC’ ficou abaixo do permitido, haverá uma subtração de ‘LC’- ‘HC’, cujo valor do ‘carry’ será deslocado para dentro do buffer de recepção de 3 bytes e resetando ‘LC’, ‘HC’ e o ‘flag_L’, em preparação para um novo bit a ser recebido. Ao final de 24 bits recebidos (ou 64 no HCS) teremos uma recepção completa. Isto será sinalizado por setar o ‘flag_rok’. São feitas 2 recepções para comparar e eliminar erros de transmissão. Depois a rotina procura na memória pelo número transmitido (serial number), se já foi aprendido na memória. Se foi, irá acionar as saídas de acordo com as opções escolhidas pelo usuário. Se não, irá verificar se o botão ‘LEARN’ foi apertado (e o led ‘learn’ deverá estar aceso). No caso de ter sido apertado, será gravado este número recebido na EEprom e apagará o led “LEARN’. Com respeito a recepção do HCS, foi aproveitado apenas parte do serial number (HCS usa 28 bits + 4 botões= 32 bits ou 4 bytes da parte ‘fixa’ + 32 bits ou 3 bytes na parte encriptada, mas são gravados na EEprom apenas 22 bits + 2 bits dos botões). A razão desta decisão foi dar compatibilidade com os outros controles que usam apenas 3 bytes para o serial number.
Atenção: Este programa é de caráter didático apenas, sujeito a bugs ainda não detectados.
Segue o arquivo ‘C’:
Segue pasta zipada com os arquivos do projeto (10/11/2013):
Segue pasta zipada com os arquivos do projeto ( atualizada em 17/12/2016):
Segue pasta zipada com os arquivos do projeto, sendo esta uma versão que salva o estado das saídas em retenção na EEprom do pic e retorna no seu reset ( 17/12/2016):
E versão (em teste) para ht6p20d também:
Como a montagem permite muitíssimas combinações de circuitos integrados e modos de operação, ficará evidente porque não tentei fornecer o arquivo Hex. Cada hobista deverá escolher a suas opções e recompilar, para obter o arquivo HEX.
Obs. Ainda não obtive retorno do funcionamento do código para PT2262, sendo testado apenas com o clone do PT2262 deste blog.
Segue os esquemas de 4 sugestões de montagens, onde temos receptores de 1 a 4 canais:
Manuais:
HCS200
PT2262
PT2240b
Pic12F675
Curiosidades:
O rio que teve seu curso invertido
Outros grandes terremotos estão por vir
Será que Deus é o responsável?
Teve um Projeto? O econômico peixe-cofre
Por que a cooperação é essencial
Como poderá manter um conceito equilibrado sobre o dinheiro?
Sou viciado em aparelhos eletrônicos?
20 modos de criar mais tempo
Dengue — uma ameaça crescente
Preservados numa gota dourada
O “mundo perdido” da Bolívia
Outros assuntos:
Um site para você
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
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?
Perguntas Bíblicas Respondidas
Até o próximo artigo!!!
Olá Cláudio, e a TODOS que estão lendo! Um feedback IMPORTANTE! Depois de muitos testes e perguntas ao autor, descobrimos um problema surreal que muitos podem estar enfrentando: O COMPILADOR! Mudamos a versão do compilador para uma mais antiga e ele resolveu funcionar! Utilizava-mos a 4.2 e mudamos para a que o Cláudio utiliza: 3.2. Funcionou perfeitamente. Se mais alguem tiver esse problema, espero ter contribuido! Um abraço a todos
Olá Ronantussi!
Obrigado pela dica. Algo me intriga: Que tipo de código de erro você estava recebendo do compilador?
Cláudio
Olá Cláudio. Na realidade não aparecia nenhum erro. Simplesmente não funcionava. Meu sócio que descobriu isso ao longo de anos de experiência. COmplicado não?
Olá Ronantussi!
Obrigado pelo retorno. É este tipo de coisa que desanima muitos iniciantes na arte de programação. Fazer o que! Mas nada que uma ‘boa persistência e boa dose de paciência’ não resolva.
Cláudio
Ola,,gostaria de testar o controle HT6P20B apenas para acender e apagar um LED. O que deveria ser acrescentado na rotina para isso??
Olá Ronantussi!
Você deverá primeiramente recompilar o arquivo “C’ com um compilador CCS, mas alterando a opção de ci conforme abaixo:
//==============================================================================
//ESCOLHA O TIPO DE CI DO TRANSMISSOR:
// O transmissor poderá ter qualquer dos integrados abaixo:
// PT2240B / PT2262 / HT6P20B
//Descomente o CHIP desejado e comente os outros usando ‘//’.
#DEFINE CHIP_PT2240B
// #DEFINE CHIP_PT2262
// #DEFINE CHIP_HT6P20B
// #DEFINE CHIP_HCS
Escolha também se será modo pulso ou retenção e ainda se será saídas normais ou invertidas, conforme explicação no próprio texto do programa ‘C’.
Depois, deverá usar o HEX obtido na compilação para carregar o PIC. Desta forma, conseguirá receber a transmissão do ht6p20b.
O próximo passo será escolher o primeiro circuito e montar (para uma unica saída). No pino 6 ligue apenas um resistor de 470 ohms e o led ao gnd.
Com o circuito montado e alimentado, realize o aprendizado do tx docontrole, seguindo as instruções do artigo.
Você terá então um led acendendo e apagando conforme apertar o tx.
Divirta-se!!!
Cláudio
Olá Claudio,,,Entendi o procedimento. Mas devo DESCOMENTAR o HT certo? ali vc descomentou o outro…Outra coisa, estou usando um PIC 16F1827. Muda muita coisa? Não esta dando certo o firmware, talvez por algum setup dele. Como devo proceder??
Olá Ronantussi!
Sim, você deverá descomentar o HT e deixar comentado os outros. O programa foi feito para o pic 12f675. Para usar outros PIC’s terá de estudar profundamente os seus datasheets e ver o que está agregado a cada port. Terá que desabilitar funções desnecessárias e habilitar outras. Alguns tem uma seleção de frequência ampla, tendo que inserir código para escolher esta frequência de operação. Talvez a palvra de configuração seja diferente. Enfim, dará um pouco de trabalho. Eu nunca usei este modelo, portanto, não saberia informar em detalhes o que teria que ser feito para mudar o código para ele.
Cláudio
Cláudio…gostaria de saber qual é o valor do resistor que devo usar entre os pinos 3 e 4 do HT6p20B para definir o clock de operação deste. Um resistor de 2M2 irá funcionar com seu firmware?
Olá Ronantussi!
Sim. Poderá usar 2M2 que é o valor que vem na maioria dos controles comerciais. Existe uma boa margem de tolerância para o funcionamento, apenas não testei ainda o máximo e o mínimo.
Cláudio
Cláudio,
Realmente lhe perguntei isso pois não funcionou o protótipo. Montei conforme o que me mostrou, aperto o botao LEARN, o led LEARN fica aceso, eu aperto o TX do controle e nada. Da o tempo e o led LEARN se apaga mas nada acontece. Descomentei o controle que estou usando e montei o esquema igualzinho no protoboard. Sabes onde posso estar errando? talvez nas saidas que acendem os leds?
Olá Ronantussi!
Vocé deverá certificar que a:
1) frequência do seu transmissor seja a mesma do receptor, pois existe modelos de tx e rx para várias frequências. Para ter certeza que o receptor está recebendo a transmissão, coloque um pequeno disco piezoelétrico em serie com um resistor de 2 a 5 k, do pino OD (out digital) ao gnd. Ao apertar o tx deverá ouvir um som peculiar de transmissão, se estiver recebendo corretamente. Se não ouvir, verifique se o tx está funcionando corretamente (verifique a bateria de 12 volts e conexões) e se ambos (tx e rx) são da mesma frequência.
2) Certifique de ter compilado um hex com a opção para ht6p20b, senão carregará o pic e não funcionará ( o Hex do site é para pt2262). Portanto, deverá abrir um novo projeto no compilador CCS , anexando o arquivo ‘.c’, já comentando as opções não usadas e descomentando a opção para ‘ht6p20b’. E com este novo hex, deverá usa-lo para gravar o pic.
3) Confira todas as ligações na montagem, conferindo pino a pino.
4) Meça a tensão de alimentação e certifique que seja 5 volts.
5) Se tudo ok, até aqui, tente aproximar o tx do rx e aperte o botão ‘learn’. Acenderá o led de apredizado, em seguida, aperte um dos botões do controle. Deverá apagar imediatamente, se tudo estiver correto, e passará a funcionar com o toque da tecla.
Espero que seja de ajuda o acima
Cláudio
Ola CLáudio.
A gente fez os testes usando um osciloscopio e comprovou q o circuito esta funcionando. Qual a versão do CCS que você esta utilizando? Pois quando se atualiza o CCS, alguns programas que antes funcionavam param de funcionar.
Olá Ronantussi!
Você confirmou com o osciloscópio que está funcionando o tx e rx corretamente (emitindo e recebendo corretamente) . Você está usando o PIC 12f675 ou migrou para outro modelo? A versão é bem antiga -> CCS PCM C Compiler, Version 3.200.
Cláudio
Boa tarde Larios, primeiramente queria parabenizá-lo pelo post, um assunto muito interessante e esta me ajudando muito a desenvolver um trabalho na área.
Tenho uma pequena dúvida, estou utilizando um chip HCS para transmitir, porém adaptei o código que fez para utilizar com um PIC16F876A, cadastra o controle normalmente, porém não estou conseguindo acionar as saídas, estou utilizando os Pinos C0 à C3 do meu PIC. Se puder me dar uma ajudo fico grato.
Obrigado.
Olá Renan! Agradeço seu comentário apreciativo. Quando se muda de pic deverá ficar atento que mudará os endereços dos registradores de sentido de porta e poderá existir outros periféricos usando o mesmo pino. Isto complica um pouco. Comece observando atentamente se está carregando o valor correto para o TrisC no começo do ‘main’. Tente colocar uma linha de código para ligar a saída c3 por exemplo e ligue nele um led com resistor de 470 ohms ao gnd. Compile e veja se aciona ou não a saída. Se não acionar, verifique de novo se está resetando o bit de forma correta no trisC. Verifique se não tem periféricos assumindo o pino, estudando cuidadosamente o datasheet, em especial o que está sendo compartilhado nos pinos c0 a c3. A casos que precisamos desligar conversores analógicos,desligar comparadores, etc, pois no reset eles já entram assumindo a porta. Desejo uma boa diversão para você!
Cláudio
Olá Larios, é meu primeiro acesso no site. Fiquei muito empolgado com as postagens, já que estou iniciando com programação. Quando tiver alguma dúvida ou até algo interessante para compartilhar o farei.
Parabéns pelas postagens!
Olá Joarez! Agradeço seu comentário apreciativo e sua disposição em ajudar. Fique a vontade em compartilhar suas idéias.
Cláudio
Boa tarde Cláudio.
É possível implementar neste programa mais uma função para utilizar os controles de 4 botões com HT6P20D??? pois não encontro os controles com o CI PT2262 e PH2240B. Obrigado.
Olá Roberto! Vou analisar a viabilidade de sua sugestão e se for bem sucedido, postarei em um artigo futuro.
Cláudio
OK, fico no aguardo. Obrigado.
Olá Roberto! Poderia, por gentileza, testar este código aqui?
Cláudio
Boa tarde Claúdio.
Testei o programa para o HT6P20D funcionou o acionamento dos 04 botões, mas em alguns momentos quando precionado qualquer um dos botões as 04 saídas acionando simultaneamente pode ser alguma coisa com a montagem do meu circuito ou com o compilador, estou utilizando um PIC 12F629 e o compilador PIC C Compiler, já encomendei o PIC12F675 mas chegará somente na próxima semana.
Pergunto, para o transmissor de 03 botões com o HT6P20B não está habilitado??? Testei mas não funcionou com o controle de 03 botões. Obrigado.
Olá Roberto! O terceiro botão do controle nada mais é do que o acionamento simultâneo dos 2 outro botões. Usando a opção de código para ht6p20b já faz esta função. Já usando a opção para ht6p20d, não foi incluida no código, pois daria confusão. Com o ht6p20b conseguimos obter 3 possibilidades + o desligado. Com o ht6p20d poderemos ter até 15 combinações + o desligado. Vai vendo a confusão que dá! Quanto ao acionamento simultâneo, confesso que não pude testar o circuito por não dispor de um ci ht6p20d.
Cláudio