View previous topic :: View next topic |
Author |
Message |
sysysy
Joined: 17 Nov 2010 Posts: 38 Location: 121
|
Ultrasonic timer or counter (CCP capturing time?) |
Posted: Thu Mar 17, 2011 6:22 am |
|
|
Hi,
Knowing that speed of sound is around 340m/s or (34000cm/s)
that mean sound take around 1/34000= 29.4us to travel 1 cm.
Now, the ultrasonic range finder use for finding the short range distance.
In my program, timer will start count when the moment i transmit the 40khz wave go out.
As usual, i using timer0 to starting the count. my interrupt is set to 1 micro second. (i use 20Mhz crystal). So i set as below
Code: | setup_counters(RTCC_INTERNAL,RTCC_DIV_1); |
Code: | #INT_RTCC
void counter_ISR()
{
set_rtcc(250);
xmit_lsb++;
if (xmit_lsb==65535)
{
xmit_msb++;
xmit_lsb=0;
}
} |
*Notes xmit_lsb 7 xmit_msb is a variable help me store the value time that consume from PIC transmit back to PIC 40khz signal from the ultrasonic receiver circuit.
In later, i use the formula to calculate distance:
time = (xmit_lsb*0.000001) + (xmit_msb*0.065536)
distance = time * 34000/2
and the output will display in my lcd. But before proceed to ultrasonic circuit, i trying to verify the timer to mathematic conversion. But seel like the timer is not really run in the expected that i want.
It is more more slower. i wonder why?
is it i can not just set for a very short interrupt since 1microsecond just 5 times of the PIC oscillate speed which is 0.2 microsecond (20Mhz)
Anyone can give me advice?
Last edited by sysysy on Thu Mar 17, 2011 11:30 pm; edited 1 time in total |
|
|
ALPL
Joined: 29 Mar 2009 Posts: 30
|
|
Posted: Thu Mar 17, 2011 7:24 am |
|
|
Hi, I would rather suggest to use the capture-module to accurately measure the time the ultrasonic wave needs to hit a target and to return to the PIC. |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Thu Mar 17, 2011 9:22 am |
|
|
Interrupts are slower than people think. A PIC takes dozens to hundreds of instruction times to enter and exit an interrupt. As ALPL says, the Capture module is the way to do this. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Mar 17, 2011 12:04 pm |
|
|
You didn't say where you got your range finder module, but it probably
has drivers for PicBasic Pro, or Basic Stamp, and they use the Pulsin
command. Well, try using the Pulsin command for CCS, as given in
this thread:
http://www.ccsinfo.com/forum/viewtopic.php?t=42353 |
|
|
sysysy
Joined: 17 Nov 2010 Posts: 38 Location: 121
|
|
Posted: Thu Mar 17, 2011 12:52 pm |
|
|
Thanks for the suggestion. i will read through the details and try it.
Hi PCM Programmer,
Quote: | You didn't say where you got your range finder module |
Actually i build the circuit by my own. i didn't buy the module.
the signal that received by the ultrasonic will be amplified 1000 times by the op-amplifier and the pass through the peak detector. Finally, it will give an comparator output when there is a signal receive. and this output will direct connect to my PIC. so now the crucial part is programming inside the PIC.
i will go read about the suggestion that u provide me. If got any problem will ask u again.o
Between, is it my PIC(16f877a) has a CCP feature, then i am recommended to use the CCP method is better?
Thanks alot. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
sysysy
Joined: 17 Nov 2010 Posts: 38 Location: 121
|
|
Posted: Thu Mar 17, 2011 11:29 pm |
|
|
Hi,
From the Pulse width post, it shows how to capture the pulse width within 500ms from the CCP pin. hmm..i think i did digest the code.
But may i know how about to use it in capture the time such as ( it take 30ms time from transmit out to return back the 40khz signal into PIC) how actually to capture this exact time?
From what i think is, the timer must start to count once we transmit the 40khz signal out and stop once the 40khz reflected back signal detected by the pin. so, let say we use 20Mhz (0.2microseconds every oscillation) ...is it 16bit timer1 only can count from ( 65536 x 0.2us) = 0.0131072 seconds only?
but how to capture this with ccp mode? |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Fri Mar 18, 2011 5:45 pm |
|
|
I don't know your PIC, but most have a prescaler, a divider before the timer used to slow it down. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
|