|
|
|
↓準備中です。 |
|
||||||||||||
さて次は、数を数える(スイッチを押すたびにカウントアップする)ようなものを作ってみます。 ここでは、時計として動かすことを考えるので、0〜59までカウントアップし、59の次はまた0に戻るという動作にします。 私たちが普段使っている数字は10進数(0〜9の10個の数字を数えると、1桁繰り上がる)ですが、ここでは2進数(0と1の2個の数字を数えると、1桁繰り上がる)で考えます。2進数の0と1が、電気信号があるか無いかで表すことができ、今回使う予定のニキシー管ドライバの“74141”の入力も2進数を使うので、非常に都合がいいのです。 今回も、前回と同様、“System Level Design”という方法で、“State Machine”と“Table Lookup”の組み合わせを使います。 |
|||||||||||||||
|
|||||||||||||||
|
|
10進数の0〜9を、2進数では左の表のように、4ビット(4桁)の0、1で表します。 |
|||||||||||||
|
10進数 |
2進数 |
|||||||||||||
0 |
0000 |
||||||||||||||
1 |
0001 |
||||||||||||||
2 |
0010 |
||||||||||||||
3 |
0011 |
||||||||||||||
4 |
0100 |
||||||||||||||
5 |
0101 |
||||||||||||||
6 |
0110 |
||||||||||||||
7 |
0111 |
||||||||||||||
8 |
1000 |
||||||||||||||
9 |
1001 |
||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
今回も、「PSoCマイコン・スタートアップ」という参考書に付属の基板をユニバーサル基板に載せ、LEDとタクトスイッチを実装した基板を使いました。 |
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
前回の、“先ずは試し、簡単なプロジェクト(タクトスイッチを押すたびに2個のLEDを交互に点灯させる)”と同様、“System Level Design”で組んでいきます。
(“System Level Design”の組み方の詳細は、こちらを参考にして下さい。)(参考になるかわかりませんが・・・(^^;)ゞ) |
|||||||||||||||
|
|||||||||||||||
起動したら先ず、入出力デバイスを選んで配置をします。 入力デバイスはタクトスイッチ(プッシュスイッチ)が1個、出力デバイスはLEDが7個です。 タクトスイッチは、「Inputs」カタログの、(tactile \ Button \ Normally Open \ Internal Pulldown N_O)を選択します。 |
|||||||||||||||
LEDは、「Outputs」カタログの、(Display \ LED \ Single Color \ On/Off)を選択します。 ←左の図は、入出力デバイスを配置したところです。 |
|||||||||||||||
|
|||||||||||||||
さて、先ほど、出力デバイスのLEDを7個配置しました。このLED7個を使って、0〜59を2進数で表します。LED1個が1ビットと考え、7個の内4個で1の位の0〜9を表し、あとの3個で10の位の0〜5を表します。2進数で4ビット目を使うのは10進数の8からなので、今回5までしか使わない10の位では、3個(3ビット)あれば表すことができます。 |
|||||||||||||||
|
|||||||||||||||
まずは、1の位から作ります。 使うのは、ステートマシンとテーブルルックアップの組み合わせです。 まずは、ステートマシンからです。 |
|||||||||||||||
ステートマシンを選択し、名前を“control_1”とします。 “0”から“9”までのステートを作ります。ただし、ひとつの数字に対し、タクトスイッチが“ON”になった時に移り変わるステートと、“OFF”になった時に移り変わるステートのふたつを作ります、例えば、“on_1”、“off_1”といった感じで、合計、20個のステートを作ります。(これがけっこうめんどい。。) |
|||||||||||||||
タクトスイッチがON、OFFするたびに、ステートが遷移するように設定します。例えば、“off_0”ステートから“on_1”ステートに遷移するには、“sw_1== sw_1_On”とし、sw_1がONするとステート“on_1”に遷移するというように条件付けをします。 |
|||||||||||||||
次の、ステート“on_1”からステート“off_1”に遷移するには、条件として“sw_1== sw_1_Off”とします。 |
|||||||||||||||
遷移の条件付けができたステート間は、このように矢印で結ばれます。 つまりは、タクトスイッチ“sw_1”がON状態になると、“on_○”スレートに遷移し、OFF状態になると、“off_○”スレートに遷移するように条件付けをします。 |
|||||||||||||||
全てのステートが結ばれました。 |
|||||||||||||||
“OK”をクリックすると、sw_1とcontrol_1が橙色の線で結ばれます。 これで、ステートマシンの設定は完了です。 続いて、テーブルルックアップで、ステートマシンとLEDの関連付けをします。 |
|||||||||||||||
さて、7個配置したLEDは、前述したように、4個を使って1の位の0〜9を表し、3個を使って0〜5を表すように使います。まず、LED1を使って、1の位を表す4桁の、1桁目(“2進数で0〜9を表す。”で示した表の、2進数のいちばん右の桁)を表します。 “2進数で0〜9を表す。”の表で分かるように、2進数の1桁目は10進数の偶数が0、奇数が1になっています。なので、ステートマシンで作った“control_1”のステートで、偶数のステートの時は“0”(LEDがOFF)、奇数のステートの時は“1”(LEDがON)とします。 |
|||||||||||||||
“LED_1”で、“Table Lookup”を選びます。 |
|||||||||||||||
“Select Input(s)”で“control_1_state”を選びます。 |
|||||||||||||||
ステートマシンで作ったステートと、“OFF”と“ON”の欄が表示されるので、ステートをONとOFFに振り分けていきます。ステートは、“on_1”、“off_1”といった感じにひとつの数字につき、ふたつ作っているので、“on_1”、“off_1”はON、“on_2”、“off_2”はOFFといったように、計20個のステートを振り分けます。 |
|||||||||||||||
全て振り分けたら“OK”をクリックし、LED1が1の位として設定完了です。 これと同じ要領で、LED2を2桁目、LED3を3桁目、LED4を4桁目として設定します。 |
|||||||||||||||
←2桁目・・・ 10進数の0、1、4、5、8、9が0で、2、3、6、7が1です。 |
|||||||||||||||
←3桁目・・・ 10進数の0、1、2、3と8、9が0で、4、5、6、7が1です。 |
|||||||||||||||
←4桁目・・・ 0〜7が0で、8、9が1です。 |
|||||||||||||||
control_1とLED1〜LED4が橙色の線で結ばれました。
これで、1の位の設定が終わりました。 |
|||||||||||||||
|
|||||||||||||||
次は、10の位の設定をします。基本的に、1の位と同じです。 |
|||||||||||||||
1の位と同じように、ステートマシンとテーブルルックアップの組み合わせを使います。 まずは、ステートマシンです。 ステートマシンを選択し、名前を“control_2”とします。 |
|||||||||||||||
ステートを、0〜5まで作ります。10の位は5までしか表さないので、ステートも5までです。 “control_1”と同じように、“on_○”と“off_○”を作ります。 |
|||||||||||||||
“control_2”の設定です。 “control_2”は、“control_1”がステートを1周すると、次の数字のステートに移動するようにします。 |
|||||||||||||||
“off_○”から“on_○”に移動する条件として、“control_1_state==control_1_state__on_0”とします。つまり、“control_1”のステートが、“on_0”になれば移動するという条件です。次に“on_○”から“off_○”に移動する条件は、“control_1_state==control_1_state__on_5”としています。“control_1”のステートが、“on_5”になれば、移動するという条件にしていますが、 “control_1”の“on_0”ステートから1周してまた“on_0”になるまでに“control_2”のステートが“off_○”に移動すればいいので、“on_5”のステートにこだわらず、“on_0”ステート以外ならどのステートでもいいです。 |
|||||||||||||||
全てのステート間を設定して、OKをクリックすれば、“control_1”と“control_2”が橙色の線で結ばれます。 ステートマシンの設定完了です。 |
|||||||||||||||
次は、テーブルルックアップで“control_2”とLED5〜7を結びます。これは、前述した1の位の設定と同じなので割愛させていただきます。1桁目〜3桁目までで、4桁目はありません。 ←テーブルルックアップの設定が出来た!の図です。 |
|||||||||||||||
これで、デザイン作業は完了です。 次は、ビルドで、プログラムを構築させ、実際にマイコンに書き込みます。 |
|||||||||||||||
|
|||||||||||||||
さて、ビルド作業です。これは前プロジェクトの、“まずは試し〜簡単なプロジェクト〜”でも書いているので、詳細は割愛させていただきます。 |
|||||||||||||||
使うマイコンについての設定ですが、「PSoCマイコン・スタートアップ」という参考書に付属の基板を使うので、この基板に載っている“CY8C21434”を選びます。 詳細設定は、 Supply Voltage:5V Sample Rate:Free Run Flash Interface:デフォルトのままEnable Reserved ROM Size:デフォルトのまま2 にします。 |
|||||||||||||||
次は、ピン配置です。PSoC Designerが勝手に空いているピンに各パーツを割り振ってくれますが、“Unassign”をクリックすると、割り振られていたパーツがリセットされ、右上の表に移動するので、手動で割り振り直す場合は便利です。 |
|||||||||||||||
手動で割り振りをし直しました。 |
|||||||||||||||
“next”をクリックすると、ビルドが始まります。 ・・・ ・・・暫く待っていると、“0_error(s)”と出て、ビルドが終わります。 |
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
●0〜59カウントアッププロジェクト 〜そのG〜(PSoCに書き込み) |
|||||||||||||||
これは、“まずは試し〜簡単なプロジェクト〜”と全く同じなので、割愛させていただきます。 |
|||||||||||||||
|
|||||||||||||||
●0〜59カウントアッププロジェクト 〜そのH〜(実際に動かしてみる) |
|||||||||||||||
“まずは試し〜簡単なプロジェクト〜”の時と同様に、PCに挿しているMini Progを介して電源を供給し、動かしてみた図が、こんな感じです。 黄色く光る7個のLEDで0から59を2進数で表し、基板手前、指の下のタクトスイッチを押すと、ひとつずつカウントアップしていきます。(59までいくと、0に戻ってまた数えます) |
|||||||||||||||
以上で、“0〜59カウントアッププロジェクト”は終わりです。次は、実際に作ったニキシー管時計に入れたプログラムを紹介します。
(今暫くお待ちください) |
|||||||||||||||
|
|
↓準備中です。 |
|