From: Lee W. <lee...@go...> - 2008-03-19 17:04:57
|
Hi there, I am currently using a standalone Robostix board with a Senscomp 6500-SMT ultrasonic range module. I'm using Port C to set a pin high, which triggers a pulse from the ultrasonic module, and (at the moment) using the ADC port to receive a return echo signal. My question is, how do I setup a timer such that I can measure the time elapsed between the trigger and the echo? I've tried using the timer TCNT2 without any success and I have very limited experience with this setup so any help or advice would be much appreciated. Thank you kindly, |
From: Black, M. <Michael.Black@EssexCorp.com> - 2008-03-19 17:37:06
|
Assuming you don't mind chewing a bit of CPU time and that you're sampling the ADC.... Just put a loop counter in your code and determine from experimentation the inches/counter. I don't know if gettimeofday return usecs on gumstix or not which would be another way if it has enough resolution. The counter would definitely have enough resolution - just make sure your process has a high priority so it won't get pre-empted by something else too often (in which case you a gettimeofday might be able to tell you that you got pre-empted - i.e. too long a time like 10msec or greater). ___________________ Michael D. Black Essex bl...@es... ________________________________ From: gum...@li... [mailto:gum...@li...] On Behalf Of Lee Whitcher Sent: Wednesday, March 19, 2008 12:05 PM To: gum...@li... Subject: [Gumstix-users] Using Robostix for timing an Ultrasonic echo Hi there, I am currently using a standalone Robostix board with a Senscomp 6500-SMT ultrasonic range module. I'm using Port C to set a pin high, which triggers a pulse from the ultrasonic module, and (at the moment) using the ADC port to receive a return echo signal. My question is, how do I setup a timer such that I can measure the time elapsed between the trigger and the echo? I've tried using the timer TCNT2 without any success and I have very limited experience with this setup so any help or advice would be much appreciated. Thank you kindly, This electronic message and any files transmitted with it contain information which may be privileged and/or proprietary. The information is intended for use solely by the intended recipient(s). If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of this information is prohibited. If you have received this electronic message in error, please advise the sender by reply email or by telephone (301-939-7000) and delete the message. |
From: Dave H. <dhy...@gm...> - 2008-03-19 18:41:05
|
Hi Lee, > I am currently using a standalone Robostix board with a Senscomp 6500-SMT > ultrasonic range module. I'm using Port C to set a pin high, which triggers > a pulse from the ultrasonic module, and (at the moment) using the ADC port > to receive a return echo signal. My question is, how do I setup a timer such > that I can measure the time elapsed between the trigger and the echo? I've > tried using the timer TCNT2 without any success and I have very limited > experience with this setup so any help or advice would be much appreciated. Timer 2 is only an 8-bit timer. But you can extend it to be 16-bit by registering an overflow ISR. I wrote a sample program for measuring the pulse width of RC signals (in the range of 1msec to 2msec wide). You can find it here: <http://docswiki.gumstix.com/Robostix_RC_input> It's a little more general purpose than what you want. It can be configured to use Timer 1, Timer 2, or Timer 3. Note that it relies a bunch of the registers being initialized using values from Hardware.h One of the big steps is picking the right prescalar. You need to look at the longest time you're trying to measure, and figure out what prescalar will divide down the 16 MHz clock to fit in an 8-bit or 16-bit value. For example, If I picked a divide by 8 prescalar, then the timer would increment every 0.5 usec (16 million / 8 = 2 million ticks/sec) In a 16 bit counter that means you could measure time intervals from 0 to 32.7 msec with a 0.5 msec resolution (65536 / 2 = 32768 usec = 32.7 msec). Note that due to 2's complement arithmetic, as long as the timers are running all the way to 65535 and wrapping, you can just grab the timer value at the start and grab the timer value at the end and (end - start) will equal the time interval even if the timer wrapped in the middle (and provided the total pulse width is less than 65536 timer ticks). -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Lee W. <lee...@go...> - 2008-03-20 14:07:44
|
Michael/Dave, Thank you so much for your advice. I'd previously considered counting the ticks but disregarded it as i thought it would be innaccurate. As it happens, I've done it this way now by setting it up in a while loop and waiting for the high echo and have very nice results. This practical method also allows me to calibrate my device easily and doesn't rely on pre-defined values such as the speed of sound. Dave, although I've not used your advice, I thank you for it anyway as I needed a method of reading PWM signals and didn't really understand the timers until you gave me the lowdown! Thank you again, Lee On 19/03/2008, Dave Hylands <dhy...@gm...> wrote: > > Hi Lee, > > > > I am currently using a standalone Robostix board with a Senscomp > 6500-SMT > > ultrasonic range module. I'm using Port C to set a pin high, which > triggers > > a pulse from the ultrasonic module, and (at the moment) using the ADC > port > > to receive a return echo signal. My question is, how do I setup a timer > such > > that I can measure the time elapsed between the trigger and the echo? > I've > > tried using the timer TCNT2 without any success and I have very limited > > experience with this setup so any help or advice would be much > appreciated. > > > Timer 2 is only an 8-bit timer. But you can extend it to be 16-bit by > registering an overflow ISR. > > I wrote a sample program for measuring the pulse width of RC signals > (in the range of 1msec to 2msec wide). You can find it here: > <http://docswiki.gumstix.com/Robostix_RC_input> > > It's a little more general purpose than what you want. It can be > configured to use Timer 1, Timer 2, or Timer 3. > > Note that it relies a bunch of the registers being initialized using > values from Hardware.h > > One of the big steps is picking the right prescalar. You need to look > at the longest time you're trying to measure, and figure out what > prescalar will divide down the 16 MHz clock to fit in an 8-bit or > 16-bit value. > > For example, If I picked a divide by 8 prescalar, then the timer would > increment every 0.5 usec (16 million / 8 = 2 million ticks/sec) > In a 16 bit counter that means you could measure time intervals from 0 > to 32.7 msec with a 0.5 msec resolution (65536 / 2 = 32768 usec = 32.7 > msec). > > Note that due to 2's complement arithmetic, as long as the timers are > running all the way to 65535 and wrapping, you can just grab the timer > value at the start and grab the timer value at the end and (end - > start) will equal the time interval even if the timer wrapped in the > middle (and provided the total pulse width is less than 65536 timer > ticks). > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > > gum...@li... > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: RussellMorin <rm...@wp...> - 2008-11-10 18:51:07
|
Dave, I see that your RC input program is written for the Robostix. I have a couple questions about this: (a) Can I put this program on the Robostix without removing i2c-io and run them both? and (b) If not, is there a way to modify the i2c-io code for the Robostix to include the same functionality? I am still trying to find a way to measure the pulse width of the return signal from my Devantech SRF05 Ranger. I need to keep i2c-io on the Robostix in order to control my other sensors and motor drivers. Any help I could get would be greatly appreciated. Thanks, -Russ Morin Dave Hylands wrote: > > Hi Lee, > >> I am currently using a standalone Robostix board with a Senscomp 6500-SMT >> ultrasonic range module. I'm using Port C to set a pin high, which >> triggers >> a pulse from the ultrasonic module, and (at the moment) using the ADC >> port >> to receive a return echo signal. My question is, how do I setup a timer >> such >> that I can measure the time elapsed between the trigger and the echo? >> I've >> tried using the timer TCNT2 without any success and I have very limited >> experience with this setup so any help or advice would be much >> appreciated. > > Timer 2 is only an 8-bit timer. But you can extend it to be 16-bit by > registering an overflow ISR. > > I wrote a sample program for measuring the pulse width of RC signals > (in the range of 1msec to 2msec wide). You can find it here: > <http://docswiki.gumstix.com/Robostix_RC_input> > > It's a little more general purpose than what you want. It can be > configured to use Timer 1, Timer 2, or Timer 3. > > Note that it relies a bunch of the registers being initialized using > values from Hardware.h > > One of the big steps is picking the right prescalar. You need to look > at the longest time you're trying to measure, and figure out what > prescalar will divide down the 16 MHz clock to fit in an 8-bit or > 16-bit value. > > For example, If I picked a divide by 8 prescalar, then the timer would > increment every 0.5 usec (16 million / 8 = 2 million ticks/sec) > In a 16 bit counter that means you could measure time intervals from 0 > to 32.7 msec with a 0.5 msec resolution (65536 / 2 = 32768 usec = 32.7 > msec). > > Note that due to 2's complement arithmetic, as long as the timers are > running all the way to 65535 and wrapping, you can just grab the timer > value at the start and grab the timer value at the end and (end - > start) will equal the time interval even if the timer wrapped in the > middle (and provided the total pulse width is less than 65536 timer > ticks). > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > -- View this message in context: http://www.nabble.com/Using-Robostix-for-timing-an-Ultrasonic-echo-tp16160252p20425788.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-11-10 20:18:53
|
Hi Russ, > I see that your RC input program is written for the Robostix. I have a > couple questions about this: (a) Can I put this program on the Robostix > without removing i2c-io and run them both? and (b) If not, is there a way to > modify the i2c-io code for the Robostix to include the same functionality? I > am still trying to find a way to measure the pulse width of the return > signal from my Devantech SRF05 Ranger. I need to keep i2c-io on the Robostix > in order to control my other sensors and motor drivers. Any help I could get > would be greatly appreciated. So, i2c-io was only intended as an example, and I was expecting that people would use the functionality and add their own APIs for dealing with their specific application. This page: <http://docswiki.gumstix.com/index.php/Robostix_i2c_slave> describes a bit of what's involved to do your own program. You could also take i2c-io and extend it to do more functions. -- Dave Hylands Shuswap, BC, Canada http://www.DaveHylands.com/ |