Giter Club home page Giter Club logo

Comments (9)

khoih-prog avatar khoih-prog commented on June 12, 2024

Hi @wcwuttke

Thanks for your interests in the library.

  1. 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.

  1. 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.

wcwuttke avatar wcwuttke commented on June 12, 2024

from megaavr_timerinterrupt.

khoih-prog avatar khoih-prog commented on June 12, 2024

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.

wcwuttke avatar wcwuttke commented on June 12, 2024

from megaavr_timerinterrupt.

wcwuttke avatar wcwuttke commented on June 12, 2024

from megaavr_timerinterrupt.

khoih-prog avatar khoih-prog commented on June 12, 2024

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.

wcwuttke avatar wcwuttke commented on June 12, 2024

from megaavr_timerinterrupt.

khoih-prog avatar khoih-prog commented on June 12, 2024

Hi Bill,

Thanks. I'll spend some time later to investigate, locate and solve this issue.

Regards,

from megaavr_timerinterrupt.

khoih-prog avatar khoih-prog commented on June 12, 2024

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

  1. Fix TCB Clock bug in high frequencies. Check Interrupt interval 2X requested interval #1
  2. Add example to demo High Frequency
  3. Delete Blynk-related examples
  4. Add changelog.md

from megaavr_timerinterrupt.

Related Issues (4)

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.