現在、RL78でAIN0/P20のポートをデジタルとアナログの設定をプログラム中で変更するようにしています。
デバッガーを接続した状態では動作するのですが、書き込んで動作させると動作しません。
立ち上がりはアナログで設定
アナログ入力が0になったらポートをデジタルに変更
ポート入力がHighになったら、アナログ入力にポートを変更をしているのですが、
書き込んだ状態では、アナログからデジタルには変わっているようですが、
ポートがHighになった時のif文が実行されないようです。
どのたか原因は判りますでしょうか?
チョコ様
WDTはOFFになっている事を確認しました。
while (1U)
{
int j;
HALT(); /* Wait for interrupt */
ADIF = 0U; /* Clear INTAD request */
R_ADC_Get_Result(&g_result_buffer); /* Get result */
NOP();
P2_bit.no0 == 0;
if(g_result_buffer <=5) // 0.16V以下になったら
R_ADC_Stop(); //ADストップ
ADCE = 0; //ADモードOFF
ADPC = 0x01; //AIN0をP20に設定
PM2 = _01_PMn0_MODE_INPUT | _02_PMn1_MODE_INPUT | _04_PMn2_MODE_INPUT | _F8_PM2_DEFAULT;
LED2 = 1;
LED1 = 0;
}
if(g_result_buffer <= 155) // 0.5V以下で赤点灯
if(g_result_buffer > 800) // 2.8V以上で緑点灯
LED2 = 0;
LED1 = 1;
R_ADC_Stop();
if(P2_bit.no1 == 1) //P20がHighになったら(2.64V以上)
ADPC = 0x02; //P20をAIN0に変更
PM2 = _01_PMn0_NOT_USE | _02_PMn1_MODE_INPUT | _04_PMn2_MODE_INPUT | _F8_PM2_DEFAULT;
ADCE = 1; //ADモードON
R_ADC_Set_OperationOn();
R_ADC_Start();
for(j = 0 ; j < 1 ; j++)
for (count=0U; count<25000U; count++)
上記プログラムで、書き込んだ状態だとif(g_result_buffer <=5) のところは実行されているようですが、
if(P2_bit.no1 == 1) が実行されていないようです。
デバッガを接続した状態だと if(P2_bit.no1 == 1) も実行されているのは確認できました。
その他何が考えられますでしょうか?
見づらいので整形してみました。
while (1U) { int j; HALT(); /* Wait for interrupt */ ADIF = 0U; /* Clear INTAD request */ R_ADC_Get_Result(&g_result_buffer); /* Get result */ NOP(); P2_bit.no0 == 0; if(g_result_buffer <=5) // 0.16V以下になったら { R_ADC_Stop(); //ADストップ ADCE = 0; //ADモードOFF ADPC = 0x01; //AIN0をP20に設定 PM2 = _01_PMn0_MODE_INPUT | _02_PMn1_MODE_INPUT | _04_PMn2_MODE_INPUT | _F8_PM2_DEFAULT; LED2 = 1; LED1 = 0; } if(g_result_buffer <= 155) // 0.5V以下で赤点灯 { LED2 = 1; LED1 = 0; } if(g_result_buffer > 800) // 2.8V以上で緑点灯 { LED2 = 0; LED1 = 1; } R_ADC_Stop(); if(P2_bit.no1 == 1) //P20がHighになったら(2.64V以上) { ADPC = 0x02; //P20をAIN0に変更 PM2 = _01_PMn0_NOT_USE | _02_PMn1_MODE_INPUT | _04_PMn2_MODE_INPUT | _F8_PM2_DEFAULT; ADCE = 1; //ADモードON R_ADC_Set_OperationOn(); R_ADC_Start(); } for(j = 0 ; j < 1 ; j++) { for (count=0U; count<25000U; count++) { NOP(); } } R_ADC_Start(); }
この内の 3つの if、
使用されているマイコンや動作条件も不明ですが、10bit の ADコンバータでリファレンス電圧が 3.3V と仮定すると、
3.3/1024*5 = 0.01611328125 3.3/1024*155 = 0.49951171875 3.3/1024*800 = 2.578125
0.5V 以外数字が合ってない感じですね。
また、3つの if の条件に引っ掛からなくとも R_ADC_Stop() を呼んでアナログ入力を止めてますが、ロジック的に意図されたものなのか疑問に思います。R_ADC_Start() を 2か所で呼んでるのも不思議な感じですね。
R_ADC_Stop() を呼んでアナログ入力を止めてますが、ロジック的に意図されたものなのか疑問に思います。
R_ADC_Start() を 2か所で呼んでるのも不思議な感じですね。