Controlando a distância muito mais dispositivos…
Controlar dispositivos a distância pode ser bem prático. Por isto voltamos a este tema, tirando o máximo de canais que pode ser conseguido de forma direta em um PIC 16F628A. Note que esta montagem é um aprimoramento do controle remoto de 8 canais do artigo “CONTROLE REMOTO 8 CANAIS ON/OFF – PIC 16F628A”, sendo portanto, também compilado em ‘ASM’ por motivos óbvios.
Abaixo podemos ver o novo esquema, tanto do transmissor como do receptor, com mais 7 canais adicionais, em relação a montagem anterior citada acima.
Como o PIC 16F628A dispõe de 18 pinos e apenas 15 pinos que podem ser configurados como saídas, obtemos este máximo de 15 canais, conforme pode ser observado no esquema acima.
Os meios de transmissão podem ser diversos:
1) Par tx/rx por rádio frequência, como os comerciais de 27 , 72 , 315, 430 Mhz.
2) Por luz usando diodo emissor infrared no transmissor e apontando para um fototransistor no receptor.
2) Ligando direto por um fio do pino de saída do transmissor (pino 17) para a entrada do receptor (pino 4), sendo que neste caso, visaria apenas economizar cabos. Os comandos seriam enviados por um único fio ao invés de 15 fios.
Porém, o esquema acima trata apenas do envio por RF, com um transmissor de 27 Mhz e um receptor da mesma frequência.
Cada interruptor pode ser programado no código do receptor, para operar em modo retenção ou pulso. Cada hobista escolherá no arquivo ‘asm’, por comentar ou descomentar a opção desejada. Depois, deverá compilar no Mplab para gerar o arquivo ‘.hex’ a ser carregado no pic. O arquivo do transmissor é o mesmo independente da opção ‘retenção’ ou ‘pulso’.
Na pasta dos arquivos desta montagem foi feita 3 compilações que podem ser carregadas no pic: a primeira com todas as saídas em retenção, a segunda com todas as saídas em modo pulso e a terceira com 8 saídas em retenção e 7 em modo pulso. Qualquer outra opção diferente destas terá que mudar no arquivo ‘asm’ e recompilar, conforme já mencionado.
Obs. Esta montagem foi realizada apenas em placa experimental (do tipo Protoboard), sujeita a bugs ainda não observados. Está sendo fornecido os arquivos que poderão ser alterados conforme a necessidade do hobista.
Segue pasta com os arquivos desta montagem, unicamente em ‘ASM’, atualizada em 20/05/2016:
Manuais:
Curiosidades:
As magníficas araras
Pneus — sua vida pode depender deles!
Preservados numa gota dourada
Quem dividiu a Bíblia em capítulos e versículos?
Dinheiro e pesos nas Escrituras Hebraicas
A vida sem visão
Outros assuntos:
Será que é amor ou paixão?
O que fazer quando seu filho mente
Como conversar com seu filho adolescente — sem discutir
A Bíblia é apenas um bom livro?
Como ensinar seu filho a usar a internet com segurança
Perguntas Bíblicas Respondidas
Coleção de Vídeos Educativos
Histórias Bíblicas Ilustradas
Até o próximo artigo!!!
boa noite Claudio, gostaria de usar uma bateria de 9v com regulador no transmissor .qual regulador devo usar para poupar a bateria: 7805, 78l05, diodo zener ou outra forma ?? seria somente para o pic, o módulo ligarei direto no 9v. desculpe tantas perguntas .
Olá Michael!
Poderá usar o 78L05 por ser pequeno em tamanho e baixo consumo sem carga.
Cláudio
olá Claudio,
montei o circuito e achei um problema em relação ao led ligado no RB0 ,ao desligar e ligar o circuito ele não volta ligado caso tenha sido acionado no modo retenção antes de desligar(testei a versão mista). olhei no programa e achei o seguinte:
IFDEF CANAL1_RET
ANDLW .1
BTFSS STATUS,Z
BSF PORTB,0
ENDIF
IFDEF CANAL2_RET
MOVFW TMP ;todos os outros canais contém essa instrução
ANDLW .2
BTFSS STATUS,Z
BSF PORTB,1
ENDIF
depois adicionei essa instrução no CANAL1_RET e funcionou normal ( salvando seu estado ao desligar e ligar ).o problema era isso mesmo ?? voltei a querer aprender assembly e achei um canal bem legal no youtube que tem video aulas de assembly para pic e muitas outras coisas e estou “tentando” aprender . o canal é WR Kits .
Olá Michael!
Muito obrigado por trazer a atenção esta falha no programa e sua correção. Já fiz as correções sugeridas e postei junto ao artigo.
Obrigado
Cláudio
Claudio , tem como deixar o pulso mais rápido ao soltar o botão, assim que solta o botão o led ainda fica aceso um tempinho.tem como tirar esse tempo ??? obrigado .
claudio , reparei agora que se deixar um botão (modo pulso) apertado, as outras saidas apagam rápido quando soltam seu respectivos botões .
Olá Michael!
Este tempinho é necessário pois temos um tempo entre as transmissões sucessivas. Senão ficaria piscando a saida.
Cláudio
boa tarde Claudio. entendi, ok então. obrigado e um abraço.
Olá Cláudio, tudo bem? Mais uma vez venho aqui te pedir ajuda, rs.
Comprei uma protoboard e fiz todas ligações, porém estou tendo problema pra fazer funcionar. Todos botões em modo retenção, quando alguns leds estão acesos, ao acionar outra porta alguns desligam e há portas que parecem “alternar”, pois outro led acende. E em modo pulso tem uns 4,5 que não acendem. As ligações estão certas, com os resistores de 10K nas respectivas portas, porém, como não tenho resistor de 470ohm ou menor para colocar em série com o led, liguei eles diretamente, pois minha fonte também é de pouca amperagem. A comunicação dos dois pics estão sendo feitas por cabo. O que posso estar fazendo errado? Agradeço a ajuda ! Abraços !!! 😀
Olá Gerson!
Sem os resistores limitadores, o port fornecerá 25 mA por pino. O máximo permitido passando pelo pino VSS é 300 mA e 250 mA pelo VCC (pagina 135 do datasheet). Então 15 leds acesos totalizarão 375 mA, o que ultrapassa o limite de dissipação. Se sua fonte não consegue fornecer pelos menos 400 mA, irá derrubar o VCC levando o pic a resetar. Isto ficará continuamente nesta situação. Procure seguir de perto o esquema.
Os leds são apenas para indicação em testes. Na aplicação serão substituídos por um resistor de 4k7 a base de um transistor que comandará reles, etc. Não ultrapasse o limite de segurança para não torrar seu pic.
Cláudio
Claudio,
Se caso montar estes circuito e os reles acionarem contatores, eu não vou ter problema de resetar o pic quando acionar o mesmo (indução da bobina do contator na alimentação do circuito, visto que a mesma fase vai alimentar o Trafo que alimentara a placa). Estou com uma placa aqui que quando se aciona 2 contatores ela reseta o pic, chegando a apagar a memoria do mesmo. Achei interessante o seu projeto, mas estou com duvidas enquanto utilizado com os reles e contatores o mesmo não sei de que maneira resetar o pic toda a vez que o contator acionar.
Olá Carlúcio!
Realmente, este é um grande problema com os pic’s – serem muito sensíveis as interferências. Geralmente o que se faz é atacar o problema do ruído na sua fonte. Como o contator trabalha com corrente alternada não dá para colocar um diodo em paralelo com a bobina. Mas poderá usar um capacitor de 220 nanoFarads/600v em série com um resistor de baixo valor (30 ohms 1watt), colocando na bobina do contator, para suprimir os picos gerados ao ligar e desligar. A alimentação do pic deve ser muito bem feita, com reguladores e capacitores para filtrar os ruídos elétricos. Em alguns casos necessita-se até de blindar o circuito do pic com chapa metálica, pois o ruído pode vir por RF. Talvez encontre mais informação pesquisando na internet sobre este tópico.
Cláudio
Claudio,em outro circuito eu já fiz esse snuber que você indicou, mas ele funcionou durante um tempo. Depois não sei como o circuito mesmo com ele deixou a interferência passar e bagunçou a memoria do pic toda.
O engraçado que aqui na sua pagina eu montei e estou utilizando o controle remoto de 2 canais com controle code learning. Nele eu usei nos reles contator para ligar uma bomba de poço e nunca ate hoje (nos 15 dias que montei ele), não deu um reset por causa da bobina do contator. Sera que o pic12f675 tem diferença na sua estrutura que explicaria isso em relação ao pic16f628a?
Olá Carlúcio!
É uma boa pergunta que eu não saberia responder. Já tive problemas com isto também e não cheguei a uma conclusão do porquê. Certa ocasião tentei fazer um contagiros para motor de carros que usava apenas um fio enrolado no cabo da bobina para obter pulsos de contagem. Mesmo colocando um foto-acoplador entre este circuito de entrada, ainda resetava. Mesmo usando pilhas para alimentar, ainda resetava. Acabei desistindo do projeto, até que encontre uma solução para isto.
Cláudio
Olá Cláudio, me tire uma dúvida por gentileza.. Estou prestes a fazer este projeto, e queria saber porquê tem os resistores de 10k em RA1 a RA7, é por causa do modo retenção? Eu queria poder ter apenas 3 canais no modo retenção, como posso fazer? Estou projetando um robô explorador.
Obrigado, abraços !!
Olá Gerson!
Os resistores em RA1 a RA7 são ‘pullups’ para manter o nível 1 quando os interruptores não estão pressionados. O portb já tem ‘pullups’ internos ativados no programa, portanto, não necessitou a sua colocação. Para obter apenas 3 canais em retenção, escolha quais pinos você deseja e comente no programa asm , os outros pinos, nos defines do usuário.
ex:
Quero que o pino 6,8 e 10 sejam retenção.
Então, comente no ASM do RECEPTOR ( CR_RX_15C_PROG_V5_ASM), como abaixo, usando ‘;’ na frente dos #defines:
;==========================================================
;ESCOLHA O MODO DE OPERAÇÃO DAS SAÍDAS DE FORMA INDIVIDUAL
;COMENTE PARA ‘PULSO’ E DESCOMENTE PARA ‘RETENÇÃO’
#DEFINE CANAL1_RET ; SAIDA DO LED 7 (PINO 6 RB0) EM MODO DE RETENÇÃO
;#DEFINE CANAL2_RET ; SAIDA DO LED 6 (PINO 7 RB1) EM MODO DE RETENÇÃO
#DEFINE CANAL3_RET ; SAIDA DO LED 5 (PINO 8 RB2) EM MODO DE RETENÇÃO
;#DEFINE CANAL4_RET ; SAIDA DO LED 4 (PINO 9 RB3) EM MODO DE RETENÇÃO
#DEFINE CANAL5_RET ; SAIDA DO LED 3 (PINO 10 RB4) EM MODO DE RETENÇÃO
;#DEFINE CANAL6_RET ; SAIDA DO LED 2 (PINO 11 RB5) EM MODO DE RETENÇÃO
;#DEFINE CANAL7_RET ; SAIDA DO LED 1 (PINO 12 RB6) EM MODO DE RETENÇÃO
;#DEFINE CANAL8_RET ; SAIDA DO LED 0 (PINO 13 RB7) EM MODO DE RETENÇÃO
;#DEFINE CANAL9_RET ; SAIDA DO LED 8 (PINO 17 RA0) EM MODO DE RETENÇÃO
;#DEFINE CANAL10_RET ; SAIDA DO LED 9 (PINO 18 RA1) EM MODO DE RETENÇÃO
;#DEFINE CANAL11_RET ; SAIDA DO LED 10 (PINO 1 RA2) EM MODO DE RETENÇÃO
;#DEFINE CANAL12_RET ; SAIDA DO LED 11 (PINO 2 RA3) EM MODO DE RETENÇÃO
;#DEFINE CANAL13_RET ; SAIDA DO LED 12 (PINO 3 RA4) EM MODO DE RETENÇÃO
;#DEFINE CANAL14_RET ; SAIDA DO LED 13 (PINO 15 RA6) EM MODO DE RETENÇÃO
;#DEFINE CANAL15_RET ; SAIDA DO LED 14 (PINO 16 RA7) EM MODO DE RETENÇÃO
Onde tiver o ‘;’ na frente, operará em modo ‘PULSO’ e os sem, em modo ‘RETENÇÃO’.
Depois, deverá compilar novamente este arquivo usando o Mplab-Ide para obter o
arquivo .hex a ser usado no pic.
Cláudio
Olá Cláudio, obrigado pela resposta. Fiz a emulação no Proteus e funcionou certinho. Você é o Cara !! Porém no pino 3 do receptor, liguei um resistor de 220 ao 5V ao invés de 470, e coloquei outro de 220 em série com o Led (tudo no Proteus) porque o led tava com o brilho meio fraco. E só uma mais uma coisa: Eu quero fazer dois desses, corre o risco de dar interferência caso eu use os dois juntos? Obrigado !
Olá Gerson!
Muito bom que tenha tido sucesso em seu experimento, mesmo que virtual! Para usar vários conjuntos de tx/rx próximos uns dos outros, terá que usar cada conjunto tx/rx com frequências diferentes, ou mesmo canais dentro da frequência. Por exemplo, na faixa de 27 mhz tem 40 canais, começando com 26,965mhz até 27,405mhz, que podem ser usados, trocando-se os cristais no tx/rx (rx com cristal da mesma frequência do cristal do tx formando um par).
Cláudio