Giter VIP home page Giter VIP logo

Comments (9)

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Sorry, should have made it clear that I've already made the amendments and have 
the revised code available.  My question was more how I get the amendments 
incorporated into the official release.

Original comment by [email protected] on 8 Oct 2011 at 11:01

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Heya Andrew,

You can attach a file to your post here and I'd be happy to merge your changes 
into the mainline within the next week or so.  I am trying to move all of the 
libraries I maintain to the new Arduino libraries github organization, so it 
may not go though until after that.

Most of these changes sound pretty good, but the last one will certainly break 
some functionality that I currently use.  start() should continue counting from 
the point where the timer was stop()'ed.  restart() should start counting from 
zero.

-Lex

Original comment by [email protected] on 8 Oct 2011 at 2:54

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Hi Lex

I did wonder about start().  As you say, it currently resumes from wherever the 
count has got to.  However, I thought that might be an oversight, as start() is 
used by both attachInterrupt() and pwm() to commence timing. 

To avoid breaking things, I've created a new function called startBottom(), and 
pointed attachInterrupt(), pwm() and restart() to that.  That means start() is 
functionally unchanged and resumes from the current count.  However (and I'm 
not sure how much this breaks your current code), but the current naming might 
confuse people (as it did me).  The word 'start' and 'restart' both imply a 
start from zero, whereas something like 'resume' might be more appropriate for 
continuing from before.  Just a thought.

My original comment reset the counter to 1 to avoid the phantom interrupt 
problem.  However, whilst this won't cause any problems in vast majority of 
cases, when the timing is very short (and ICR1 set closer to zero) then 
starting at 1 might introduce some minor timing errors.  So I've set TCNT1 to 0 
and added a loop to wait until it moves off zero before enabling interrupts.

.h and .cpp attached.  Hope you are able to incorporate these.  By the way, 
great idea to use mode 8.  I'd started out using mode 2 (CTC), but your 
approach doubles the max time and allows for PWM (although I'm not using that). 

Original comment by [email protected] on 8 Oct 2011 at 6:26

Attachments:

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Hi Lex

Have uploaded the suggested files, and hopefully addressed your concerns
about start().  Hope you are able to use them.

Andrew 

Original comment by [email protected] on 8 Oct 2011 at 6:31

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Heya Andrew,

The patch looks good! Especially the atomic read and write stuff, I'd never 
even thought it could be a problem, but reading over the relevant parts of the 
datasheet and your code makes it pretty clear why it's needed.

I've made a couple of changes to your changes (heh), I hope for the better:

char oldSREG is defined in the header as a public variable for the whole class. 
 I'd rather inflate the lib's compiled size by 1 byte than waste cycles 
creating and destroying a variable used in half the functions.

start() has been renamed resume() & startBottom() has been renamed start().  
I'm not so worried about breaking functionality with old code.  This library is 
still beta, and not certified for arduino v1.0 yet, so I'd rather change it now 
than have to deal with cruft later.  And as you suggested it is a lot clearer.

Also, inside of startBottom() - now start() - I've removed the section that 
enables the interrupts, as this breaks the ability to use start and stop with 
PWM generation.  Setting and clearing TOIE1 is strictly the domain of 
attachInterrupt() & detachInterrupt().

Oh, and I don't have a bench setup right now, so I've only done the most basic 
testing on this edit.  I won't be merging it into the mainline until I have 
tested it further.

-Lex

Original comment by [email protected] on 10 Oct 2011 at 1:32

Attachments:

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
[deleted comment]

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024

Original comment by [email protected] on 10 Oct 2011 at 1:35

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Hi Lex

You're quite right, I can see that interrupts should only be enabled/disabled 
by attach and detach.  However, this does give an interesting issue with very 
short one-shot timings.  Because start() needs to disable interrupts to set 
TCNT1 == 0, it means the interrupts have to be enabled again using 
attachInterrupt().  However, if the desired delay is very short (eg 1uS, ICR1 
== 8) I suspect the time taken between setting TCNT1 == 0 in start() and the 
interrupts being enabled by attachInterrupt() might exceed the 16 clock ticks 
available. 

The only way round this that I can see would be to set TCNT1 = 1 in start(), 
rather than 0.  This would remove the need to disable interrupts, but sacrifice 
some accuracy at short intervals (1/16th in the worst case).  

Perhaps too theoretical a possibility?

Just noticed, by the way, that the registers (and pins) for the Mega 2560 are 
different to the Uno pins assumed in the code.  OC1A is PB5 and OC1B is PB6, 
corresponding to pins 11 and 12 respectively.  Conditional compile statements?

By the way, happy for you to remove my sprinkling of "AR modified" from the 
comments if it will improve readability.  The header comments are quite 
sufficient :-)

All the best, Andrew

Original comment by [email protected] on 10 Oct 2011 at 11:03

from arduino-timerone.

GoogleCodeExporter avatar GoogleCodeExporter commented on June 29, 2024
Hey again pittsfolly.  These changes were first incorperated into v7, so I'm 
closing this particular issue.  If you want to open one about Mega support go 
for it, but officially, Timer1 does not support the Mega.  Some of the code 
references the Mega, but that's mostly just little odds and ends that are 
totally untested.  There is a lib out there that is meant for the Mega, called 
Timer3. It's available at the Arduino playground Timer1 site.  It is pretty out 
of date though, but it's a place to start.

http://arduino.cc/playground/Code/Timer1

Original comment by [email protected] on 1 Feb 2012 at 5:59

  • Changed state: Fixed

from arduino-timerone.

Related Issues (17)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.