Adaptando mais funcionalidades ao seu modelo controlado…
Como aproveitar canais proporcionais de seu controle remoto para acionar por. ex. Luzes de navegação? Ou mesmo acionar algum outro dispositivo?
Basicamente, teremos que converter o sinal proporcional de 1000 a 2000 useg para um sinal apenas on/off. Fazemos uso de um pequeno microcontrolador de 8 pinos como o PIC 12F675. Para facilitar o entendimento, vamos analisar 3 circuitos possíveis que talvez possam ser úteis em seu projeto. Veja a primeira opção abaixo:
O que este circuito faz? Ao receber um sinal proporcional abaixo de 1500 uSeg o led fica apagado e acima, acende.
Desta forma, podemos controlar através de um transistor, vários outros componentes, como leds, rele, micromotor, buzzer , etc.
A entrada no pino 4 (GP3) está programada para perceber mudança de estado e gerar uma interrupção. Desta forma, podemos identificar o inicio do pulso positivo e usar o timer 0 para medir a largura deste pulso. Depois, o programa compara o valor obtido com um valor que corresponda a 1500 uSeg. O resultado será usado para ligar ou desligar a saída no pino 2.
A próxima opção:
Nesta segunda opção, temos 3 possibilidades no led:
1 ) Led apagado quando sinal for menor que 1300 uSeg.
2 ) Led piscando quando sinal for maior que 1300 uSeg e menor que 1700 uSeg.
3 ) Led aceso quando sinal for maior que 1700 uSeg.
Outros valores e comparações podem ser acrescentadas ao programa conforme a necessidade do hobista, lembrando de recompilar depois usando o MplabX (compilador XC8).
Veja agora esta terceira opção:
Neste circuito usamos 3 saídas que controlam cada uma um led. Podem ser ligados mais leds ou usar leds RGB, por exemplo.
O programa para esta versão permite controlar sequencialmente as saídas a medida que aumentamos e diminuímos o sinal de entrada na sua largura. Foi usado o valor de 1500 uSeg como patamar de basculamento.
Assim, a cada acionamento para um lado e para outro no ‘joy stick’ do transmissor, será equivalente a um pulso nesta montagem. E a cada pulso ocorre eventos diferentes que podem ser programados. Neste caso, usamos apenas leds com o seguinte resultado:
1º pulso – liga led1
2º pulso – desliga led1
5º pulso – pisca led1
4º pulso – desliga led1
5º pulso – liga led2
6º pulso – desliga led2
7º pulso – pisca led2
8º pulso – desliga led2
9º pulso – liga led3
10º pulso – desliga led3
11º pulso – pisca led3
12º tudo desligado
Logicamente podemos aumentar ou diminuir esta lista de eventos decorrentes conforme a sua necessidade, alterando os ‘case x’ do comando ‘switch (vez)’ no programa “C” .
Vemos abaixo esta porção do código:
switch (vez){//seleciona a operação desejada nas rotinas
case 0:{led1=0; led2=0; led3=0; f_led1=0; f_led2=0; f_led3=0; break;}//desliga tudo
case 1:{led1=1; f_led1=0; break;}//liga led 1
case 2:{led1=0; f_led1=0; break;}//desliga led1
case 3:{ f_led1=1; break;}//pisca led1
case 4:{led1=0; f_led1=0; break;}//desliga pisca led1
case 5:{ led2=1; f_led2=0; break;}//liga led2
case 6:{led2=0; f_led2=0; break;}//desliga led2
case 7:{ f_led2=1; break;}//pisca led2
case 8:{led2=0; f_led2=0; break;}//desliga pisca led2
case 9:{ led3=1; f_led3=0; break;}//liga led3
case 10:{led3=0; f_led3=0; break;}//desliga led3
case 11:{ f_led3=1; break;}//pisca led3
Percebe-se que não existe muita dificuldade em se fazer esta adaptação.
Para aquele que tem facilidade com componentes SMD, esta montagem fica realmente pequena, podendo ser feitas várias em uma pequena placa de circuito impresso, abrangendo vários canais se isto for desejado.
Obs. Esta montagem é de natureza didática, sendo realizada apenas em placa de montagem experimentais (do tipo Protoboard), sujeito a bugs ainda não observados. Esta sendo fornecido os arquivos desta montagem, podendo ser alterados conforme a necessidade dos hobistas.
Atenção: Antes de fazer placa de circuito impresso, teste em placa de montagem experimental e veja se o circuito atende as suas necessidades.
Segue pasta zipada com os arquivos desta montagem, compilados com MplabX (XC8 Compiler):
Segue zipada pasta com versão em CCS C Compiler, de 02/04/2017:
Manuais:
Curiosidades:
Sorria: isso faz bem!
Tomate — “hortaliça” muito versátil
Insetos comestíveis — uma refeição inesquecível
Bancos de sementes: uma corrida contra o tempo
O que é cistite intersticial?
Como lidar com problemas da próstata
Recife — cidade que surgiu do açúcar
Será que a lua influencia sua vida?
Outros assuntos:
Existem contradições na Bíblia?
O que é preciso para entender a Bíblia?
Será que a Bíblia está de acordo com a ciência?
O que a Bíblia diz sobre livre-arbítrio? Nossa vida é predestinada por Deus?
O que é o espírito santo?
O nome de Deus é Jesus?
Os desastres naturais são castigo de Deus?
Deus é o culpado pelo nosso sofrimento?
O que é o Reino de Deus?
Por que a paz mundial parece apenas um sonho?
Vídeos Educativos para assistir com seus filhos pequenos
Até o próximo artigo!!!
lario boa noite exelente projeto parabéns,gostaria de saber se este MplabX (XC8 Compiler): é livre? obrigado.
Olá José!
Você poderá baixar o MplabX-IDE e o compilador XC8 na versão gratuita no site da Microchip. Verifique tutoriais na internet de como instalar em seu computador.
Cláudio
Boa tarde Claudio, desculpe importunar você novamente, sei que é ocupado e quando pode responde a todos e ajuda a todos. Lembra de que tinha comentado em uma mensagem anterior sobre um projeto que usa photo-transistor ou photo-diodo para ler níveis de luz? imaginei um led emitindo infra-vermelho e o photo-transistor recendo essa luz e quando colocar um cartão colorido.gravaria esse valor na memória do pic e depois quando o cartão fosse colocado novamente compararia o valor emitido com o valor da memória assim acionando um led! esse é uma questão!rs
A outra a seguinte. Como de microcontroladores só sei piscar led rs,novamente peço sua ajuda para digamos dar um Upgrade em um equipamento que faço já a um bom tempo. ele tem 30 teclas onde comanda 30 portões, quando aperta a tecla correspondente o portão abre e retorna a informação que o portão esta aberto através de um sensor redd e acende um led vermelho na central do operador! essa central de comando fica uns 100mts de distancia do portão mais longe. Pensei em usar mcu usando rs485 daria pra implementar usando pics 12f675 para o receber e enviar os dados nos portões e usar na central um pi 16F877A ?? seria possível?
Aguardo seu contato e obrigado por dividir seu conhecimento com todos!
Ps. não sei muito mas se tiver uma laje pra encher pode contar comigo!! rsrs
Olá Sergio!
Eu lembro do assunto, de usar luz para identificar um cartão qualquer de banco. Só não lembro direito o que você queria fazer com isto.
Quanto a usar microcontroladores no seu equipamento, acredito que seja possível. Mas não saberia ainda como fazer, pois além do rs_485, existe a necessidade de estabelecer um protocolo comum de comunicação entre eles.
Cláudio
Ola Claudio, o que eu queria no primeiro projeto era o seguinte: colocar dentro de um suporte onde se colocaria o cartão colorido, um led emissor e outro receptor de infra vermelho, o mcu ler o recptor armazenar na memória esse valor e depois quando fosse inserido novamente em uso normal fosse comparado o valor da memória do mcu com o valor obtido e se fosse identicos ativasse um relé e ficasse assim até a remoção do mesmo. após o cartão ser removido contaria um tempo de aproximadamente 1 min e desativasse o relé.
o outro é um pouco mais complexo. eu estava lendo o chama atendente que vc fez para escola seria quase aquilo mas teria que ter uma central com 30 ou mais teclas que comandassem os portões e receba informações que o portão ou os portões estão abertos acendendo leds no painel da central de controle, e led que o portão está em manutenção e que desativasse o comando de de abrir ou fechar o portão!
não sei se consegui passar direito.
Obrigado pela atenção!
Olá Sergio!
Com respeito ao intencionado para o cartão, não creio que um simples led emissor e um receptor infravermelho possa dar conta do recado. Vários tipos de cartões seriam confundidos. Creio que teria que partir para algo mais complexo, como uma câmera digital e gravar em uma memória para as comparações posteriores. Você já fez algum teste neste sentido? Teve algum resultado positivo?
Quanto ao assunto do comando dos portões, deu para entender. Isto é usado em portarias de prédio?
Cláudio
Certo vou fazer alguns testes aqui pra ter uma melhor idéia, quanto ao segundo ele é usado em portaria de motel. Eu tenho esse sistema montado a 12 anos, o problema é a quantidade e o preço do cabo sem falar na mão de obra pra instalar! O dono ta construindo um novo e quer o mesmo sistema mas ja to pensando na dor de cabeça que é instalar rsrs
levei mais de 10 dias pra instalar tudo no motel anterior. Queria algo que gastasse menos e desse menos trabalho e fosse inteligente.
Sérgio.
Lários, boa tarde!
Já faz aproximadamente mais de um ano que não mexo com microcontroladores. E tenho uma pergunta a lhe fazer, o PIC12F629 e o PIC12F675 tem o famigerado OSCCAL, que é um valor que se encontra gravado na última posição da memória. Pois bem, na época eu perdi vários desses chips, pois após a primeira gravação o valor do OSCCAL era apagado, no entanto o programa rodava, o problema se manifestava sempre que eu ia gravar pela segunda vez no microcontrolador, pois aparecia um aviso de que não havia valor de OSCCAL. Uso O Gravador / Depurador ACE USB da ACEPIC e o PICKIT2. Depois de perder muitos chips eu descobri que tinha que inserir no meu programa uma linha que gravasse o valor do OSCCAL na última posição da memória (esse valor eu lia previamente antes da gravação), o problema é que de vez em quando, eu esquecia de inserir o valor e o resultado é que era gravado um valor diferente e novamente eu perdia o chip. Pergunto: o meu gravador não deveria identificar os chips que tem OSCCAL e fazer esse procedimento automaticamente?! como posso fazer para recuperar um chip que teve o OSCCAL apagado ou alterado? como fazer uma linha de comando para eu inserir no programa para que o gravador leia o valor do OSCCAL antes de gravar e Gravar esse valor na hora de gravar o programa? Agradeço a atenção e espero que possa me esclarecer esse assunto, de repente isso sirva até de matéria para ser publicada aqui no seu blog.
Olá Pauleiras!
Respondendo as suas perguntas naquilo que aprendi:
“O meu gravador não deveria identificar os chips que tem OSCCAL e fazer esse procedimento automaticamente?”
Resposta: Alguns gravadores tem este recurso e outros não. Consulte o manual do usuário de seu programador quanto a isto.
Como posso fazer para recuperar um chip que teve o OSCCAL apagado ou alterado?
Resposta: A Microchip fornece o método para isto na sua “ Note Application (AN250)“. Poderá ler um artigo deste blog intitulado ‘COMO CALIBRAR A FREQUÊNCIA DO OSCILADOR INTERNO DO PIC 12F675/629 (DIDÁTICO)‘ que dá uma alternativa para recuperar o valor correto de calibração do pic em teste.
Como fazer uma linha de comando para eu inserir no programa para que o gravador leia o valor do OSCCAL antes de gravar e Gravar esse valor na hora de gravar o programa?
Resposta. Você não consegue no firmware (arquivo Hex) avisar programador para salvar antes e depois recuperar. Mas posso estar enganado. Eu sei que você pode colocar linhas de código para pré-gravar posições especificas de flash. Isto depende do compilador que está usando. Por exemplo: No compilador CCS C poderá usar o comando #ROM 0X3FF = {0X34vv} ,onde ‘vv’ é o valor encontrado no teste. Com este comando, você não precisa se preocupar com o apagamento completo da flash, pois na escrita já fornece o valor correto para o ultimo byte da flash.
Outra pergunta que muitos fazem:
Porque alguns programas rodam sem o byte de calibração e outros não?
Geralmente programas gerados a partir do Mplab em ASM rodam, desde que não tenha sido colocado as linhas de recarga do OSCCAL :
CALL OX3FF
MOVWF OSCCAL
Quando ocorre o reset , o registrador OSCCAL assume o valor do padrão de reset e funciona nesta modalidade até haver uma instrução ‘MOVWF OSCCAL’.
Somente que a frequência gerada pelo oscilador interno é desconhecida e pode estar descalibrado em relação ao valor de 4 Mhz.
Já nos programas gerados por compiladores C, TODOS não irão funcionar, porque automaticamente é gerado estas linhas para buscar o valor na posição 0x3ff.
Lembre-se que a busca do valor é feita por uma instrução “CALL” a qual exige uma instrução ‘RETURN’ para voltar nas linhas corretas. Se não encontrar o valor de calibração com a instrução RETURN (0x34vv =’ return’ e ‘vv’ o valor da calibração) o programa se perde, ocorrendo um reset. Então entra em loop eterno neste ponto e nada mais funciona.
Agora, se o seu programa não exige precisão do oscilador, poderá colocar um valor ‘provisório’ como 0xFC com o modo explicado acima, sem necessitar meios de achar o valor correto.
Espero ter explicado corretamente e que possa ter entendido.
Cláudio
Parabéns pelo projeto! Agora entramos numa área interessante unindo dois hobbyes fantásticos Microcontroladores e Aeromodelismo, alguns projetos interessantes são luzes de navegação, alarme de perda de modelo para drones e ou aviões, reversores de servos, enfim! qualquer coisa estamos ai! Desde já agradeço e parabenizo novamente pelo site e iniciativa! Você utiliza o MikroC tbm?
Olá Tossupper!
Agradeço pelo seu comentário e as dicas de montagens. Acredito que você deve conhecer a fundo aeromodelismo, o que não é o meu caso. Pode ser que eu consiga fazer alguns artigos sobre isto desde que eu entenda o que fazem cada um deles e como um microcontrolador poderia facilitar a montagem. Quanto a sua pergunta, tenho usado o Mplabx (Xc8) e o CCS C. Mas creio que não deve ser tão difícil migrar o código para o Mikroc.
Obrigado
Cláudio
Você foi rápido no gatilho Lários! Muito obrigado por atender a meu pedido! assim que eu fizer uma montagem eu darei retorno do funcionamento do mesmo! Novamente obrigado!