俺の電子工作室
 俺の電子工作室 ⇒ 電子工作を始める
  ⇒⇒
 PSoCで遊んでみよう
本文へジャンプ
 
 このページでは以下の様なステップで論理回路を取り上げます。
[1] ちょっと復習を
   前章の「新しいプロジェクトを作る」の所で作ったプロジェクトについて少し説明を加えます。
[2] 電子工作の下準備
   評価ボードをブレッドボードに装着して試作用のプラットフォームを作ります。
[3] CPUを少し働かせる
   スイッチの状態をプログラムで読み込んでそのまま出力してみます。
 
 [1] ちょっと復習を

 前章の「新しいプロジェクトを作る」の所で作ったプロジェクトについて少し触れておく。
 右上の図はプロジェクトの等価回路である。この様な書き方をすれば分かり易いと感じる人が多いと思う。
 入力バッファと出力バッファはそれぞれ入力ピンと出力ピンのモジュールに含まれている。右下の図はPSoC Creator で入力ピンモジュールの構成設定した時に使った画面である。Drive Mode にResistive Pull Up を設定すると画面中央の様な入力ピンの等価回路が表示される。
 上の回路図と向きが逆になっているがPin の所にPull Up 抵抗がつながり、左向きにバッファを通してPSと名付けられた信号がPSoC内部へつながっている。今回はこの信号が出力バッファに直接つながっている。緑色矢印のDR と名付けられた信号は上のトランジスタがON、下のトランジスタがOFFとなる様にLow(Vss/GND)が加えられる。
 試しにDrive Mode にResistive Pull Down を設定すると上の抵抗がなくなって、下にPull Down抵抗がついた回路に変わる。PSoCの内部回路で抵抗がなくなってしまうわけではない。内部回路では上にも下にも抵抗が配置されている。回路図上表示されていないがそれぞれの抵抗の両端にトランジスタがつながっていて、Pull Up の場合は下側の抵抗についているトランジスタをONすることで抵抗を短絡して見かけ上、等価回路と等しくする。またPull Down の場合は、上側の抵抗の両端につなげられたトランジスタをONすることで見かけ上Pull Downにして、DR信号(緑)は下のトランジスタだけをONさせるためHigh(Vdd)が加えられる。
 Drive Mode をいろいろ変えてどんな種類の回路があるか眺めてみよう。どの回路も等価回路には現れない仕掛けを使って同じ回路から様々な機能を実現している。見終わったら必ず「Cansel」ボタンで終了する
 ついでに出力ピンの方もどんな種類の回路があるか眺めてみよう。
 入力ピンの設定画面を出す方法を忘れた人はこちら。
 
 [2] 電子工作の下準備

(2-1) プラットフォームの完成形
 評価ボードにピンヘッダをハンダ付けし、ブレッドボードに挿して右の様な試作用のプラットフォームを作る。
 こうなると直接パソコンのUSBポートに差し込むのは難しくなるの
USB延長ケーブルを使って接続する。


 以下順次手順を説明するが、ハンダ付けにあまり自信のない人には練習のページを用意した。



 (2-2) ブレッドボードの仕組み
 ブレッドボードの各穴は内部で緑の線で示す様につながっている。部品の足やジャンパーワイヤの足を差し込むことにより、内部で緑の線の示すラインでつながり、配線が出来る仕組みになっている。




 (2-3) 余分な電源ラインを取り外す
 +/−の電源ラインが両端にあるがこの部分は切り離しができる様になっている。最終的に上の写真の様にするので二枚上下に方向を揃えて置き、それぞれ内側にくる部分を取り外す。
 裏側の粘着シートを切れ目に沿ってカッターで切り、上下にずらすと接合部が外れる。
 (2-4) ピンヘッダを固定する
 先ず、ピンヘッダを評価ボードのピン数に合わせてニッパーで切断する。一本は30ピン、もう一本は25ピンで切断する。短い方はMiniPlog3用のピンを空けておくためである。ピンヘッダを固定するために評価ボードの幅に合わせて差し込む。この時一番端のピンはクリップを写真の様に挟み込んでおく。ブレッドボードは熱に弱いと言われているので放熱効果を狙ったものである。後で抜き取る時も梃子の様に使えば無理な力がかからない。
写真は4ピンだけずれているが5ピンずらすのが正しい。写真を取ったあと気づいたもので・・・
 切り取って余ったピンヘッダは後で使うので保管しておく。
 (2-5) ピンヘッダに評価ボードを仮付けする
 評価ボードの穴をピンに合わせて差込み、矢印で示す四隅だけハンダ付けする。ハンダ付けするピンにクリップが触れる様にしておくとブレッドボードに熱負荷がかかりにくい。ピンヘッダの短い方の足が基板の厚さに比べて短いので、ピンによく熱が伝わる様にコテ先を穴の中に突っ込む様な気持ちでよくハンダを流し込む。一旦盛ったハンダが穴の中に吸い込まれる様な感じがあれば完璧である。ここまで出来たらブレッドボードから基板を外す。
 (2-6) 残りのピンをハンダ付けする
 ピンヘッダが曲がっていないか、根元まで充分刺さっているかを確認する。必要あれば修正した上、残りのピンを順次つけていく。左のUSBシリアル変換部はつけない方がよい。特に基板を固定しなくても四隅が固定されているので机の上に置いて作業しても難しくはない。ただ、上で述べたようにピンの長さが短いのでランドと呼ばれる基板上の丸い銅箔の部分にはハンダが付いているがピンに届いていないということもありうるので気をつける。

 (2-7) ブレッドボードの裏から補強する。
 一番上の写真の様にブレッドボードの電源ラインを外側にして並べ、それぞれの一番端の列にピンヘッダを差し込む。このままでは裏側が固定されていないので不安定である。裏側に付いている粘着テープで板を貼り付けて補強する。
 表と裏で固定するので板はぺらぺらのものでも結構安定する。例えばコンビニ弁当の蓋のようなものでもよい。平らなものを探してきて張り付ければよい。アクリル板の様なものがあればそれにこしたことはないが。
 (2-8) 電源ラインを配線する
 電源ラインを配線したら準備完了である。評価ボードにはピンの名称が印刷されているのでそれを見ながら(虫眼鏡が必要かも)部品表のジャンパーワイヤを使って配線する。ジャンパーは両端の被覆を剥いてあってそこから直角に曲がっているので適当な長さのものを探して曲がった部分をブレッドボードの穴に差し込む。
 評価ボードの上の左端が「P4VDD」となっていてUSB電源の5Vにつながっている。これを赤い「+」ラインに接続する。下側には5Vがないので上の+と下の+をつなげる。
 「P4VDD」の隣が「GND」となっていてここに0Vがつながっているので青い「−」ラインとつなぐ。評価ボードの下側にも左端に「GND」があるのでこれを下の「−」ラインにつなぐ。
 
 
 [3] CPUを少し働かせる
  前回作ったプロジェクトは入力と出力を直接つなげていた。今回はこれをを変更して入力の状態をソフトウェアで読み込んで、出力ピンに出力するという方式にする。
 (3-1) ブレッドボードに部品を取り付けて配線する
 ブレッドボードにスイッチとLEDを取り付ける。スイッチの足はラジオペンチで真っ直ぐに伸ばす。裏からみると溝があって、溝をはさんで接点が配置されている。ダイオードの端子には図の様に名前がついている。覚えにくいので「ノードソードら(電流が)流れる」⇒「アから流れる」と覚える(笑)。リード線の長い方がカソードになっている。抵抗はブレッドボードの穴に合わせて折り曲げて適当な長さに切る。
 スイッチは溝が縦の方向になる様にして下の段の適当な所に取り付ける。評価ボードの 2.0 の端子からスイッチの一方の端子にジャンパーで接続する。スイッチのもう一方の端子から「−」ラインに接続するが、後で少し変更するので長めのジャンパーを使う
 抵抗はボードの 1.5 の端子から上の段へ接続する。抵抗とLEDのアノードを、カソードを「−」ラインに接続する。


 
(3-2) 回路図を移動して作業スペースを作る
 OnTamaプロジェクトをPSoc Creator で開く。TopDesign.cysch タブの回路図を開いて、回路左上をクリックした後右下へドラッグして回路全体を選択状態にする。回路の一部をクリックして回路全体を画面中央にドラッグする。このようにグループ選択をして移動することが出来る。
 
 (3-3) 外付けのスイッチとLEDを定義する
 評価ボード上のスイッチとLEDがつながっているポートに、代わりにブレッドボード上の外付けのスイッチとLEDをつなぐ様に変更する。スイッチを評価ボードの 2.0 と書かれた端子に、LED を 1.5 の端子に接続する。
 入力ピンをダブルクリックしてピンの設定画面を表示する。「Name」の欄をP0_7 ⇒ P2_0 に変更する。同様に出力ピンを選んで P1_6 ⇒ P1_5 に変更する。
 2.0 と P2_0 と P2[0] は同じ意味合いであってポート2 のビット0 という意味である。
  上の操作ではピンの名称を変えただけなので内部接続の定義を変更する。
 OnTama.cydwr のタブを選んで右側の窓でみると、「Name」の欄は変更されたが「Port」の欄は以前の値、P0[7], P1[6]のままになっている。すなわち接続の定義は変わっていない。
 LED1 を P1[5] へ、SW1 を P2[0] へドラッグして変更し、「Port」の欄の表示が変わることを確認する。
 
 (3-4) ステータスレジスタとコントロールレジスタを定義する
 TopDesign.cysch タブへ戻って入力ピンと出力ピンをつないでいる配線をクリックしてDelete キーで削除する。
 右窓のCypressタブの「Digital」⇒「Registers」の下の Control Register と Status Register を回路図の空いているところへドラッグする。
 入力回路と出力回路のそれぞれをブロック移動して右図の様に配置する。
 小さくて見えにくいが左側が Status Register 右側が Control Register である。
  ステータスレジスタは電気信号の状態をCPUがプログラムで読み込めるように '1' 又は '0' に変換する仕組みである。CPUが一度に読み込める信号は8本なので「Inputs」は 8 となっている。今回読み込む信号は 1 本なのでここは 1 と書き換える。また「Name」のところは Status_Reg_1 ⇒ Status_Reg に書き換えて「OK」をクリックする。
 コントロールレジスタは逆にCPUが書き込んだ '1' 又は '0' の情報を High 又は Low の電気信号に変換する仕組みである。同じように「Inputs」を 1 とし、「Name」をControl_Reg_1 ⇒ Control_Reg に変更する。
  「Inputs」を 1 に変更すると各レジスタの絵はサイズダウンする。入力ピンとステータスレジスタ、コントロールレジスタと出力ピンを配線で結ぶ。(回路図左隣の「Wire Tool」ボタン又は「W」キー)
 Status Reg の clock は使わないが clock 端子に何もつながっていないとコンパイルエラーになるので 0V に落としておく。右側 Cypress タブの「Digital」⇒「Logic」 の下の Logic Low をドラッグして clock に接続する。ドラッグして端子と端子をくっつければ接続される。
 
 (3-5) プログラムを変更する
 main.c タグでプログラムの画面を表示する。
 for( ; ; ) の後ろの大カッコの中に(21行目)下記の一行を追加する。行頭の空白は Tab が 2 つである。行の後ろの「;」を忘れないように!

       Control_Reg_Write( Status_Reg_Read() ) ;

 Control_Reg_Write() と Status_Reg_Read() はそれぞれのコンポーネントのために用意されたAPI (Application Programming Interface) と呼ばれる関数である。関数名の先頭の部分(青色)は上で「Name」に設定した名称と同じにしないといけないので注意のこと。関数というのは文章(プログラム)の集まりで特定の機能が実行出来るように構成された一つの塊りである。と、今のところは理解しておけばよい。
 Status_Reg_Read() はStatus_Reg につながった 8 本の電気信号の High/Low の組み合わせによって決まる数値を示す。
 Control_Reg_Write() はカッコの中に与えられた数値に従って Control_Reg の 8 本の信号線に High/Low の組み合わせを出力する。
 上の一行は Status_Reg_Read() が示す数値に従って Control_Reg から信号を出力する。言い換えると Status_Reg に加えれられたHigh/Low の組み合わせをそのままControl_Reg に出力する。Status_Reg もControl_Reg も"0"という番号のふられた同じ系列の信号線(bit0)を使っているので、つまりは入力ピンの状態がそのまま出力ピンに与えられることになる。
 上の「数値」と「High/Low の組み合わせ」の関係がよくわからない人には説明のページを用意した。この中では 2 進数に関連する事柄を説明しているので覗いてみて欲しい。
 【補足】
 C言語でプログラムを書く場合、行の終わりにセミコロン「;」を必ずつけねばならない。コンパイラがプログラムを解釈する場合に、これによって「ひとつの命令文の終了」を判断するためである。その代わり、ひとつの命令文が長くなる場合、見やすい様に複数の行に分けて書く事ができる。
 セミコロンを書き忘れた場合、コンパイラが出すエラーメッセージが示す行が別の(正しい)行を指すことが多い。わけのわからないエラーメッセージが出たときは、まずセミコロンの書き忘れがないかチェックする。エラーの原因が非常にわかりにくくなるので書き忘れのないように気をつける。
 
(3-6) ビルドして動作確認しよう
   ここまで来たら Build して、プログラムをボードに書き込んでみよう。このプロジェクトは配線の部分をソフト(プログラム)に置き換えただけなので前回のプロジェクトと動作が同じになれば正解である。
 
【ソフトとハード】
 電子工作の世界では、物理的な実体のないプログラムのことをソフト又はソフトウェアと呼び、物理的に存在する部品や配線のことをハード又はハードウェアと呼ぶ。

 【補足】
コンパイル・ビルドについて
 コンパイルやビルドという言葉が出てきたが説明するタイミングがなかったのでここで簡単に触れておく。
 プログラムは main.c の画面で見てきた通り、英文で記述される「C言語の文法に従ったある種の文章」である。CPUに対する命令(どう動くかを指示する)を記述しているのだが、このままではCPUは解釈できない。ちなみにこの形態のプログラムをソースプログラムと呼ぶ。
 CPUが解釈出来るのは 2 進数で構成される命令コードである。8 ビットCPUや 32 ビットCPUなどという言葉を聞いたことがあると思うが、例えば 8 ビットCPUであれば命令コードが基本的に 1 バイトの組み合わせで構成されている。命令コードはメモリの中に順番に記憶されていてCPUはこれを順番通りに実行する。ジャンプ命令で元に戻ったり先に飛んだりすることはあるがひたすら順番通りに実行する。この形態のプログラムをマシン語とか機械語と呼ぶ。
 ビルドはビルドツールを使ってソースプログラムを解釈してマシン語に翻訳するための作業である。コンパイルはソースプログラムを解釈する作業であり、コンパイラの種類によってはマシン語まで一気に翻訳するものもあるが、PSoC Creator で使っているコンパイラは中間言語と呼ばれるマシン語に近い形態の言語に翻訳する。PSoC Creator でコンパイルすると main.c というソースプログラムもコンパイルされるが、左窓に表示されているリソース構成のツリーの中の他のソースファイル(ソースプログラムが記述された拡張子 'c' のファイル)もコンパイルされる。ツリーの中に「Generated Source」という枝があるのでその下の方の階層を見てみると「xxxx.c」の様な名前のファイルが沢山あるのが分かると思う。これらはピンやステータス/コントロールレジスタ等を画面から定義した時に自動的に生成されたものである。この様に複数のソースファイルがあるので一旦中間ファイルを作って、つなぎあわせる(リンクという)のである。リンクは中間ファイルをつなぎあわせ、マシン語のレベルまで翻訳する。PSoC Creator では「Build All Projects」を実行すると、ビルドツールを使ってコンパイルからリンクまで一気に実行してくれる。この途中でソースプログラムに解釈できないところや文法にそぐわない所があるとエラーメッセージを出力して注意を促す。エラーメッセージにはエラーの発生した行番号が表示される。PSoC Creator ではエラーが出ると中央の窓に「Notice List」というタブが表示されその画面の右側に「File」(ソースファイル名)と「Error Location」(行番号)が表示される。ひとつ気を付けなければいけないのは行の最後に必ず付けなければいけない「セミコロン」を付け忘れた場合は別の行がエラー行として表示されることが多いので訳の分からないエラーが出たときはこの点を思い出して欲しい。
生成されたマシン語プログラムは Bootloader Host の画面から PSoC のフラッシュメモリに書き込まれる。


   
inserted by FC2 system