Read: 309 times
|#183858 - Still not understanding isr with tick|
Responding to: Per Westermark's previous message
Per Westermark said:
You have already been given a good answer.
With the current crystal, your timer can't be slowed down enough for 2Hz (i.e. 4 interrupts/second).
But you can configure the timer to produce interrupts at a higher frequency, and in the ISR use a software counter to decide that you toggle the pin every n interrupts.
So if you configure the timer for 10ms (which I think was the suggested frequency - complete with timer parameters - in a previous post), then you should toggle the pin every 25 interrupts. 25 * 10ms = 250ms. And 250 ms * 2 = 500 ms period time = 2 Hz frequency.
It is standard that software programs needs to use software counters internally, for the delays.
A 32-bit processor might be lucky enough to have 32-bit timers. But if ticking at 48MHz, such a timer would still be limited to 83 seconds, unless there is a prescaler.
Next thing - few processors have more than 4-8 timers. Many have 1 or 2. But a program may need to handle hundreds of time-controlled tasks internally. So every task can't have a dedicated hardware timer.
The solution? The one suggested above. Set up a timer ticking at 10ms. Every 100 tick (as counted with a variable in the ISR), one second will have passed. Every 60 seconds, a minute will have passed.
Suddenly, it becomes trivial to handle times way longer than a timer can span. Or to handle many more events than there are hardware timers.
With timers that can toggle output pins, it is often possible to make use of this hardware functionality even if the toggle frequency is slower than the timer period. This may be done by activating the pin-toggle function at the interrupt tick before the one where the pin should toggle. On next interrupt deactivate this feature again while waiting for time to prepare next toggle. Why do that, instead of manually toggling the pin in the ISR? Because the ISR has a little bit of jitter because of the interrupt response time in relation to other operations and currently processed instruction. Manually turning pin-toggle on/off can allow the pin to be toggled with zero jitter by the hardware. It's too long since I used the timer function of 8052 chips so it may not be applicable to them. But it is a good trick to remember if it is important to have very low jitter on the generated signal while still have longer periods than the timer can handle in a single delay.
Hi Per Westermark:
I spend about 7 days trying write isr with tick routine. And I still do not know how to do it. Is possible you can give a source code example even if its not used for my 2 Hz source code? I wrote page of what I was doing but when I pressed Preview Before posting it must timed out. So now I giving the short version of my problem.
|Need a little help with frequency||Ralph Sac||09/16/11 21:32|
|use 89c52||Maunik Choksi||09/16/11 23:00|
|"formulae"||Stefan KAnev||09/16/11 23:34|
|How to post legible source code - and text||Andy Neil||09/17/11 10:43|
|Legible source code||Ralph Sac||09/17/11 16:09|
|Not the whole message!||Andy Neil||09/17/11 16:16|
|Thanks Andy got little messed up||Ralph Sac||09/17/11 17:00|
|Already answered||Per Westermark||09/17/11 18:43|
|Still not understanding isr with tick||Ralph Sac||09/23/11 21:33|
|use may use this code||Maunik Choksi||09/23/11 23:19|
|Thanks for time||Ralph Sac||09/24/11 18:43|
|Rewrote Source Code for Metalink Assembler||Ralph Sac||10/20/11 18:36|
|keil assembler||Maunik Choksi||10/20/11 23:25|
|No need for picture||Maunik Choksi||10/21/11 07:36|
|try||Stefan KAnev||09/23/11 23:34|
|the code above is a typical illustration of ...||Erik Malund||09/24/11 07:35|
|You are right||Ralph Sac||09/24/11 18:39|
|never too old||Erik Malund||09/25/11 06:46|
|Never too late to pick up a new trick||Per Westermark||09/25/11 09:10|
|One good trick ...||Richard Erlacher||09/25/11 13:49|
|Score -1||Michael Karas||09/25/11 19:59|
|Learn one before Jumping head||Ralph Sac||09/26/11 21:11|
|Learning Assembler First||Michael Karas||09/27/11 00:41|
|I wholehardely concur.||Erik Malund||09/27/11 08:03|
|Thanks also you for your time||Ralph Sac||09/24/11 18:46|
|Here's something to try ...||Richard Erlacher||09/24/11 14:57|
|One suggession for higher frequency||Maunik Choksi||09/26/11 02:00|
|Remember no fractional part for||Per Westermark||09/26/11 06:02|
|Precise frequency||Mahmood Elnasser||09/26/11 09:00|
|I did not know that||Ralph Sac||09/26/11 21:15|
|89c2051||Stefan KAnev||09/26/11 22:10|
|When you wrote code||Ralph Sac||09/27/11 12:10|
|You normally always need to test - but may not need to debug||Per Westermark||09/27/11 15:20|
|it was example||Stefan KAnev||09/27/11 15:20|
|Ok then if I||Ralph Sac||09/27/11 15:40|
|try||Stefan KAnev||09/27/11 21:54|
|depends||Erik Malund||09/28/11 06:54|
|Testing Code||Michael Karas||09/28/11 07:25|
|In short||Per Westermark||09/28/11 08:41|
|someone said it better||Erik Malund||09/28/11 09:03|
|"Proven Product" Syndrome||Andy Neil||09/29/11 01:24|
|Did you ever look at that MIDE51 I previously mentioned?||Richard Erlacher||10/21/11 01:39|