LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: takersdown em 12 de Abril de 2013, 00:02
-
Boas,
sabem se é possível utilizar o sensor HC-SR04 com pic 18F4550?
-
o SR04 não tem nenhum protocolo especial, dás um impulso e esperas a resposta.
Em resumo qq microcontrolador que tenha GPIO's pode ser utilizado.
-
Eu sou novato em PIC, estou a começar apreender agora.
Precisava de conseguir fazer isto para um trabalho escolar, tem conhecimento de algum tutorial em que possa aprender como posso fazer esta comunicação com o sensor e PIC18F4550?
Obrigado desde já, por me tentar ajudar e responder, um grande obrigado.
-
apesar de nao ser o pic exacto aqui fica um exemplo com outro pic.
PIC16F84a Ultrasonic Sensor (HC-SR04) with Code (http://www.youtube.com/watch?v=dRq0e9rwqHo#ws)
Na descrição tem tudo o que percisas, codigo e esquema.
Não conheço o pic, mas deve ser +/- a mesma coisa.
-
Boas , eu estou a usar MPLABX, conhece algum tutorial com base neste programa.
Não estou a trabalhar com MikroC que julgo ser pago.
Cumps.
-
Boas , eu estou a usar MPLABX, conhece algum tutorial com base neste programa.
Não estou a trabalhar com MikroC que julgo ser pago.
Cumps.
se tiveres alguma dúvida com o mplab X manda aí. Costumo usar, apesar de estar expert na matéria, posso ajudar!
-
Em MAPLABx, com compilador C18
Estou a tentar aprender a fazer a leitura da distancia com o uso do sensor HC-SR04 e PIC18F4550.
Sei que devo trabalhar com o modulo do AD.
Conhece algum tutorial onde possa apreender ?
-
Antes de mais, vê bem o sensor que estás a usar. Para usares o SR04 necessitas medir tempo, certo? Então para que queres o módulo AD? Basta teres uma interrupção num pin que quando muda de estado (passa de 0 para 1 ou de 1 para 0), medes o tempo, certo?
Este é o primeiro passo. Verifica bem isso.
-
Antes de mais, vê bem o sensor que estás a usar. Para usares o SR04 necessitas medir tempo, certo? Então para que queres o módulo AD? Basta teres uma interrupção num pin que quando muda de estado (passa de 0 para 1 ou de 1 para 0), medes o tempo, certo?
Este é o primeiro passo. Verifica bem isso.
Exatamente eu vou medir o tempo, sendo que pelo que percebi ele mede o tempo de "ida e volta" portanto vou ter de dividir este tempo por 2 e de seguida fazer uma conversão para distância.
-
Já chegámos a uma conclusão: tens de medir tempo.
Agora... porque falaste no módulo AD? Conheces os módulos que um PIC tem? podes sempre consultar o site da microchip e ver as especificações do teu PIC. Podes usar interrupções em entradas digitais, que é o que tens de fazer..
-
Já chegámos a uma conclusão: tens de medir tempo.
Agora... porque falaste no módulo AD? Conheces os módulos que um PIC tem? podes sempre consultar o site da microchip e ver as especificações do teu PIC. Podes usar interrupções em entradas digitais, que é o que tens de fazer..
Julguei que para leitura da distância seria necessário uma entrada analógica, e daí pensar no AD.
Mas posso coloco-las e devo, como digitais.
Portanto, tenho de fazer uma interrupção em que meço o tempo que o echo passa de 0 a 1, e dps passa de 1 a 0.
Dentro disto o que devo fazer?
-configuro o TIMER0
-preciso de saber o tempo que demorou a chegar ao objecto e a voltar ( parte que nao estou a perceber como faço)
-depois fazer a conversão do tempo para distancia
-
Olhando para o datasheet, o funcionamento é simples: envias um trigger de 10us, e depois esperas o eco; o eco é um sinal que tipicamente está a 0 e tens de medir o tempo que está a 1, pois é esse tempo que irá ser proporcional à distância.
Portanto, tens de ter o sinal do eco num pin com interrupção, sendo que inicias um timer quando essa interrupção é ativa, estando configurada para o flanco ascendente. (aqui, tens de configurar a interrupção para o flanco descendente, para teres interrupção quando o sinal voltar a 0). Assim, quando acontecer outra vez a interrupção (no flanco descendente agora) vês o tempo que passou e tens a distância ;)
-
Tenho de verificar quando o echo vai a 1 e quando vai a 0.
Tenho de usar uma interrupção para o flanco ascendente e outra para o descendente?
( portanto duas interrupt ? )
-
Sim, uma interrupção para o contador interno do micro e outro externo para detectar a passagem para 0 do sensor.
O código é simples:
- aplicar 1 ao "trigger" por 10uS
- iniciar o contador interno - Int1 (o sensor envia um sinal a 40KHz)
- esperar pela passagem do "echo" para 0 - Int2
- ler o contador do Int1 e realizar os cálculos para saber a distancia percorrida.
O @beirão explicou bem o processo