昨日は夕方にスタバに行って、PSoCいじってきました。
真ん中のLEDがPWMで0.3秒間隔ぐらいで点滅する。PWM(Pulse Width Modulation)はON/OFFの振幅幅を指定して自動的に波形を作るしくみの事で、カウントアップするタイマカウンタに対してduty値を指定してそれより大きい時は出力をHI、小さければLOWにする。
つまり波形を操作するにはduty値、カウントアップの間隔(システムクロックを分周したりして調節できる)、カウントアップの初期値、最大値、1クロックあたりのカウントアップ値、などのレジスタ(たいてい普通の変数として代入できる)を設定しなおす事で動的に波形を変える事が出来る。
PastelMagicの桑野さんが書かれた「はじめてのPSoCマイコン」の第1章 PSoCチュートリアル (p.25-53)を、PSoC MiniProgを買った時に付いてきたミニ評価ボード(CY3210-MiniEval1)にCY8C29466乗っけた版としてやってみた。
(この本ではCY8C27443を使っているが、ピンコンパチで上位版なので俺は29466をメインに使っていく予定)
CQ出版 (2004/11)
売り上げランキング: 137445
PSoCをはじめる一冊
$10マイコンがバージョンアップ!
PSoCの基本が解ります
ちなみに29466はGainerでも使われている。
■用意するもの
・プログラムを書くIDE → PSoC Designer(Cypressダウンロードページ)
・ISPライター制御プログラム → PSoC Programmer(Cypressダウンロードページ)
・PSoC C言語コンパイラ → 秋月電子通販
・PSoC MiniProg → 秋月電子通販
・CY8C29466 → 秋月電子通販
■PSoC Designer
PSoC ExpressではなくDesignerを使って、C言語で直接プログラミングします。
参照:s.h.log: PSoC Expressセミナーに行ってきた
Expressとどのように使い分けるかを探ってみたいので。
こいつにはエディタとビューが沢山あります。
右上のツールバーのボタンで切り替えます。今回は、
1.「Device Editor」の「User Module Selction View」でPWMモジュールを選択し、
2.「Device Editor」の「Interconnect View」でモジュールの動作設定と、出力先のピンを結線し、
3.「Application Editor」でプログラムを書き、
4.ライターでマイコンに書き込む
で終わりです。基本的に1~3を何度も反復してデザインを進めるらしい。
■PSoC Designer 手順1.PWMモジュールを選ぶ
「Device Editor」の「User Module Selction View」を選択
左側のツールパネルからPWM16bitを右クリックして、「Select」
すると配置されて、
DigitalBlockが2つ消費される。FFみたいでかっこいい。
8bitPWMなら1つ消費です。
■PSoC Designer 手順2.PWMモジュールをLEDに繋がっているピンに結線する
「Device Editor」のまま「Interconnect View」を選択します
上にあるPWMモジュールを右クリックして、「Place」を選択
すると、真ん中の回路図みたいな所に配置できる。緑色になって2ブロック占有したら配置成功
ここから更に、モジュールの動作設定を行なう。
その前にマイコンの動作設定を行なおう。
特にPWMはクロックソースの設定次第で動きが変わるので、先にマイコンの設定をしておく。
PWM16_1モジュールの設定。
ここで「Compare Out」で出力先を「Row_0_Output_3」に指定する。
すると、PWMモジュールからRO0[3]に接続される。
そのままつながった先の一番右端の四角をクリック。
クリックしたら出てくる画面で、さらに三角形をクリックして「GlobalOutEven_3」を指定
青くなったらClose
さて、段々とPWMが外側のピンに向けて結線されてきました。
今度は外から攻めます。
ミニ評価ボードの回路を見ると、マイコン左側の7番ピンがLEDに接続されているので
さっきも出てきた「GlobalOutEven_3」を選択すると、PWMからピンまでが1本に繋がります
■PSoC Designer 手順3.プログラムを書く
プログラムはmain以外ほぼ自動で書かれます。
Interconnect Viewの「Generate Application」のボタンを押すと
アプリケーションを書くためのAPIが全部作られます。
モジュールを操作するためのAPIが自動生成されているので、「Library Headers」の「pwm16_1.h」を開くと
コードが見れる。ソース嫁
ソース読むのが一番楽。C言語なのでヘッダファイルにユーザが使うべき関数がわかりやすい名前で書いてある。
PWMの初期設定はDevice EditorのInterconnect Viewで済ませてあるので、そのようにレジスタも代入されている。
素直に PWM16_1_Start(); だけmain()の中に書けばok
これだけでPWMが動く。
ツールバーから「Build」して、「Program Part」すると
PSoC Programmerが起動する。
そのまま「Program」ボタンを押して書き込む。30秒ぐらいかかる。
書き込んだら、右側の「Toggle Device Power」でUSBで5V電源だけ供給してやると動く。
LEDをPWMで点滅させる
デジカメで撮影すると点滅がよくわからないな…