「平成22年度 第7回熊本県高校生ものづくりコンテスト 電気系電子回路組立部門」のプログラミング
「課題3.」の回答例を示します。
「課題3.」は、三つ((1)、(2)、(3))に分かれています。
課題の提示方法としては、予め用意したソースファイルに、プログラムを追加する箇所を用意し、競技者に
そこを埋めてもらうものです。
「課題3.(1)」は、初期化の直後の様子を示しています。
------
■初期状態の確認
《電源投入前の設計製作回路の状態》
VR:任意、SW1:下向き(↓)、SW2:そのまま、SW3:下向き(↓)
《電源投入時の制御対象回路の状態》
CPU、制御対象回路の電源をオンにした時、電源表示のLED以外は、すべて消灯していること。
------
「課題3.(2)」の動作をする際、電源投入時に、この状態になれば、それでよいとなります。
「課題3.(2)」は、次の通りです。
------
■課題:SW1(トグルスイッチ)が上向き(↑)で、VRを操作すると7セグメントLEDが00~50まで変化する
こと。
0)初期状態:LED1、LED2は消灯している。
1)SW1が下向き(↓)の時、VRを操作しても7セグメントLEDは消灯のままで何も表示しない。
2)SW1を上向き(↑)にする。そのとき、VRの位置により7セグメントLEDが表示される。
3)7セグメントLEDの表示とVRの関係は、次の通り。
VR:左いっぱいに回す。 7セグメントLED表示:00
VR:右いっぱいに回す。7セグメントLED表示:50
VR:左~右途中。7セグメントLED表示:01~49
4)前項2)、3)の状態において、SW1を下向き(↓)にすると、7セグメントLEDは消灯する。
注:SW2、SW3を操作しても、上記操作と状態に何も影響はない。
------
この課題のプログラミング要領として、次の内容を添えています。
事務局提供のプログラムソースファイル:課題3.(2)
------
事務局提供のプログラムソースファイル中で下記コメントのところに、抜けている処理を追加し、プログ
ラムを完成させる。
/* ------------------------------------- */
/* ここにプログラムし、課題を完成させる。*/
/* ------------------------------------- */
―プログラム仕様―
AD変換結果(10bit)を電圧値に変換(浮動小数点値):fVofAD
=電圧変換係数xAD変換の出力
注:この式で(VRを右いっぱいに回し)最大値が課題の通り(50)にならない時、0.05を加算する。
浮動小数点の電圧値「fVofAD」を整数2桁へ変換: iVofAD
=(整数型へキャスト)(浮動小数点の電圧値x10)
提供されているソースファイルでSW1、VRの動作が課題の通りの動きを実現するようになっているか確
認する。
------
この課題で上記仕様に従い、プログラムが抜けているところを埋める例は次の通りです。
------
/*---ここから---*/
/* AD変換結果を電圧値に変換(10bit版:浮動小数点値)*/
fVofAD = VREF10BIT * ADConv() + 0.05;
/* AD変換結果を電圧値に変換(10bit版:整数値) */
iVofAD = (int)( fVofAD * 10 );
/*---ここまで---*/
-----
以上が「課題3.(2)」の回答例です。
次に「課題3.(3)」を示します。
------
■課題:前項(2)-3)において、表示の変化が05単位で変化すること。
例えば、VRを左いっぱい回した状態から、右方向へ回した時、
(VR左いっぱい)00→05→10→15→20→・・→35→40→45→50→50(VR右いっぱい)
という表示になること。
注:SW2、SW3を操作しても、上記操作と状態に何も影響はない。
------
この課題のプログラミング要領として、次の内容を添えています。
事務局提供のプログラムソースファイル:課題3.(3)
------
事務局提供のプログラムソースファイル中で下記コメントのところに、抜けている処理を追加し、プログ
ラムを完成させる。
/* ------------------------------------- */
/* ここにプログラムし、課題を完成させる。*/
/* ------------------------------------- */
―プログラム仕様―
AD変換結果(10bit)を電圧値に変換(浮動小数点値):fVofAD
=電圧変換係数xAD変換の出力
注:この式で(VRを右いっぱいに回し)最大値が課題の通り(50)にならない時、0.05を加算する。
浮動小数点の電圧値「fVofAD」を整数2桁へ変換: iVofAD
=(整数型へキャスト)(浮動小数点の電圧値x10)
電圧値を5刻みへ正規化する。
3以下は、0とする。
3より大きく、5以内は、5とする。
5より大きく、10以内は、10とする。
10より大きく、15以内は、15とする。
15より大きく、20以内は、20とする。
20より大きく、25以内は、25とする。
25より大きく、30以内は、30とする。
30より大きく、35以内は、35とする。
35より大きく、40以内は、40とする。
40より大きく、45以内は、45とする。
45より大きいと、50とする。
前項「課題3.(2)」を完成させ、そのmain関数をよく見る。
------
この課題で上記仕様に従い、プログラムが抜けているところを埋める例は次の通りです。
------
/*---ここから---*/
/* AD変換結果を電圧値に変換(10bit版:浮動小数点値)*/
fVofAD = VREF10BIT * ADConv() + 0.05;
/* AD変換結果を電圧値に変換(10bit版:整数値) */
iVofAD = (int)( fVofAD * 10 );
if( iVofAD <= 2 ) iVofAD = 0; /* 電圧値を5刻みへ正規化する。3以下は、0とする。 */
if( 2 < iVofAD && iVofAD <= 5 ) iVofAD = 5; /* 3より大きく、5以内は、5とする。 */
if( 5 < iVofAD && iVofAD <= 10 ) iVofAD = 10; /* 5より大きく、10以内は、10とする。 */
if( 10 < iVofAD && iVofAD <= 15 ) iVofAD = 15; /* 10より大きく、15以内は、15とする。*/
if( 15 < iVofAD && iVofAD <= 20 ) iVofAD = 20; /* 15より大きく、20以内は、20とする。*/
if( 20 < iVofAD && iVofAD <= 25 ) iVofAD = 25; /* 20より大きく、25以内は、25とする。*/
if( 25 < iVofAD && iVofAD <= 30 ) iVofAD = 30; /* 25より大きく、30以内は、30とする。*/
if( 30 < iVofAD && iVofAD <= 35 ) iVofAD = 35; /* 30より大きく、35以内は、35とする。*/
if( 35 < iVofAD && iVofAD <= 40 ) iVofAD = 40; /* 35より大きく、40以内は、40とする。*/
if( 40 < iVofAD && iVofAD <= 45 ) iVofAD = 45; /* 40より大きく、45以内は、45とする。*/
if( 45 < iVofAD ) iVofAD = 50; /* 45より大きいと、50とする。 */
/*---ここまで---*/
------
以上が「課題3.(3)」の回答例です。