2013年7月18日木曜日

PIC C18 メモ(ブザー音発生)

【条件】
  • PIC18F4520, Clock 4MHz
  • ブザー駆動用の波形 5kHz を Timer2/PWM を使用して作る
  • 圧電サウンダ他励振タイプ(PKM17EPPH4001-B0, Murata)
【設定】
//PWM for Buzzer
#define BZ_PRIOD 220
#define BZ_DUTY 440
OpenTimer2( TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1 );
OpenPWM1( BZ_PRIOD );
SetDCPWM1( BZ_DUTY );
//SetDCPWM2( 0 );      //(*1)
Delay10KTCYx( 5 );     //50ms BZ ON
SetDCPWM1( 0 );        //BZ OFF
  • RC1,RC2の両ポートともタイマ2で共通設定され、片側のみ使うことは出来ない
  • (*1)拡張モードでない場合はSetDCPWM2( 0 )を実行してしまうとRC1ピンの方もオンオフできなくなる
【計算式】
RSフリップフロップのRに「周期」カウンタ、Sに「デューティ」カウンタを備え、交互にトリガするような構成である。ここでの設定は、プリスケーラは1、同じクロック源をカウントするわけなので、最大のデューティ分解能の 10bit が活かせるのは最大周期の時である。周期設定値 PR2=220 に対して10bitの分解能でデューティ設定できるわけではないので注意。

周期は
= ( 220 + 1 ) x 4 x 0.25usec
= 221us ( = 4.525kHz )

デューティは
= 440 x 0.25usec
= 110us ( = 50% )
【実施】
実際使うときは、この波形を断続して左図のように、ピピピピと鳴るような使い方とした。回数指定してモード毎に鳴り分ける。
2005.11 - 2013.07.18