@@ -123,6 +123,7 @@ The catch is **your function is now part of an ISR (Interrupt Service Routine),
123123
1241241 . [ ` Arduino IDE 1.8.19+ ` for Arduino] ( https://github.com/arduino/Arduino ) . [ ![ GitHub release] ( https://img.shields.io/github/release/arduino/Arduino.svg )] ( https://github.com/arduino/Arduino/releases/latest )
1251252 . [ ` ESP8266 Core 3.0.2+ ` ] ( https://github.com/esp8266/Arduino ) for ESP8266-based boards. [ ![ Latest release] ( https://img.shields.io/github/release/esp8266/Arduino.svg )] ( https://github.com/esp8266/Arduino/releases/latest/ )
126+
1261273 . [ ` SimpleTimer library ` ] ( https://github.com/jfturcot/SimpleTimer ) to use with some examples.
127128
128129
@@ -237,6 +238,9 @@ You'll see blynkTimer Software is blocked while system is connecting to WiFi / I
237238
238239#define USING_MICROS_RESOLUTION true //false
239240
241+ // Default is true, uncomment to false
242+ //#define CHANGING_PWM_END_OF_CYCLE false
243+
240244// Select a Timer Clock
241245#define USING_TIM_DIV1 true // for shortest and most accurate timer
242246#define USING_TIM_DIV16 false // for medium time and medium accurate timer
@@ -695,37 +699,46 @@ The following is the sample terminal output when running example [ISR_16_PWMs_Ar
695699
696700```
697701Starting ISR_16_PWMs_Array_Complex on ESP8266_NODEMCU_ESP12E
698- ESP8266_PWM v1.2.1
702+ ESP8266_PWM v1.2.2
699703CPU Frequency = 160 MHz
700704[PWM] ESP8266TimerInterrupt: Timer Clock fre = 80000000
701705[PWM] Timer fre = 50000.00 , _count = 1600
702- Starting ITimer OK, micros() = 2069892
703- Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2073467
704- Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2079470
705- Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2085429
706- Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2091414
707- Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2097400
708- Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2103391
709- Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2109374
710- Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2115359
711- SimpleTimer (ms): 2000, ms : 12121418 , Dms : 10048065
706+ Starting ITimer OK, micros() = 2073701
707+ Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2077293
708+ Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2083632
709+ Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2089938
710+ Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2096269
711+ Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2102599
712+ Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2108940
713+ Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2115272
714+ Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2121602
715+ SimpleTimer (ms): 2000, ms : 12128012 , Dms : 10050844
712716PWM Channel : 0, programmed Period (us): 1000000.00, actual : 1000005, programmed DutyCycle : 5.00, actual : 5.00
713- PWM Channel : 1, programmed Period (us): 500000.00, actual : 500012 , programmed DutyCycle : 10.00, actual : 10.00
717+ PWM Channel : 1, programmed Period (us): 500000.00, actual : 500011 , programmed DutyCycle : 10.00, actual : 10.00
714718PWM Channel : 2, programmed Period (us): 333333.33, actual : 333348, programmed DutyCycle : 20.00, actual : 20.00
715719PWM Channel : 3, programmed Period (us): 250000.00, actual : 250015, programmed DutyCycle : 30.00, actual : 29.99
716- PWM Channel : 4, programmed Period (us): 200000.00, actual : 200003 , programmed DutyCycle : 40.00, actual : 39.99
717- PWM Channel : 5, programmed Period (us): 166666.67, actual : 166683 , programmed DutyCycle : 45.00, actual : 44.99
720+ PWM Channel : 4, programmed Period (us): 200000.00, actual : 200004 , programmed DutyCycle : 40.00, actual : 39.99
721+ PWM Channel : 5, programmed Period (us): 166666.67, actual : 166682 , programmed DutyCycle : 45.00, actual : 44.99
718722PWM Channel : 6, programmed Period (us): 142857.14, actual : 142867, programmed DutyCycle : 50.00, actual : 50.00
719723PWM Channel : 7, programmed Period (us): 125000.00, actual : 125016, programmed DutyCycle : 55.00, actual : 54.99
720- SimpleTimer (ms): 2000, ms : 22194962 , Dms : 10073544
724+ SimpleTimer (ms): 2000, ms : 22201565 , Dms : 10073553
721725PWM Channel : 0, programmed Period (us): 1000000.00, actual : 1000005, programmed DutyCycle : 5.00, actual : 5.00
722726PWM Channel : 1, programmed Period (us): 500000.00, actual : 500012, programmed DutyCycle : 10.00, actual : 10.00
723727PWM Channel : 2, programmed Period (us): 333333.33, actual : 333347, programmed DutyCycle : 20.00, actual : 20.00
724- PWM Channel : 3, programmed Period (us): 250000.00, actual : 250015 , programmed DutyCycle : 30.00, actual : 29.99
728+ PWM Channel : 3, programmed Period (us): 250000.00, actual : 250014 , programmed DutyCycle : 30.00, actual : 29.99
725729PWM Channel : 4, programmed Period (us): 200000.00, actual : 200003, programmed DutyCycle : 40.00, actual : 40.00
726730PWM Channel : 5, programmed Period (us): 166666.67, actual : 166682, programmed DutyCycle : 45.00, actual : 44.99
727- PWM Channel : 6, programmed Period (us): 142857.14, actual : 142867 , programmed DutyCycle : 50.00, actual : 49.99
731+ PWM Channel : 6, programmed Period (us): 142857.14, actual : 142872 , programmed DutyCycle : 50.00, actual : 49.99
728732PWM Channel : 7, programmed Period (us): 125000.00, actual : 125021, programmed DutyCycle : 55.00, actual : 54.99
733+ SimpleTimer (ms): 2000, ms : 32275077, Dms : 10073512
734+ PWM Channel : 0, programmed Period (us): 1000000.00, actual : 1000005, programmed DutyCycle : 5.00, actual : 5.00
735+ PWM Channel : 1, programmed Period (us): 500000.00, actual : 500012, programmed DutyCycle : 10.00, actual : 10.00
736+ PWM Channel : 2, programmed Period (us): 333333.33, actual : 333347, programmed DutyCycle : 20.00, actual : 20.00
737+ PWM Channel : 3, programmed Period (us): 250000.00, actual : 250015, programmed DutyCycle : 30.00, actual : 29.99
738+ PWM Channel : 4, programmed Period (us): 200000.00, actual : 200007, programmed DutyCycle : 40.00, actual : 40.00
739+ PWM Channel : 5, programmed Period (us): 166666.67, actual : 166687, programmed DutyCycle : 45.00, actual : 44.99
740+ PWM Channel : 6, programmed Period (us): 142857.14, actual : 142872, programmed DutyCycle : 50.00, actual : 49.99
741+ PWM Channel : 7, programmed Period (us): 125000.00, actual : 125021, programmed DutyCycle : 55.00, actual : 54.98
729742```
730743
731744---
@@ -736,19 +749,19 @@ The following is the sample terminal output when running example [ISR_16_PWMs_Ar
736749
737750```
738751Starting ISR_16_PWMs_Array on ESP8266_NODEMCU_ESP12E
739- ESP8266_PWM v1.2.1
752+ ESP8266_PWM v1.2.2
740753CPU Frequency = 160 MHz
741754[PWM] ESP8266TimerInterrupt: Timer Clock fre = 80000000
742755[PWM] Timer fre = 50000.00 , _count = 1600
743- Starting ITimer OK, micros() = 2069036
744- Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2072604
745- Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2078587
746- Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2084574
747- Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2090559
748- Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2096545
749- Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2102540
750- Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2108521
751- Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2114504
756+ Starting ITimer OK, micros() = 2072589
757+ Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2076168
758+ Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2082485
759+ Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2088818
760+ Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2095149
761+ Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2101479
762+ Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2107820
763+ Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2114152
764+ Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2120482
752765```
753766
754767---
@@ -760,19 +773,19 @@ The following is the sample terminal output when running example [ISR_16_PWMs_Ar
760773
761774```
762775Starting ISR_16_PWMs_Array_Simple on ESP8266_NODEMCU_ESP12E
763- ESP8266_PWM v1.2.1
776+ ESP8266_PWM v1.2.2
764777CPU Frequency = 160 MHz
765778[PWM] ESP8266TimerInterrupt: Timer Clock fre = 80000000
766779[PWM] Timer fre = 50000.00 , _count = 1600
767- Starting ITimer OK, micros() = 2068076
768- Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2071644
769- Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2077622
770- Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2083610
771- Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2089595
772- Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2095581
773- Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2101575
774- Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2107557
775- Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2113540
780+ Starting ITimer OK, micros() = 2073472
781+ Channel : 0 Period : 1000000.00 OnTime : 50000 Start_Time : 2077055
782+ Channel : 1 Period : 500000.00 OnTime : 50000 Start_Time : 2083379
783+ Channel : 2 Period : 333333.33 OnTime : 66666 Start_Time : 2089704
784+ Channel : 3 Period : 250000.00 OnTime : 75000 Start_Time : 2096036
785+ Channel : 4 Period : 200000.00 OnTime : 80000 Start_Time : 2102366
786+ Channel : 5 Period : 166666.67 OnTime : 75000 Start_Time : 2108707
787+ Channel : 6 Period : 142857.14 OnTime : 71428 Start_Time : 2115038
788+ Channel : 7 Period : 125000.00 OnTime : 68750 Start_Time : 2121369
776789```
777790
778791---
@@ -783,18 +796,21 @@ The following is the sample terminal output when running example [ISR_Modify_PWM
783796
784797```
785798Starting ISR_Modify_PWM on ESP8266_NODEMCU_ESP12E
786- ESP8266_PWM v1.2.1
799+ ESP8266_PWM v1.2.2
787800CPU Frequency = 160 MHz
788801[PWM] ESP8266TimerInterrupt: Timer Clock fre = 80000000
789802[PWM] Timer fre = 50000.00 , _count = 1600
790- Starting ITimer OK, micros() = 2073776
803+ Starting ITimer OK, micros() = 2073766
791804Using PWM Freq = 1.00, PWM DutyCycle = 10.00
792- Channel : 0 Period : 1000000.00 OnTime : 100000 Start_Time : 2081329
793- Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 12088080
794- Channel : 0 Period : 1000000.00 OnTime : 100000 Start_Time : 22089021
795- Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 32090020
796- Channel : 0 Period : 1000000.00 OnTime : 100000 Start_Time : 42091024
797- Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 52092019
805+ Channel : 0 Period : 1000000.00 OnTime : 100000 Start_Time : 2081326
806+ Channel : 0 New Period : 500000.00 OnTime : 450000.00 Start_Time : 12081374
807+ Channel : 0 New Period : 1000000.00 OnTime : 100000.00 Start_Time : 22081600
808+ Channel : 0 New Period : 500000.00 OnTime : 450000.00 Start_Time : 31581654
809+ Channel : 0 New Period : 1000000.00 OnTime : 100000.00 Start_Time : 42081893
810+ Channel : 0 New Period : 500000.00 OnTime : 450000.00 Start_Time : 51581947
811+ Channel : 0 New Period : 1000000.00 OnTime : 100000.00 Start_Time : 62082185
812+ Channel : 0 New Period : 500000.00 OnTime : 450000.00 Start_Time : 71582239
813+ Channel : 0 New Period : 1000000.00 OnTime : 100000.00 Start_Time : 82082477
798814```
799815
800816---
@@ -805,19 +821,33 @@ The following is the sample terminal output when running example [ISR_Changing_P
805821
806822```
807823Starting ISR_Changing_PWM on ESP8266_NODEMCU_ESP12E
808- ESP8266_PWM v1.2.1
824+ ESP8266_PWM v1.2.2
809825CPU Frequency = 160 MHz
810826[PWM] ESP8266TimerInterrupt: Timer Clock fre = 80000000
811827[PWM] Timer fre = 50000.00 , _count = 1600
812- Starting ITimer OK, micros() = 2067311
828+ Starting ITimer OK, micros() = 2073309
829+ Using PWM Freq = 1.00, PWM DutyCycle = 50.00
830+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 2080902
831+ Using PWM Freq = 2.00, PWM DutyCycle = 90.00
832+ Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 12087445
833+ Using PWM Freq = 1.00, PWM DutyCycle = 50.00
834+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 22087762
835+ Using PWM Freq = 2.00, PWM DutyCycle = 90.00
836+ Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 32088065
837+ Using PWM Freq = 1.00, PWM DutyCycle = 50.00
838+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 42088370
839+ Using PWM Freq = 2.00, PWM DutyCycle = 90.00
840+ Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 52088673
813841Using PWM Freq = 1.00, PWM DutyCycle = 50.00
814- Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 2074888
842+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 62088982
815843Using PWM Freq = 2.00, PWM DutyCycle = 90.00
816- Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 12081088
844+ Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 72089285
817845Using PWM Freq = 1.00, PWM DutyCycle = 50.00
818- Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 22081402
846+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 82089593
819847Using PWM Freq = 2.00, PWM DutyCycle = 90.00
820- Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 32081701
848+ Channel : 0 Period : 500000.00 OnTime : 450000 Start_Time : 92089898
849+ Using PWM Freq = 1.00, PWM DutyCycle = 50.00
850+ Channel : 0 Period : 1000000.00 OnTime : 500000 Start_Time : 102090204
821851```
822852
823853---
@@ -869,7 +899,7 @@ Submit issues to: [ESP8266_PWM issues](https://github.com/khoih-prog/ESP8266_PWM
8698994 . Add functions to modify PWM settings on-the-fly
8709005 . Improve accuracy by using ` double ` , instead of ` uint32_t ` for ` dutycycle ` , ` period `
8719016 . Optimize library code by using ` reference-passing ` instead of ` value-passing `
872-
902+ 7 . DutyCycle to be optionally updated at the end current PWM period instead of immediately.
873903
874904---
875905---
@@ -882,9 +912,13 @@ Many thanks for everyone for bug reporting, new feature suggesting, testing and
882912
883913- [ Change Duty Cycle #1 ] ( https://github.com/khoih-prog/ESP8266_PWM/issues/1 ) leading to v1.1.0
884914
885- 2 . Thanks to [ ggmichael] ( https://github.com/ggmichael ) to request better PWM resolution in
915+ 2 . Thanks to [ ggmichael] ( https://github.com/ggmichael ) to request better PWM resolution, leading to v1.2.0, in
916+
917+ - [ Change Duty Cycle #1 ] ( https://github.com/khoih-prog/ESP8266_PWM/issues/1#issuecomment-1024969658 )
886918
887- - [ Change Duty Cycle #1 ] ( https://github.com/khoih-prog/ESP8266_PWM/issues/1#issuecomment-1024969658 ) leading to v1.2.0
919+ and enhancement request as well as testing to verify, leading to v1.2.2, in
920+
921+ - [ DutyCycle to be updated at the end current PWM period #2 ] ( https://github.com/khoih-prog/ESP8266_PWM/issues/2 )
888922
889923
890924<table >
@@ -899,6 +933,7 @@ Many thanks for everyone for bug reporting, new feature suggesting, testing and
899933## Contributing
900934
901935If you want to contribute to this project:
936+
902937- Report bugs and errors
903938- Ask for enhancements
904939- Create issues and pull requests
0 commit comments