« 混ぜるな危険! ストレートとクロスのLANケーブル | トップページ | Arduinoのアナログ基準電圧入力 »

2019年3月22日 (金)

Arduino IDE アップデートしたらMsTimer2が使えなくなった・・・

   ※私が実行した対策方法はあとで示します。
「Arduino」の開発環境、「アップデートがあるよ」のメッセージが出たんでアップデートしたら、これまで使えていた「MsTimer2」(タイマー割り込み処理)が動かなくなってしまって、「なんで?」状態に。
動かなくなったのは「MEGA-2560」。
「Arduino-UNO」では大丈夫。
調べてみると「MsTimer2.cpp」内のチップ名称指定からMEGA2560が抜けていると。
  ※検索:arduino mega2560 mstimer2
対策として「MsTimer2.cppにパッチを当てよ」とのこと。

アップデート前はちゃんと動いていたんです。
アップデートでMsTimer2.cppが古いのに書き換わったんだろうなの想像。
こんなのイヤ! 

~~~~~~~~~~~~~~~~~~~~~~~~~~
★私の対策方法
MsTimer2を使わず、タイマー2モジュールを直接制御して、
割り込みルーチンをベクトル設定から。

●setup内
 :
// タイマー2 割り込み有効に
TCCR2A = 0b00000010;  // WGM21,20 CTCモード
TCCR2B = 0b00000100;  //  プリスケーラ1/64
OCR2A = 250-1;            // 16MHz / 64 / 250 = 1kHz
TIMSK2 = 0b00000010;  //  OCIE2A コンペアマッチA割り込み有効
 :
●割り込み処理
/***** タイマー値 *****/
volatile byte tm_1ms; // 1msダウンカウントタイマー max 255ms
/***** タイマー2 1mS割り込み *****/
// コンペアマッチA割り込み
ISR(TIMER2_COMPA_vect)
{
  if(tm_1ms) tm_1ms--;  // 1ms値ダウンカウント
}

 

~~~~~~~~~~~~~~~~~~~~~~~~~~
MsTimer2の最小単位が1ms。
チャートレコーダーでは0.5msが欲しかったんで、割り込みを直接記述。

ただし、
AVRマイコンのCコンパイラ 具体的に ※volatileを忘れずに!
のように注意(word以上のデータをアクセスする時の割り込み禁止処理)が必要。

Arduino IDE、そういやこんな変更もあった・・・

 

 

|

« 混ぜるな危険! ストレートとクロスのLANケーブル | トップページ | Arduinoのアナログ基準電圧入力 »

トラブル遭遇」カテゴリの記事

電子工作」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 混ぜるな危険! ストレートとクロスのLANケーブル | トップページ | Arduinoのアナログ基準電圧入力 »