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のステッカーが合いそう?(^^;;; まぁ直接、水が 入りにくくなったのではないかと。。。 |