PSoCを使い8ビットPWMでLEDを点滅させる


psoc_timer8_01.gif
前回は8ビットカウンターを利用してLEDを点滅させた。今回は8ビットPWMモジュールを利用してLEDを点滅させる。PSoC DesignerとCY8C29466を利用した。

使うモジュールが異なるだけで基本的な手順は前回と同じだ。省略されている部分は「PSoCを使い8ビットタイマーでLEDを点滅させる」や「PSoCを使い8ビットカウンターでLEDを点滅させる」を参照してほしい。

psoc_timer8_02.gif
PSoC Designerを起動して新しいプロジェクトを作成した。この画面(Device EditorのSelection画面)では利用するモジュールを選択する。今回は8ビットPWMを利用する。左側のリストの「PWMs」にある「PWM8」を右クリックして現れたメニューから「Select」を選択する。すると画面中央上側に「Counter8_1」というアイコンが追加される。

psoc_timer8_03.gif
「Config」メニューの「Interconnect」を選択して画面を切り替える。ここでPSoCの動作クロックなどの設定をする。設定箇所は赤枠内で、設定値は「PSoCを使い8ビットタイマーでLEDを点滅させる」などと同じだ。

psoc_timer8_04.gif
次にPWMモジュールを配置して設定する。「PWM8_1」を右クリックして現れるメニューから「Place」を選択する。

psoc_timer8_05.gif
すると配線図の中にPWMモジュールが配置されると同時に画面左側で詳細設定ができるようになる。画面左側を赤枠内のように設定する。具体的には
「Clock」は「VC3」に、
「Enable」は「High」に、
「CompareOut」は「Row_0_Output_2」に、
「TerminalCountOut」は「None」に、
「Period」は「99」に、
「PulseWidth」は「50」に、
「CompareType」は「Less Than Or Equal」に、
「InterruptType」は「Terminal Count」に、
「ClockSync」は「Sync to SysClk」に設定する。PWMを利用するときは「CompareOut」と「Period」、「PulseWidth」を必要に応じて設定すると覚えておくといいだろう。

psoc_timer8_06.gif
さらにPWMモジュールの出力が実際のポートに出力されるように内部配線をする。今回はポート22を利用した。

内部配線をしたら「View」メニューから「Application Editor」を選択して画面を切り替える。

psoc_timer8_07.gif
ソースコードを書くときはサンプルコードを参照すると悩まずに済む(ことが多い)。PWMモジュール用のサンプルコードを見るためにツールバーの上部で「PWMs」の「PWM8」を選択し「User Module Datasheet」ボタンを押す。

psoc_timer8_08.gif
サンプルコードはデータシートの中に用意されている。「PWM8_WritePulseWidth」までは先に設定した「Period」や「PulseWidth」をソースコード上から設定するものだ。必要ないのでそれ以外の部分を選択してクリップボードにコピーする。

psoc_timer8_09.gif
「main.asm」の中にサンプルコードを貼り付ける。そのときに「PWM8_」の部分を「PWM8_1_」のように置換する。

修正したら「Build」メニューの「Build」でビルドする。
ビルドが正常したらPSoC Programmerで書き込んでPSoCを動かせばいい。これでポート22にカウンターからの信号が出力され、MiniEval1のようにLEDが用意されている基板であればLEDがおよそ1秒ごとに光る。



カテゴリー「電子工作」 のエントリー