[[FrontPage]]

#contents

2013/02/16からのアクセス回数 &counter;

今日も大野さんの「アナログ・マイコン!?PSoCに目覚める本」の5章に挑戦します。

** 配線だけでポートをつなぐ [#n2e7f373]
大野さんの本は分かりやすく、デジタルブロックの紹介もPSoC Designerを使ったポートの結線方法から始まっています。

大野さんの本の図5-2の回路をブレッドボードに作成しました。

&ref(fig5_2.png);

PSoCのレジスタ番号とピンの関係をすぐ忘れてしますので、以下にPSoC1((CY8C29466-24PXI))のピン配置を以下にメモしておきます。

&ref(pin_layout.png);

ブレッドボードの配線は以下の様にしました。

&ref(B5_1.png);

*** PSoCのデジタルブロック [#j4853c3a]
PSoCのデジタルブロックの配線は、以下の様になります。

&ref(L5_1_Block.png);

*** プログラムを書き込み動作確認 [#af742bba]
準備ができたので、プログラムをPSoC1に書き込み、動作を確認します。

プッシュボタンを押すとP0[0]がGNDレベルになり、その値がP2[0]につながっているので、
LEDが点灯します。

プッシュボタンを離すと10KΩの抵抗でプルアップされ、LEDは消灯します。

** もう一つの結線(インターコネクト) [#g447a377]
次の例題には、インターコネクトを使った結線方法が紹介されています。

GIE0をダブルクリックするとでてくる設定でInterconnectの欄にInputToOutputを指定すると、

&ref(GIE0_setting.png);

以下のようにGIE0とGOE0が線で結ばれます。

&ref(L5_2_Block.png);

** デジタルバッファを使う [#ze5775ee]
次に紹介されているのが、デジタルバッファを使った例です。

回路は、以下の様になります。

&ref(fig5_8.png);

ブレッドボードの配線は以下の様にしました。

&ref(B5_3.png);

デジタルブロックで、ユーザモジュール(Misc Digitalカテゴリ)からDigBufをダブルクリックで配置します。

DigBuf_1のパラメータは以下の様にします。

&ref(DigBuf_param.png);

結線は、以下の様にします。

&ref(L5_3_Block.png);

ユーザモジュールを使っているので、Start関数を呼ぶ必要があります。

main関数を以下の様にします。
#pre{{
void main(void)
{
	// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
	// Insert your main routine code here.
	DigBuf_1_Start();
}
}}

** アナログからデジタルにつなぐ [#ac3a5614]
これぞPSoCと思わせる例題がレッスン5_4の「アナログ・ブロックからディジタル・ブロックへ入力する」でした。

以下の様な回路をブレッドボードに組み立てます。

&ref(fig5_10.png);

ブレッドボードは以下の様にしました。

&ref(B5_4.png);

この例は、アナログの信号をCOMPモジュールを使ってAGNDと比較し、その結果をDigBufに出力するものです。
最初にDigBufを配置します。Output1をRIO[0]に出力し、GOE0と結線し、p2[0]に出力します。

&ref(L5_4D_Block.png);

DigBufのパラメータ設定で、input1にComparatorBus_0をセットします。

&ref(L5_4_DigBuf_param.png);

次にアナログブロックにコンパレータを配置します。
ユーザモジュールのAmplifier->COMPをダブルクリックCOMPZを選択し、一覧したのOKボタンを押します(画面が小さいとここが分かりにくい)。

COMPモジュールのinputという文字をダブルクリックすると、以下のinput選択画面がでますので、AnalogColumn_inputMUX_0を選択します。

&ref(comp_input.png);

入力ポートには、P0[1]を選択します。

これで、ブロック図の設定は完了です。

main.cに以下の2行を追加します。

#pre{{
void main(void)
{
	// M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
	// Insert your main routine code here.
	DigBuf_1_Start();
	COMP_1_Start(COMP_1_HIGHPOWER);
}
}}

プログラムを書き込んで実行すると、半固定抵抗を回していくとLEDが点灯することを確認できました。

こんなに簡単にアナログとデジタルを融合できるとはPSoCはすごいです!


** コメント [#lcdd875f]
#vote(おもしろかった[0],そうでもない[1],わかりずらい[0])
#vote(おもしろかった[0],そうでもない[1],わかりずらい[1])

皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc