2024/01/08(MON) なんとなくタコメータを作る流れB
前回、200μsec毎に
PINの状態を拾えば、大体OKってのがわかった
でも、プログラムとしてはきれいじゃないので
割込みで、200μsecを刻んでみると。。。
全然ダメだったw
フォト

再度、オシロで確認する
タイムラインを細かく見ていく
0.5ms = 500μsec のレンジでみると
若干、チャダっているのが見える
フォト

0.2ms = 200μsec のレンジでみると
結構、バタついているのがみえる
フォト

さらに細かく
0.1ms = 100 μsec のレンジでみると
チャダリング対策が200μsecでは
足りないのがみえる。
フォト

試しに200μsec から400μsec に変更したら
正常に回転数が拾えるようになった。

わかりやすく図示すると
@が最初の割込み
Aの期間の割込みを無視する
この場合は400μsec とした場合。
フォト

うーむ。500μsec とか600μsec でも十分かもね。
ということで
プログラム抜粋

宣言部で必要な定義とか変数とか宣言する。

---8<------8<------8<------8<------8<------8<---
・・・
#define IGN_DELAY_TIME 400 // 400μsec

// 割込み関数
void fnTacoISR() ;

// ■定義
#define PIN_TACO 16 // タコメーターのピンアサイン

uint32_t u32TacoCount = 0 ;
uint32_t u32IgnOldTime = 0 ;
・・・
---8<------8<------8<------8<------8<------8<---

初期化処理でピンアサインと
割込みの設定をする

---8<------8<------8<------8<------8<------8<---
void setup()
{
・・・
u32IgnOldTime = micros() ;

// PIN の入力設定
pinMode( PIN_TACO, INPUT ) ;

// 割り込み設定
attachInterrupt(PIN_TACO, fnTacoISR, FALLING) ;
・・・
}
---8<------8<------8<------8<------8<------8<---

割込みでは
チャダリング対策とカウント

---8<------8<------8<------8<------8<------8<---
// タコメータの割り込み
void fnTacoISR()
{
uint32_t u32IgnNowTime = micros() ;

if ( u32IgnNowTime - u32IgnOldTime >= IGN_DELAY_TIME ) {
u32IgnOldTime = u32IgnNowTime ;
u32TacoCount++;
}
}
---8<------8<------8<------8<------8<------8<---

という感じで、
エンジンの回転数が拾えるようになりました。
ヨカッタ。ヨカッタ。
ここは通過点でしかないんだけどねw

<おまけ>
キーのシャッターが壊れた。。。
開きっぱになっちゃった。
フォト

カギは回るからいいんだけど
雨水とか入ったら
やっかいだよね?

ここだけ修理できるか
ググってみたけど
よくわからなかった。
あと、キー全部を交換と思ったけど
販売終了だはな。。。
てか、そもそもキーをONにしなくても
エンジンは掛かるんだけどねw
他車とか社外のでもいいんだけど
ほかとキーが違くなるのがいやだな。。。
ということで
自作で、キーカバーを作るw
ちょうどよさそうなサプリの容器が
あったので、加工してみました。
フォト

とりつけましたw
なんか笑える。。。
フォト

開けるとこんな感じ
フォト

カギをさすとこんな感じ
フォト

なかなかいいじゃない?www
ステッカーでも作って貼るかな?
TZR-OCのステッカーが合いそう?(^^;;;

まぁ直接、水が
入りにくくなったのではないかと。。。