[[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