[[FrontPage]] #contents 2013/02/11からのアクセス回数 &counter; ** PSoC1に挑戦 [#o6b75211] Raspberry Piではできないアナログ処理をPSoC1で補えたらと考えて、PSoC1に再挑戦することにしました。 トラ技で最初にPSoCの連載が始まった頃に少し使って見たのですが、何も記録に残していなかったので、 まったく記憶にありません。 PSoC Designerもバージョンを重ねて、使い勝手も変わったので手順をおさらいしながら始めることにしました。 ** アナログ・マイコン!?PSoCに目覚める本 [#q119776e] 昨年のトラ技オフ会でお会いした大野さんの「アナログ・マイコン!?PSoCに目覚める本」をベースに進めることにしました。 *** 実験ベンチ [#je0f76cc] PSoCに書き込むための実験ベンチをブレッドボードに作って置くと書き込みやちょっとした実験をするときに便利です。 大野さんの本では、MiniProgとの結線にワイヤー線を使っていますが、ハンダ付けを省略するために、桑野さんの「PSoCマイコン・トレーニングキット」に紹介されている方法で実験ベンチを作りました。 &ref(PSoC_base.png); *** LED点滅実験 [#oc92aafc] 先の実験ベンチには桑野さんの本の図1-1で紹介されている以下のLED点滅実験回路が組み込まれています。 &ref(fig_1_1.png); ** PSoC Designerを使う [#m1a32c21] PSoCのプログラムをするPSoC Designerも「PSoCマイコン・トレーニングキット」の時からバージョンアップを重ね、5.2となっています。 使い方も変っているので、大野さん方式でLED点滅のプログラムを作ってみます。 PSoC Designerでの処理は、以下の順で進めます。 + 新しいプロジェクトを作成 + グローバル設定 + 2個のPWM16モジュールを配置 + PWM16モジュールの設定 + 行出力線にPWMの出力結線し、これとグローバル出力線を結線 + グローバル出力線とピンを接続 + main.cの修正 + プロジェクトのビルド(コード生成とコンパイルを一緒に行う) + プログラムをPSoCに書き込む *** プロジェクトの作成 [#yb414c86] 最初にLED点滅のプロジェクトを作成します。File->New Project…を選択し、Name:にPWMLEDと入力してOKを押し、DeviceからCY8C29466-24PXIを選択してOKを押します。 大野さんの本を読むと、PSoCをかなり使いこなしているなぁと感じる部分が多々あります。 プロジェクトの作成後の初期画面は、以下の様にいくつもの設定画面が配置されています。これでは1個の画面のサイズが小さくなってしまい、設定値の入力時にもスクロールが必要です。 &ref(initial_screen.jpg); 大野さん方式では、Window->Auto Hide Allメニューを選択して、縦のタブに画面を隠し、必要に応じて画面を表示します。 ((以下の画面では、チップ画面とUser Modulesの画面が表示されています。)) &ref(auto_hide.jpg); *** グローバル設定 [#b1ed0cf9] 最初にGlobal Resourcesタブを選択してVC1~VC3の周波数の設定をします。 24MHzのシステムクロックをVC1にセットし、VC2=VC1, VC3=VC1/240とします。 &ref(GlobalSetting.png); *** PWM16モジュールの配置 [#ua1d25c7] User Modules画面からPWMsを開き、PWM16をダブルクリックするとPWM16がチップ画面の左上に配置されます。配置場所は、マウスで変更することができます。 これでPWM16_1という名前で1個目が配置されました。 &ref(place_PWM16.jpg); 同様にPWM16_2を配置します。 *** PWM16モジュールの設定 [#qae3c250] モジュールの設定は、モジュールをマウスで選択し、Parameters-モジュール名タグをクリックして入力します。 &ref(Parameters_PWM16_1.png); PWM16_1, PWM16_2の設定は以下の様にセットします。 &ref(PWM16Setting.png); *** PWM16と行出力線、グローバル出力線の配線 [#qae3e1a3] PWM16モジュールの設定で、PWM16モジュールと行出力が結線されます。 最初にPWM16_1の出力線をグローバル出力線と結線します。マウスを行出力線RO0[3]の上に持って行くと、 赤くなりますので、ここでダブルクリックをするとRow_0_Output_3のダイアログが表示されます。 入出力セレクタをダブルクリックしてRow_0_Output_3を選択し、次に論理演算ユニットをダブルクリックしてAを選択、 最後に上から2番目の出力バッファをダブルクリックしてGlobalOutEven_3を選択します。 &ref(RowSetting.png); *** グローバル出力線とピンを接続 [#bd4586fc] 最後の設定が、グローバル出力線とピンを接続する部分です。 最初にGOE[3]をPort0[3]に接続します。GOE[3]の出力線にマウスを移動すると赤くなりますので、 ここでダブルクリックして出力ピンをセットします。ここでは、Port_0_3を選択します。 同様にRO0[0]をPort_0_4に接続します。 &ref(GOE_PinSetting.png); *** main.cの修正 [#j334b9e9] PWM16モジュールの開始をmain.cに追加します。 Wrokspace ExplorerのPWMLED->Sources以下のmain.cをダブルクリックして、 &ref(Workspace_Explorer.png); main.cのmain関数を以下の様に修正します。 #pre{{ void main(void) { // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts // Insert your main routine code here. PWM16_1_Start(); PWM16_2_Start(); } }} *** プロジェクトのビルド [#m02898cc] プログラムの作成には、BuildメニューからGenerate/Build 'PWMLED' Projectを選択します。 無事プログラムが作成されるとOutputに以下の様なメッセージが出力されます。 &ref(Output.png); *** プログラムをPSoCに書き込む [#vbaff1b5] PSoC MiniProg1をブレッドボードに接続し、USBコネクターに差します。 ProgramメニューからProgram Partを選択すると設定画面が表示されます。 &ref(Program_Part.png); Port SelectionでMiniProg1が選択されているのを確認して、書き込みボタンを押します。書き込みには40秒ほどかかります。 無事書き込みが終わったら、電源ボタンを押してPSoCに電源を送ります。 無事2個のLEDが点滅しました。 &ref(Running.png); ** コメント [#h0959f19] #vote(おもしろかった[23],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[24],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha