前回作ったプロジェクトは入力と出力を直接つなげていた。今回はこれをを変更して入力の状態をソフトウェアで読み込んで、出力ピンに出力するという方式にする。
|
(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 のフラッシュメモリに書き込まれる。
|