Pages: [1]   Go Down
Author Topic: High precision timer problem  (Read 558 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ive been writing a library to send data between 2 arduino boards using manchester 2 encoding.

The boards are currently back to back but will have other equipment between them at some point (optical stuff / radio).

As I want to do something other than wait for data I'm useing an external interrupt to detect when the signal changes and measuring the time between changes using code from http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1193623343.

This currently works some of the time but has occasional issues which corrupts the data.

After a  couple of days I finally decided to write some code to check how much time was going by between the changes without all of my other code to decode it. basically just use the interrupt to measure the time difference, log it for a while then dump it out of the serial port (after disableing the interrupt);

My routine for calculating the differences will handle the usual overflow condition by assuming that if a time is earlier its actually a lot later but I'm getting strange things happening with the microsecond resolution timer.

left hand side is the raw microsecond time
right hand side is calculated time difference

1307664 - 1004
1307648 - 4294967279
1309680 - 2032

1654804 - 1008
1654784 - 4294967275
1656816 - 2032

Reporting time going backwards is what I would class as Not A Good Thing(tm) the timer to be doing . . . any ideas on what I can do to fix this?
« Last Edit: May 31, 2008, 06:33:17 am by Eaterofpies » Logged

London
Offline Offline
Faraday Member
**
Karma: 8
Posts: 6240
Have fun!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

This thread discusses a somewhat similar requirement and has some code that may help you do what you want: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1201890734/12
« Last Edit: May 31, 2008, 09:35:40 am by mem » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I tried it with a second timer and thats a much cleaner way of doing it than my old code.

Thanks for the suggestion.

Now I just need to try and work out why the reciever just stops running code after a while :-/
Logged

Pages: [1]   Go Up
Jump to: