Help measuring distance....


Closed Thread
Results 1 to 6 of 6
  1. #1
    Join Date
    Jan 2007
    Location
    Brazil
    Posts
    108

    Default Help measuring distance....

    Hi Again..

    Need a little help in here... maybe it's a picbasic math question.. it goes: My car has a speed sensor and as I had measured, it pulses 9 times per meter (yes, I pushed the car 2 meters by hands and it counted 18). I would like to calc the distance run, like an odometer. The speed sensor is connected to T0CKI.
    -> TMR1 is interrupting every 500ms and the interruption causes TMR0=0. -> This is necessary due to other processes. I would not like to change it. How could I measured the distance in this situation?

    Hope you understand my english...

    Thanks a Lot!

    Sylvio
    Last edited by sirvo; - 30th July 2007 at 03:06.

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,521


    Did you find this post helpful? Yes | No

    Default

    Hi,
    Every 500mS interrupt you read the count from TMR0 and add it to an accumulator. You also keep track of how many interrupt have passed and when 10 interrupts have gone by you divide the accumulator count by 9. You now have the number of metres traveled in the last 5 seconds.

    (Untested)

    Code:
    Acc var WORD		'Accumulator
    ISRCount var BYTE	'Keeps track number of interrupts
    Km var WORD		'Kilometres
    m var WORD		'Metres
    
    '//Place this in your ISR to be executed every 500mS
    ISRCount = ISRCount + 1	'Increment ISRCount
    Acc=Acc + TMR0		'Add TMR0 value to accumulator, TMR0 gets reset elsewhere.
    
    If ISRCount = 10 then	'If 10 interrupts have passed....
     m = m + (Acc / 9)	'...calculate how many metres...
    
     If m > 1000 then       'If more than 1km have passed..
      Km = Km + (m / 1000)  '...add to the Km count...
      m = m // 1000		'...and keep reminder.
     EndIf 
    
     ISRCount = 0		'reset ISR counter
    EndIf
    You can now use...
    Code:
    LCDOut $FE, 1, #Km, ".", #m
    or whatever in your main routine to display the distance traveled.

    /Henrik Olsson.

  3. #3
    Join Date
    Jul 2007
    Posts
    53


    Did you find this post helpful? Yes | No

    Default May I suggest using PICXX31

    Hi,


    I think you should consider using PIC2331/2431/4331 or 4431.
    Those PICS have a built-in motion feedback module. I think the "velocity feedback module" will do exactly what you want. Look at the datasheet for more details.

    BTW: Downside is that the ADC module is a bit of pain in the ... to use. Since it's not completely integrated with PBP.

    J-P

  4. #4
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default What happened to old days?

    WhyNot use a traditional way;


    Code:
    ' 9 Pulses come in in 0ne meter.
    ' Measure the time it takes for 9 pulses to come in.
    ' Timer0 is in Counter Mode.
    ' Timer1 is in Timer Mode.
    
    ' Set your prescaler and other TMR settings etc... here.
    
    Start:
    
        TMR1ON = 0      ' Stop TMR1.
        TMR1H = 0       ' Clear TMR1.
        TMR1L = 0              '....
        Speed = 0       ' Speed is a Word variable.
        TMR0 = 0        ' Clear TRM0.    
    
        WHILE TMR0 = 0 : WEND       ' Wait for an incoming Pulse (First pulse does not count).
        TMR1ON = 1                  ' Start Timer1 Module.
        WHILE TMR0 < 9 : WEND       ' Count 9 pulses.
        TMR1ON = 0                  ' Stop Timer1 at 9th Pulse.
    
        Speed.LowByte = TMR1L
        Speed.HighByte = TMR1H
        
        ' The car took 1Meter in "Speed" mS.    Example: 1 Meter in 100mS.
        Speed = 60000 / Speed                   ' Speed = 60,000mS / 100Ms => 600 Meter in One Minute.
        Speed = Speed * 60                      ' Speed = Speed * 60Mins   => 600Meter * 60Mins = 36,000Meter. => 36Km/Hr
         
        LCDOUT $FE,1,"Speed:", dec5 Speed,"Km/Hr"
        
        
    Goto Start
    "If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte

  5. #5
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,521


    Did you find this post helpful? Yes | No

    Default What happend to the orignal question?

    Is it just me or didn't he say he want to measure distance? IE distance, not speed. Yep, I'm sure, he said distance...

    I may have misunderstood though....

    ;-)

    /Henrik Olsson.
    Last edited by HenrikOlsson; - 30th July 2007 at 12:55.

  6. #6
    Join Date
    Jan 2007
    Location
    Brazil
    Posts
    108


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by HenrikOlsson View Post
    Hi,
    Every 500mS interrupt you read the count from TMR0 and add it to an accumulator. You also keep track of how many interrupt have passed and when 10 interrupts have gone by you divide the accumulator count by 9. You now have the number of metres traveled in the last 5 seconds.

    (Untested)

    Code:
    Acc var WORD		'Accumulator
    ISRCount var BYTE	'Keeps track number of interrupts
    Km var WORD		'Kilometres
    m var WORD		'Metres
    
    '//Place this in your ISR to be executed every 500mS
    ISRCount = ISRCount + 1	'Increment ISRCount
    Acc=Acc + TMR0		'Add TMR0 value to accumulator, TMR0 gets reset elsewhere.
    
    If ISRCount = 10 then	'If 10 interrupts have passed....
     m = m + (Acc / 9)	'...calculate how many metres...
    
     If m > 1000 then       'If more than 1km have passed..
      Km = Km + (m / 1000)  '...add to the Km count...
      m = m // 1000		'...and keep reminder.
     EndIf 
    
     ISRCount = 0		'reset ISR counter
    EndIf
    You can now use...
    Code:
    LCDOut $FE, 1, #Km, ".", #m
    or whatever in your main routine to display the distance traveled.

    /Henrik Olsson.
    Hello.
    Thanks Henrik Olsson. I made a few changes and it has been working very well.
    Thanks All..

    Sylvio

Similar Threads

  1. Questions on ultrasonic distance finder
    By lilimike in forum mel PIC BASIC Pro
    Replies: 19
    Last Post: - 20th April 2010, 21:19
  2. Ultrasonic distance sensor with PIC16F84A
    By MrRoboto in forum mel PIC BASIC
    Replies: 3
    Last Post: - 29th June 2009, 09:01
  3. Long distance Communicating between PICs
    By koossa in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 4th January 2008, 06:47
  4. Distance Measurement Chips
    By sayzer in forum Off Topic
    Replies: 6
    Last Post: - 2nd February 2007, 20:57
  5. GPS waypoint distance in Km
    By Art in forum Code Examples
    Replies: 1
    Last Post: - 28th August 2005, 01:59

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts