- 追加された行はこの色です。
- 削除された行はこの色です。
[[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(おもしろかった,そうでもない,わかりずらい)
#vote(おもしろかった[0],そうでもない[1],わかりずらい[1])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha