ものづくりBLOG blog page

第7回熊本大会コンテスト回答例-課題3.-

2010-06-17 (Thu) 00:39

「平成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)  事務局提供のプログラムソースファイル:課題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)  事務局提供のプログラムソースファイル:課題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)」の回答例です。

ものづくりBLOG

Blog Category

Blog Calendar

RSS 2.0