Comments (9)
Hi @wcwuttke
Thanks for your interests in the library.
- I think you have to use 16MHz clock to Timers for better accuracy
// Select USING_16MHZ == true for 16MHz to Timer TCBx => shorter timer, but better accuracy
// Select USING_8MHZ == true for 8MHz to Timer TCBx => shorter timer, but better accuracy
// Select USING_250KHZ == true for 250KHz to Timer TCBx => shorter timer, but better accuracy
// Not select for default 250KHz to Timer TCBx => longer timer, but worse accuracy
#define USING_16MHZ true
#define USING_8MHZ false
#define USING_250KHZ false
also megaAVR is a very slow MCU, doing to many things within 10ms
, such as
//timer interrupt toggles pin LED_BUILTIN
digitalWrite(LED_BUILTIN, toggle1);
digitalWrite(A0, toggle1);
possibly distorts its timings.
- Try this example ISR_16_Timers_Array_Complex.
The best way to know the timings is correct is to use a counter inside the ISR, then print it out using a timing loop outside ISR, using millis().
For example, you can see the timing is very accurate here
Starting ISR_16_Timers_Array_Complex on megaAVR Nano Every
megaAVR_TimerInterrupt v1.3.0
CPU Frequency = 16 MHz
TCB Clock Frequency = 16MHz for highest accuracy
[TISR] TCB 1
[TISR] ==================
[TISR] Init, Timer = 1
[TISR] CTRLB = 0
[TISR] CCMP = 65535
[TISR] INTCTRL = 0
[TISR] CTRLA = 1
[TISR] ==================
[TISR] Frequency = 200.00 , CLK_TCB_FREQ = 16000000
[TISR] setFrequency: _CCMPValueRemaining = 80000
[TISR] ==================
[TISR] set_CCMP, Timer = 1
[TISR] CTRLB = 0
[TISR] CCMP = 65535
[TISR] INTCTRL = 1
[TISR] CTRLA = 1
Starting ITimer1 OK, millis() = 13
SimpleTimer : 2, ms : 10013, Dms : 10013
Timer : 0, programmed : 5000, actual : 5015
Timer : 1, programmed : 10000, actual : 0
Timer : 2, programmed : 15000, actual : 0
Timer : 3, programmed : 20000, actual : 0
Timer : 4, programmed : 25000, actual : 0
Timer : 5, programmed : 30000, actual : 0
Timer : 6, programmed : 35000, actual : 0
Timer : 7, programmed : 40000, actual : 0
Timer : 8, programmed : 45000, actual : 0
Timer : 9, programmed : 50000, actual : 0
Timer : 10, programmed : 55000, actual : 0
Timer : 11, programmed : 60000, actual : 0
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 20072, Dms : 10059
Timer : 0, programmed : 5000, actual : 4998
Timer : 1, programmed : 10000, actual : 9995
Timer : 2, programmed : 15000, actual : 15017
Timer : 3, programmed : 20000, actual : 20015
Timer : 4, programmed : 25000, actual : 0
Timer : 5, programmed : 30000, actual : 0
Timer : 6, programmed : 35000, actual : 0
Timer : 7, programmed : 40000, actual : 0
Timer : 8, programmed : 45000, actual : 0
Timer : 9, programmed : 50000, actual : 0
Timer : 10, programmed : 55000, actual : 0
Timer : 11, programmed : 60000, actual : 0
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 30131, Dms : 10059
Timer : 0, programmed : 5000, actual : 4997
Timer : 1, programmed : 10000, actual : 10002
Timer : 2, programmed : 15000, actual : 15000
Timer : 3, programmed : 20000, actual : 20015
Timer : 4, programmed : 25000, actual : 25020
Timer : 5, programmed : 30000, actual : 30017
Timer : 6, programmed : 35000, actual : 0
Timer : 7, programmed : 40000, actual : 0
Timer : 8, programmed : 45000, actual : 0
Timer : 9, programmed : 50000, actual : 0
Timer : 10, programmed : 55000, actual : 0
Timer : 11, programmed : 60000, actual : 0
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 40192, Dms : 10061
Timer : 0, programmed : 5000, actual : 5005
Timer : 1, programmed : 10000, actual : 10002
Timer : 2, programmed : 15000, actual : 15000
Timer : 3, programmed : 20000, actual : 20004
Timer : 4, programmed : 25000, actual : 25020
Timer : 5, programmed : 30000, actual : 30017
Timer : 6, programmed : 35000, actual : 35014
Timer : 7, programmed : 40000, actual : 40019
Timer : 8, programmed : 45000, actual : 0
Timer : 9, programmed : 50000, actual : 0
Timer : 10, programmed : 55000, actual : 0
Timer : 11, programmed : 60000, actual : 0
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 50252, Dms : 10060
Timer : 0, programmed : 5000, actual : 4997
Timer : 1, programmed : 10000, actual : 9995
Timer : 2, programmed : 15000, actual : 15000
Timer : 3, programmed : 20000, actual : 20004
Timer : 4, programmed : 25000, actual : 24994
Timer : 5, programmed : 30000, actual : 30017
Timer : 6, programmed : 35000, actual : 35014
Timer : 7, programmed : 40000, actual : 40019
Timer : 8, programmed : 45000, actual : 45017
Timer : 9, programmed : 50000, actual : 50014
Timer : 10, programmed : 55000, actual : 0
Timer : 11, programmed : 60000, actual : 0
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 60314, Dms : 10062
Timer : 0, programmed : 5000, actual : 4997
Timer : 1, programmed : 10000, actual : 10002
Timer : 2, programmed : 15000, actual : 14999
Timer : 3, programmed : 20000, actual : 19997
Timer : 4, programmed : 25000, actual : 24994
Timer : 5, programmed : 30000, actual : 29999
Timer : 6, programmed : 35000, actual : 35014
Timer : 7, programmed : 40000, actual : 40019
Timer : 8, programmed : 45000, actual : 45017
Timer : 9, programmed : 50000, actual : 50014
Timer : 10, programmed : 55000, actual : 55019
Timer : 11, programmed : 60000, actual : 60016
Timer : 12, programmed : 65000, actual : 0
Timer : 13, programmed : 70000, actual : 0
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 70376, Dms : 10062
Timer : 0, programmed : 5000, actual : 5006
Timer : 1, programmed : 10000, actual : 10003
Timer : 2, programmed : 15000, actual : 14999
Timer : 3, programmed : 20000, actual : 19997
Timer : 4, programmed : 25000, actual : 24994
Timer : 5, programmed : 30000, actual : 29999
Timer : 6, programmed : 35000, actual : 35005
Timer : 7, programmed : 40000, actual : 40019
Timer : 8, programmed : 45000, actual : 45017
Timer : 9, programmed : 50000, actual : 50014
Timer : 10, programmed : 55000, actual : 55019
Timer : 11, programmed : 60000, actual : 60016
Timer : 12, programmed : 65000, actual : 65013
Timer : 13, programmed : 70000, actual : 70019
Timer : 14, programmed : 75000, actual : 0
Timer : 15, programmed : 80000, actual : 0
SimpleTimer : 2, ms : 80439, Dms : 10063
Timer : 0, programmed : 5000, actual : 4997
Timer : 1, programmed : 10000, actual : 9994
Timer : 2, programmed : 15000, actual : 15000
Timer : 3, programmed : 20000, actual : 19997
Timer : 4, programmed : 25000, actual : 25002
Timer : 5, programmed : 30000, actual : 29999
Timer : 6, programmed : 35000, actual : 35005
Timer : 7, programmed : 40000, actual : 39994
Timer : 8, programmed : 45000, actual : 45017
Timer : 9, programmed : 50000, actual : 50014
Timer : 10, programmed : 55000, actual : 55019
Timer : 11, programmed : 60000, actual : 60016
Timer : 12, programmed : 65000, actual : 65013
Timer : 13, programmed : 70000, actual : 70019
Timer : 14, programmed : 75000, actual : 75016
Timer : 15, programmed : 80000, actual : 80013
Good Luck,
from megaavr_timerinterrupt.
from megaavr_timerinterrupt.
Good to know it's OK for you.
It behaves as if the 250 KHz clock has been divided by two somewhere.
I actually haven't tested with 250KHz. Possibly a bug somewhere in this library, or the core???
I'll spend some time to investigate later whenever I have time. I'd appreciate it you could help here to locate the issue.
Regards,
from megaavr_timerinterrupt.
from megaavr_timerinterrupt.
from megaavr_timerinterrupt.
Thanks Bill,
The TCB code probably has an error or two.
Do you mean error in the library? I believe so.. Could you please help locate and make a PR ?
If not possible due to time constraint, it's OK and I understand and will fix it later.
I'm reopening the issue now
Best Regards,
Khoi
from megaavr_timerinterrupt.
from megaavr_timerinterrupt.
Hi Bill,
Thanks. I'll spend some time later to investigate, locate and solve this issue.
Regards,
from megaavr_timerinterrupt.
Hi @wcwuttke
I'm sorry to wait too long to fix the bug, which is delicate and hard-to-find
and happened only to high frequencies (around >245Hz). The bug has just been fixed by the new megaAVR_TimerInterrupt releases v1.4.0
Your contribution is noted in Contributions and Thanks
Regards,
Release v1.4.0
- Fix TCB Clock bug in high frequencies. Check Interrupt interval 2X requested interval #1
- Add example to demo High Frequency
- Delete Blynk-related examples
- Add changelog.md
from megaavr_timerinterrupt.
Related Issues (4)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from megaavr_timerinterrupt.