1. PWM とは

2. 出力波形


演習 4-1 (個人PC): PWM を使ってみましょう。プログラムの仕様は以下の通りです。

仕様:

1827は CCP(Capture/Compare/PWM)モジュールを4つ(CCP1、CCP2、CCP3、CCP4) 積んでいます
タイマーモジュールを3つ(Timer2、Timer4、Timer6) 積んでるので同時に 3 つ PWM 出力可能です
CCP1 と CCP2 は設定で PWM 出力ピンの位置を変更できます

  1. PWM 出力モジュールとして CCP1 を使用する
  2. CCP1 の出力ピンは 9 pin とする
  3. CCP1 に接続するタイマーとして Timer2 を使う
  4. Timer2 の prescale は x64 とする
  5. タクトスイッチを離している時は PWM周期 16 ミリ秒、パルス幅 8 ミリ秒
  6. タクトスイッチを押している時は PWM周期 8 ミリ秒、パルス幅 6 ミリ秒

プロジェクト「IO_3_1」を「IO_4_1」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_3_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(IDEのバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
setting.h を開き、一旦全ての機能をオフにします。
デジタル入力(USE_INPUT)、CCP1を使用するPWM (USE_CCP1_PWM)のコメントアウトを解除します。
Modlules/ccp_pwm.c を開きます。
CCP1 を使うので、CCP1の初期化関数( void init_ccp1_pwm() )をコメントに従って設定します。
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
3: RA4
4: MCLR/VPP -- PICkit の 1: NMCLR
5: VSS -- GND
6: RB0 (GPIO入力) -- タクトスイッチ
7: RB1
8: Rx (UART) -- RN-42 の J2-6 : TX (UART)
(*)9: CCP1 (PWM) -- オシロスコープ

10: RB4
11: Tx (UART) -- RN-42 の J2-7 : RX (UART)
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
15: RA6
16: RA7
17: RA0 (GPIO出力) -- LED
18: AN1 (ADC) -- 可変抵抗の中央ピン

書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「ccp_pwm.c」と「main.c」を記入してください。


演習 4-2 (個人PC): PWM を使って音を鳴らしてみましょう。プログラムの仕様は以下の通りです。

仕様:

  1. CCP4 を使用する
  2. CCP4 の出力ピンは 3 pin とする ※ CCP4 は 3 pin 固定
  3. CCP4 に接続するタイマーとして Timer6 を使う
  4. Timer6 の prescale は x64 とする
  5. タクトスイッチを離している時は音を出さない
  6. タクトスイッチを押している時はオクターブ3のド(131 Hz) の音を出す

音階と PWM 周期、パルス幅の関係:

・オクターブ3のド(131 Hz)

131 Hzは周期で言うと 1/131 = 0.0076 秒 = 7.6 ミリ秒なので、PWM 周期を 7.6 ミリ秒にします。
パルス幅は(適当に決めて良いですが)今回は PWM 周期の半分の 3.8 ミリ秒にします。

プロジェクト「IO_4_1」を「IO_4_2」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_4_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
(IDEのバージョンによっては) プロジェクトのプロパティを開き、そのまま「Apply」ボタンを押して設定ファイルを更新します。※ 通常は自動で設定ファイルが更新されますが、バージョンによってはバグのため自動更新されないようです
setting.h を開き、一旦全ての機能をオフにします。
デジタル入力(USE_INPUT)、CCP4を使用するPWM (USE_CCP4_PWM)のコメントアウトを解除します。
Modlules/ccp_pwm.c を開きます。
CCP4 を使うので、CCP4の初期化関数( void init_ccp4_pwm() )をコメントに従って設定します。
main.c を開き、ファイルの中身をテンプレートの内容に置き換えて下さい。
穴埋め問題になっていますので、プログラム内のコメントを参考に?のところを正しい内容に修正してください。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

1: RA2
2: RA3
(*)3: CCP4 (PWM) -- 圧電スピーカ ※ 既に配線済み
4: MCLR/VPP -- PICkit の 1: NMCLR
5: VSS -- GND
6: RB0 (GPIO入力) -- タクトスイッチ
7: RB1
8: Rx (UART) -- RN-42 の J2-6 : TX (UART)
9: CCP1 (PWM) -- オシロスコープ

10: RB4
11: Tx (UART) -- RN-42 の J2-7 : RX (UART)
12: ICSPCLK -- PICkit の 5: PGC
13: ICSPDAT -- PICkit の 4: PGD
14: VDD -- 3.3V
15: RA6
16: RA7
17: RA0 (GPIO出力) -- LED
18: AN1 (ADC) -- 可変抵抗の中央ピン

書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「ccp_pwm.c」と「main.c」を記入してください。