• Welcome to LusoRobótica - Robótica em Português.
 

pic18f4550 hc-sr04

Started by takersdown, 12 de April de 2013, 00:02

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

takersdown

Boas,

sabem se é possível utilizar o sensor HC-SR04  com pic 18F4550?

Marvin

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.
Dronetech BlogThe Scientist and the Geek

takersdown

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.

dio123

apesar de nao ser o pic exacto aqui fica um exemplo com outro pic.
PIC16F84a Ultrasonic Sensor (HC-SR04) with Code

Na descrição tem tudo o que percisas, codigo e esquema.

Não conheço o pic, mas deve ser +/- a mesma coisa.

takersdown

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.

beirao

Quote from: takersdown on 18 de April de 2013, 09:45
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!
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

takersdown

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 ?

beirao

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.
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

takersdown

Quote from: beirao on 02 de May de 2013, 14:21
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.

beirao

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..
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

takersdown

Quote from: beirao on 02 de May de 2013, 15:26
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

beirao

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 ;)
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

takersdown

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 ? )


dropes

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