PSoC ExpressでLEDをナイトライダー風に光らせる

led_nightrider01.gif
今回はPSoC Expressを使ってMiniEval1上に用意された4つのLEDを順番に光らせる。

led_nightrider03.gif
まず画面左下の「INPUT」をクリックして「Input Driver Catalog」の「Timing」から「Interval Generator」を追加する。

led_nightrider04.gif
さらに画面左下の「OUTPUT」をクリックして「Output Driver Catalog」の「LED」から「On/Off」を追加する。

led_nightrider05.gif
これでインターバルジェネレーターを示す「Input1」とLEDを示す「Output1」のアイコンが追加された。

led_nightrider06.gif
今回はLEDを4つ制御するので、同様の操作でLEDを追加して「Output1」~「Output4」まで用意する。

ナイトライダー風にLEDを左右順番に点滅させる条件の設定は若干複雑だ。その設定を画面左下の「VALUATOR」から行う。

led_nightrider07.gif
「VALUATOR」を開くと方式の選択画面が開く。ここから「StateMachine」(ステート・マシン)を選択する。PSoC Expressでナイトライダー風に光らせる方法はいくつかあるが、今回はこのステートマシンによる状態遷移をりようする。

led_nightrider08.gif
「StateMachine」の設定ウインドウが開いた。ここで「Add State」をクリックする。

led_nightrider09.gif
すると状態を入力する画面が開く。ここで名前を「LED1」として「OK」ボタンで追加する。

led_nightrider10.gif
これで「StateMachine」ウインドウに「LED1」が追加された。

led_nightrider11.gif
同様に「LED20」、「LED30」...と画面のように5つ追加して合計6つの状態を作る。LEDは4つだが、左から右に点滅する状態と右から左に点滅する状態とを区別するために6つ用意した。

さらに設定するため「LED1」をダブルクリックする。

led_nightrider12.gif
「LED1」をダブルクリックして現れたウインドウで「Add」ボタンを押す。

led_nightrider13.gif
すると状態遷移を設定するための画面が開く。ここで名前を「to2」(LED2へ向かうの意味にした)、「Expressioon」に「Input1__Triggered」を入力する。「Expressioon」入力時は画面左上に表示される「Expression Assistant」ウインドウから選択するとスペルミスの可能性を減らせる。

led_nightrider14.gif
次にどこからどこへ状態遷移させるかを設定する。ここでは「LED1」から「LED20」とする。

led_nightrider15.gif
これで状態遷移の設定が終わったので「OK」ボタンを押す。

led_nightrider16.gif
すると「LED1」から「LED20」へ矢印が引かれた。

led_nightrider17.gif
見ずらい場合はドラッグ・アンド・ドロップで移動できる。

led_nightrider18.gif
同様に「LED20」は「LED30」へ...とぐるぐるまわるように状態遷移を5回設定してこの画面のように矢印が引かれるようにする。

led_nightrider19.gif
これで「StateMachine」の設定は終わりだ。

led_nightrider20.gif
インターバルジェネレーター「Input1」からステートマシン「Valuator1」へオレンジ色の線が引かれた。

led_nightrider21.gif
ステートマシンでは(状態名は「LED1」のようにしたが実際の)LEDに対する設定は行わなかった。次にステートマシンの状態を実際のLEDに関連付ける。「Output1」を右クリックして現れたメニューから「Transfer Function」を選択する。


led_nightrider22.gif
ここで「TableLookup」を選択する。

led_nightrider23.gif
入力の選択欄では「Valuator1 state」を選択する。

led_nightrider24.gif
ここではデフォルトのまま「Next」で次へ進む。

led_nightrider25.gif
ルックアップ・テーブルの設定画面が開いた。1つ目のLEDを示す「Output1」に対する設定なので、ステートマシンの状態(Valuator1_state)が「LED1」のときに「ON」、それ以外のときに「OFF」になるようにドラッグ・アンド・ドロップで設定する。これで「Output1」に対する設定は終わりだ。

led_nightrider26.gif
同様に「Output2」も右クリックして「Transfer Function」から設定する。この場合「LED20」と「LED21」が「ON」になるようにする。

led_nightrider27.gif
「Output3」では「LED30」と「LED31」を「ON」にする。

led_nightrider28.gif
「Output4」では「LED4」を「ON」にする。

led_nightrider29.gif
これで「Valuator1」と各LEDがオレンジ色の線で結ばれた。今回は若干複雑なので実際にPSoCへ書き込む前に「Simulation」で動作を確認する。

led_nightrider30.gif
きちんと設定されていれば「Input1」の「Triggered」と「Not_Triggered」を順番にクリックするとOutput1の状態がONやOFFに順番に変わる。

led_nightrider31.gif
シミュレーションで動作を確認したらビルドする。今回は「CY8C29466」を用い、「Sample Rate」を「8Hz」に設定した。

led_nightrider32.gif
MiniEvalの基板にはP20~P23にLEDが用意されている。「Output1」~「Output4」がこれらのポートにつながるようにピンあサインを調整する。

led_nightrider33.gif
ビルドが終わったらPSoC ProgrammerでPSoCへ書き込み実際に動作確認する。

_DSC8935.JPG
これで4つのLEDがナイトライダー風に左右に順番に光った。

このように(設定が面倒でソースコードを書いた方が早いという気もするが、)ステートマシンなどのValuatorを使うとかなり複雑な動作まで実装できる。


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