回答編集履歴

3

また追記

2023/03/12 12:25

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -3,3 +3,7 @@
3
3
  まだちゃんと見てませんが、loop()関数中でPWMの動作と非同期にInjectorN_ONを書き換えて破綻しているんじゃないかと想像します。動作周期を指示する変数(InjectorN_ON)とは別に次のタイマー時間を求めるための変数を設置し、Inj_ON()の中でだけ設定する(Inj_ON()以外ではInjectorN_ONにアクセスしない)ようにしてみたらいかがですか (本来はInjectorN_OFFがその役目だったはずな気がします)。
4
4
 
5
5
  あと、割り込みとメインコンテキスト両方でアクセスする変数には無条件にvolatileつけといたほうがよいかと。
6
+
7
+ 追記
8
+ TimerOneって時間指定がμsですよね。でも、AVRは所詮16MHzのマイコンですから、あまり小さな値を与えても反応し切れません。
9
+ 割り込み間隔はmsのオーダーに乗せておいた方がいいように思います>Duty比が低い

2

さらに追記

2023/03/09 15:45

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -1,5 +1,5 @@
1
1
  なんかわざわざ難しくしている感はありますがそれはともかく。
2
2
 
3
- loop()関数中でPWMの動作と非同期にInjectorN_ONを書き換えて破綻しているんじゃないかと想像します。動作周期を指示する変数(InjectorN_ON)とは別に次のタイマー時間を求めるための変数を設置し、Inj_ON()の中でだけ設定する(Inj_ON()以外ではInjectorN_ONにアクセスしない)ようにしてみたらいかがですか。
3
+ まだちゃんと見てませんが、loop()関数中でPWMの動作と非同期にInjectorN_ONを書き換えて破綻しているんじゃないかと想像します。動作周期を指示する変数(InjectorN_ON)とは別に次のタイマー時間を求めるための変数を設置し、Inj_ON()の中でだけ設定する(Inj_ON()以外ではInjectorN_ONにアクセスしない)ようにしてみたらいかがですか (本来はInjectorN_OFFがその役目だったはずな気がします)
4
4
 
5
5
  あと、割り込みとメインコンテキスト両方でアクセスする変数には無条件にvolatileつけといたほうがよいかと。

1

追記

2023/03/09 15:40

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -1,5 +1,5 @@
1
1
  なんかわざわざ難しくしている感はありますがそれはともかく。
2
2
 
3
- loop()関数中でPWMの動作と非同期にInjectorN_ONを書き換えて破綻しているんじゃないかと想像します。動作周期を指示する変数(InjectorN_ON)とは別に次のタイマー時間を求めるための変数を設置し、Inj_ON()の中でだけ設定するようにしてみたらいかがですか。
3
+ loop()関数中でPWMの動作と非同期にInjectorN_ONを書き換えて破綻しているんじゃないかと想像します。動作周期を指示する変数(InjectorN_ON)とは別に次のタイマー時間を求めるための変数を設置し、Inj_ON()の中でだけ設定する(Inj_ON()以外ではInjectorN_ONにアクセスしない)ようにしてみたらいかがですか。
4
4
 
5
5
  あと、割り込みとメインコンテキスト両方でアクセスする変数には無条件にvolatileつけといたほうがよいかと。