いんくらyochさんの日記

興味あることの忘備録

AVRでのPWM入力の数値化

TWE-Liteによるワイヤレス化の課題として、PWM出力が正常にADCできない部分をいろいろ調べたところ、AVR.jpの応用記述にある「AVR135:PWMデューティ サイクル測定へのタイマ捕獲使用」のサンプルプログラムがそのまま利用できることが判明した。
早速、AVR擬似pic−nicにincludeしたが、サンプルはmega64で書かれているため以下の部分を修正した。
【icp.c】

  • 冒頭のincludeをに書き換え
  • mega328のICP1ピンはPB0なので、該当部分を書き換え
  • ICP割り込みレジスタ名を書き換え(TICIE1->ICIE1)
  • 割り込み処理をISR(TIMER1_COMPA_vect),ISR(TIMER1_CAPT_vect)に書き換え

これでsei();したメインでicp_rxを呼び出すとPWM出力(0〜1800mV)に見合った値が8bit値で返ってくる。
これをcalsat32に返すため、上位2bitをADCH、下位6biをADCLとした。
ArduinoではpulseIn関数がPWM入力を数値化してくれる。
ただ、mega328でのK3NGコントローラは空容量がほとんどないので、不要な機能をスケッチから削除する必要がある。