2014年4月15日火曜日

PSoC5LPでLEDチカチカ2~ほぼ書かない編~

では、LEDチカチカをほぼ書かないバージョンです。
まずは、前回のプログラム(プロジェクト)を開きましょう。

前回のプロジェクトを開いたら
「main.c」のタブを開いて

main.cの前回のプログラム部分を
/**
**/
を使って挟みましょう。



次に、「TopDesign.cysch」のタブを開いて


「Pin_1」をダブルクリックして設定を開きましょう。



開いたら「HW Connection」のチェックボックスにチェックを入れて

「OK」をクリックします。


Pin_1の設定のOKをクリックしたら、右側のコンポーネントの画面から
「Digital」のファイルの「Functions」のファイルにある「PWM」のコンポーネントを




ドラックアンドドロップをして、PSoC5LPを描く領域に入れましょう。


また、「Digital」の「Logic」のファイルにある
「Logic Low '0'」のコンポーネントと



「System」のファイルある
「Clock」のコンポーネントを



PSoC5LPを描く領域にドラックアンドドロップして入れましょう。


それぞれをこんな感じに並べます。



そしたら、「Clock_1」をダブルクリックして
クロックの設定の画面を開きましょう。
開くとこんな感じ。



そうしたら、「Source」のプルダウンメニューから
「IMO(3.000MHz)」を選択します。
「Specify」の項目のラジオボタンはそのままにして
プルダウンメニューから「Hz」を選んで、となりのボックスに「500」
入れましょう。

入れ終わるとこんな感じ。



そうしたら、「OK」をクリックして


「PWM」と「Clock」と「Logic Low '0'」をつなぎましょう。
つなぐとこんな形

「Logic Low '0'」を「PWM」のresetにつなぐのは、
PSoC5LPが動き出しても、「リセットしませんよ」て言う。しるし


つなぎ終わったら、PWMの設定を
ダブルクリックで開きましょう。
開くとこんな感じ。


「Resolution」のラジオボタンを16-bitにして
「PWM Mode」のプルダウンメニューから「One Output」を選びましょう。
ここまで選んだ段階だとこんな感じ。


そうなったら、
「Period」に499
「CMP Value」に250を入力しましょう。
Period = 1Sと太字で書いてあると思います。
これは、0、1,2…499回数えると「1秒周期ですよ」ってこと
なので「250」を超えたら、ONにしてくださいってすると
500ミリ秒間はoff 500ミリ秒間はon と言う感じになるんです。

入力が終わると、こんな感じ


こうなったら「Ok」をクリックしましょう。

ここまで来たら、


PWMとpin_1をつなぎましょう。


そうしたら、1度ビルドボタンを押しましょう。



ビルドが終わったら
もう一度、「main.c」のタブを開いて
for(;;)の部分に


PWM_1_Start();


だけを入力して


もう一度ビルドボタンを押します。



これで完成(/・ω・)/



実際に動作を確認してみましょう。
書き込みボタンをおして、データをPSoC5LPに入れましょう。

動作としては同じですね。

では、LEDを増やしてみましょう。

新しく「Digital Output Pin」のコンポーネントを入れて
PWMにつなぎましょう。


つないだら、「[***].cydwr」のタブを開いてPin_2に別のピンを足しましょう。
(私はfreeSoCなのでP15[5]につなぐと別のLEDが使えるようになる)


そして、ビルドボタンを押して、PSoC5LPにデータを入れましょう。


どうでしょう?チカチカするLEDが増えたでしょうか?
でも、プログラムは書き足してないですね?。


PSoC5LPだからこそこんな事が出来るんです。

2014年4月13日日曜日

PWMって?~結局はon と off~

前回はCPUに命令をして、LEDをチカチカさせました。
ただ、このやり方だとLEDを増やしたりすると、
CPUへ命令する内容を増やさないといけません。

では、CPUへの命令を極端に減らして同じ、もしくはそれ以上の事をさせるにはどうしたらよいでしょう?

そこで!

PSoC5LPの強靭な柔軟性を活用することで可能にしましょう。


問題は「一定周期でON と OFF」を繰り返すという事

そんな機能を持つコンポーネント(部品)があればいいんです。
そこで、PWMと言うのを使います。

PWMと聞くとmbedやarduinoを使った事のある人だと
「LEDをフワフワ光らせるときに使った」 とか
「モーター動かす時に使った」とか
そんなのだと、思います。

しかし、PWMそのものを理解して使っているわけではないでしょう。

PWMと言うのは、平たく言って

「基準となるon offの周期を数えて、別のon offを出力する」

と言うただそれだけの機能なんです。

もちろんCPUに任せることもできますが
それでは、他にもCPUに任せたい
プログラムが止まってしまうんです。

PWMは
基準のon off 、 数える部品 、 回数を比べる部品
この3つで出来ています。

わかりやすく、2bitのPWMを描いてみました。
基準となるon offをクロックって言って
CPUも含めてこのクロックを基準に動いています。

on offのセットを数える部品をカウンターと言って
今回は2ビットなので、4回数えたら、「0」になる部品です。

数を比べる部品をコンパレータと言って
設定した数とカウンターの数を比べて
設定された数を超えるとoff ⇒ on になる部品となっています。

今回はカウンターの数と比べるのを
カウンターの数が2回以上の時(緑)と3回以上(オレンジ)の時を書きました。
よく言うデューティー比と言うのは
全体の回数と数える回数の比のことなんですね。

ね!実は単純。

この3つを組み合わせて、LEDやモーターに
適切な on とoff を送っているだけなんです。

たとえば、遅いクロックに出来たり、数える回数が増やせれば・・・


LEDのチカチカにも応用できると思いません???


次回、実際にPWMを使ってほぼ書かないで、LEDをチカチカさせましょう!

2014年4月12日土曜日

PSoC5LPでLEDチカチカしよう!後編~文字で作る編~

~準備編~で作るための用意が出来ました。
準備編は、PSoC5LPで作る場合のすべてに共通するので

忘れたら見ておくと良いです。



さて、LEDを実際にチカチカさせましょう。
まずは左側のこまどを見てみましょう。
これは、PSoC5LPを作るためのファイルを表しています。


「TopDesign.sch」(青のわく)はPSoC5LPの「機能を描く」用ファイル
「[自分で付けた名前].cydwr」(みどりのわく)はPSoC5LPの内部設定用ファイル
「main.c」(オレンジのわく)はPSoC5LPのCPUに「こんな事して」命令用ファイル
っとこんな感じ。

今は「TopDesign」のタブが開かれています。
これのおかげで、プログラムを見ずとも、「あ~。こんな事させたいのか?」
が判ってしまいます。

「TopDesign」のタブを開いた状態で、右側のこまどを見てみると
「Cypress」と「off-chip」のタブがあります。

「Cypress」のタブはPSoC5LPの中に作れるもの

「off-chip」のタブはPSoC5LPに接続するもの が入っています。

タブに入っているファイルの中にたくさんのコンポーネントが入っているので、
コンポーネント一つ一つを白い絵の中にドラッグアンドドロップして
PSoC5LPを含めた全体の機能を組み立てていきます。


さて、「off-Chip」タブをクリックして
「DioDes」「Passive」「Power」のファイルの中から「LED」「Resistor」「Ground」を白い中心にドラックアンドドロップしましょう。
1回クリックすると右下に「今選んだコンポーネントはこれ」って表記が出ます。


それが終わったら、「Cypress」タブをクリックして
「Ports and Pin」のファイルの中から「Digital Output Pin」を白い中心にドラックアンドドロップしましょう。

主要なものが揃うとこんな感じ。

このままだと見づらいのでムシメガネのプラスマークで
見やすく何度かクリックして、

なんとなく一列になるように
マウスポインタでプレスして移動させます。

PSoC5LP側の部品で、文字と部品が黒い文字で表されている。
今回の場合だと「Pin_1」はPSoC5LPが持ってる部品

PSoC5LP側の部品ではないけど接続されている部品は
部品と文字が青であらわされている。
今回の場合だとLEDとかの部品


移動が出来たら、「Pin_1」をダブルクリックします。
そうするとピンについての設定画面が出ます。

設定画面が出たら、「HW Commection」のチェックボックスを外します。
今回は使わないので。
あと他の部品とも接続(お絵かき)できるように「Show External Terminal」の
チェックボックスを入れます。
そうするとこんな感じ。

終わったら「OK」ボタンをクリックしましょう。

次に部品同士を結線させていきます(お絵かき)
コネクターボタンをクリックして、部品同士をつなげていきます。
つなげるとこんな形になります。
(青い四角がコネクターボタン)

おおまかな、PSoC5LPのデザインが終わったら
PSoC5LPの内部についての設定をしていきましょう。


[自分で付けた名前].cydwrをダブルクリックするとこんな感じの画面になります。


下にあるタブの中で設定していきます。

先ずは、ピンの設定をしましょう。「Pins」のタブにある右側のこまどに
「Neme」「Port」「Pin」って行があるので、
「Pin_1」の列と「Port」の行のプルダウンメニューを開きましょう。
使いたいX番ポートのX番目をクリックしましょう。
そうするとこんな感じになります。

(私はfreeSoCを使っているので、P15[4]をクリックしました。CQ出版の人はP6[7]を。PSoC5_EVBの人はP12[1]を。)

そしてもう一つ設定をします。
それは、PSoC5LPに「いくつのボルト数で動かすよ」を伝えないといけません。
なので、「System」のタブをクリックして、

右側のスクロールバーを下に移動させます。
移動させたら、「Vdd**(V)」の項目を3.3って入力します。

ここまで来たら1度ビルド(コンパイル)をします。
ここで1度ビルドをしておくと、プログラムを書くときの補助機能が動作しやすくなるのでします。

青い四角のビルドボタン押しずしボタンを1回押します。

すこし時間がかかるので、すこし待ちます。 
エラーが出なければ次に進みましょう。



「main.c」をダブルクリックしてページを開きましょう。
開いたら、少しスクロールして

for(;;){
<ここにプログラムを書きます。>
}

プログラムの中身は

        Pin_1_Write(1);
        CyDelay(500);
        Pin_1_Write(0);
        CyDelay(500);

今回は、500ミリ秒LEDをつけて500ミリ秒間消す。を
繰り返しさせます。
終わるとこんな感じになります。

書いている途中から「これ使うの?」みたいに
候補が出てくると思いますが、候補を使っても良いです。

もう1度ビルドボタンを押して、エラーが出なければ

データ完成 (/・ω・)/

実際に、PSoC5LPにデータを入れてみましょう。
USBケーブルをボードとパソコンをつなぎます。


つなぐと、「キコン!」って接続しましたアラートが2回聞こえたら


ビルドボタンの近くに書き込みボタンにぎりずしボタンを押して
書き込みましょう。(みどりの四角のボタン)

どうですか?光りました??


手数は多いかもしれませんが、プログラムの中身は
「3V流せ」
「そのまま」
「止めろ」
「そのまま」
だけです。
また、AVRや他の32bitマイコンだとながーい呪文を書くのですが
純正の環境なのに、Arduinoやmbedと似た感じで作れます。

「PSoC怖い」とか「えーPSoCぅ・・・」って言ってる人はどうでしょう?
そんなに怖がらなくても平気ですよ??



もしかしたら、副題で引っかかった人もいるかと
思いますが、~ほぼ、文字を書かないで同じ動作~も出来ます。
と言うか、今回はちょっと効率が悪いやり方でした。

次回は、PWMってなに?~結局ONとOFFなの?~