メインプログラム:ECOMON.c
プロセッサーエキスパート(PE)で設定した結果、下図の様なソースファイルが生成されます。初期設定は全て完了していますのでMAIN関数の含まれているECOMON.cのみを記述します。
メインプログラムは以下の関数から構成されます。
宣言部について
メイン関数
void main(void)
メインプログラムの手順は3つです。AD変換して、表示用に計算し、LEDを点灯する。以上の事を繰り返します。
AD変換はPEで生成したAD1.cの中にAD1_MeasureChan(引数1,引数2)という関数があります。戻り値がエラーコードとして与えられるのでERRレジスタに格納します。引数が2つ有りますが、引数1は0を入れます。引数2はADのチャンネルを指定します。これでAD変換が終了するとERRレジスタにOKを意味するコードが与えられて戻ってきます。AD変換値はADCRレジスタに格納されているのでXDATAレジスタにコピーして次のチャンネルを同じように変換します。Y軸とZ軸は今回は使用していませんが、将来の機能拡張を考慮して変換しています。
このマイコンのAD変換は10ビットですからVDDが3.3Vなので0vで”0”、3.3Vで”1023”となります。加速度センサーのX軸は水平の時にこの電圧範囲の中点である512となります。
基板の取り付けやケースの固定方法によっては若干の傾きがあるので、ケースを水平なテーブルの上に置いてデバッカーでXDATAレジスタを調べ、512になるようにオフセット”6”を加算しています。そして表示感度ですが最大が±1.5Gなのでまず、1/30にして走行して見ました。その結果はF1並みの性能を有していないとLEDを全部消すような加速ができませんでした。そこで感度を1/15に上げて走行すると停止からアクセル全開でLEDが赤のみとなり、2000回転以下の加速では緑のLED表示範囲に入る事が確認できました。2000回転を超えない加速はECOドライブの目安となりますので感度は1/15としました。
DATA = ((XDATA+6)/15)
オフセットは固定方法により変化する可能性もありますが、取り付けに工夫すれば変更しなくても問題ありません。感度を変更する時はオフセットも変わりますので一緒に変更する必要があります。感度については車の性能にもよりますが、急加速や急減速を避けるためのモニターですからあまり下げない方が良いと思います。
表示はバイナリーで記述してありますので”1”が点灯、”0”は消灯です。最後に入れたディレイは測定表示サイクルになります。今回は100mSとしました。
/*************
* メイン関数 *
*************/
void main(void)
{
/* Write your local variable definition here */
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
/*** End of Processor Expert internal initialization. ***/
/* Write your code here */
/* For example: for(;;) { } */
/***********
* 初期設定 *
***********/
/***** TRIM設定 *****/
ICSTRM = 0xA9; // 内臓基準クロックのトリム設定
ICSSC_FTRIM = 0; // 内臓基準クロックのファイントリム設定
/***** メインループ *****/
for (;;)
{
ERR = AD1_MeasureChan(0,0); // ADP0 AD変換開始
XDATA = ADCR; // 変換値を格納
ERR = AD1_MeasureChan(0,1); // ADP0 AD変換開始
YDATA = ADCR; // 変換値を格納
ERR = AD1_MeasureChan(0,2); // ADP0 AD変換開始
ZDATA = ADCR; // 変換値を格納
DATA = ((XDATA+6)/15); // offset加算してから1/15
switch(DATA) // LED表示
{
case 41: PTBD = 0b00000001;break;
case 40: PTBD = 0b00000011;break;
case 39: PTBD = 0b00000110;break;
case 38: PTBD = 0b00001100;break;
case 37: PTBD = 0b00011000;break;
case 36: PTBD = 0b00110000;break;
case 35: PTBD = 0b01110000;break;
case 34: PTBD = 0b11110000;break;
case 33: PTBD = 0b01110000;break;
case 32: PTBD = 0b00110000;break;
case 31: PTBD = 0b00011000;break;
case 30: PTBD = 0b00001100;break;
case 29: PTBD = 0b00000110;break;
case 28: PTBD = 0b00000011;break;
case 27: PTBD = 0b00000001;break;
default: PTBD = 0b00000000;
}
Cpu_Delay100US(1000); // 100mS待機してループ
}
/*** Don't write any code pass this line, or it will be deleted during code generation. ***/
/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
for(;;){}
/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
/* END ECOMON */
/*
** ###################################################################
**
** This file was created by Processor Expert 3.06 [04.26]
** for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/