RL78/G1EのADの設定の件

お世話になります初心者IKUZOと申します
RL78/G1Eで高速にA/D変換できないかと考えております
下図のように設定しましたが、大丈夫なんでしょうか
わからないことがありまして
ハードウェアトリガーで
INTTM01から起動にしまして
だいたいこれでいいのでしょうか?
入力がANI0とANI22があるのが疑問です
やりたいのは
ANI0を10uS以内で8ビットに変換して判断したいのです
GAIN_AMP→DC→抵抗分圧→ANI0→A/D変換のようにしたいです
変換時間が赤く表示されているのは、エラーなんでしょうか?
変換結果も設定はどうしたら良いのでしょうか?

  • チョコです。
    この設定自体に問題になるところはなさそうです。
  • チョコです。
    TM01の設定としてはこれで結構です。
    ただし,あくまでこれは,A/Dの起動トリガとしての設定になります。
    TM01を通常にインターバルタイマとしても使うなら,A/Dのトリガ殿使い分けに注意が必要です。
  • チョコさんアドバイスありがとうございます
    先ほどからコードを移植してやっておりますが
    __interrupt static void r_adc_interrupt(void)
    に飛んでこず、
    TM01のタイマ設定で割込みをONにして
    __interrupt static void r_tau0_channel1_interrupt(void)
    に飛んで来るのかと思いきや
    ここにも来ないので、どうしてなんだろうかと、思います。
  • ADPC = 0x02U;
    これが01Uになってました、修正してやってみます
  • 同じでした、
    1.
    TAU0_Channel0_Start //パルス8個の出力開始
    TAU0_Channel2_Start(0x2800);//インターバルこの後からA/D開始
    P1 |=0x01;

    2.
    __interrupt static void tau0_channel2_interrupt(void)
    {
    P1 &=~0x01;
    TAU0_Channel2_Stop
    ADC_Start //A/D動作開始
    TAU0_Channel1_Start //TM01動作開始
    }
    3.
    __interrupt static void adc_interrupt(void)
    {
    static int count=0;

    if(count < 8000){
    count++;
    }else{
    TAU0_Channel1_Stop
    ADC_Stop
    count=0;
    }
    P1 &=~0x01;
    }
    2.には来ているのですが3.に飛んできません

  • サンプルを探すのですが、ハードウェアトリガ(TM01)のものはみあたらないようです。
  • チョコです。
    気になっているのは,ADCEビットがセットされているかどうかです。
    以前見た設定では,コンパレータ動作設定が停止になっていたと思います。
    もしそうなら,80msのA/D変換を始める前にR_ADC_Set_OperationOn()関数よ呼んで
    ADCEをセットするか,直接ADCE=1;としてから,1us以上たってからADCSビットをセットする必要があります。
    まずは,ADM0レジスタのビット0(ADCE)とビット7(ADCS)を確認してください。
    次に,ADMKビットが0になっているかを確認してみてください。
  • チョコさんアドバイスありがとうございます
    #define ADC_Start \
    ADCE = 1U;\
    TAU3_Wait_33nS(30);\
    ADIF = 0U;\
    ADMK = 0U;\
    ADCS = 1U;
    でやりましたところ、10uSでA/D変換完了割込み
    __interrupt static void adc_interrupt(void)
    が実行されました、これから処理を入れていきます。

  • 作りこみしましたところ
    最初数十回はA/Dが比較をして入れ替えをしているようですが
    肝心の最大値に達する前に、A/Dが動作しなくなっているように
    みうけられます、入れ替えが発生すると一番下のパルスを反転するように
    しているのですが下側に張り付いたままになっております
    処理が10uSからはみだしているのでしょうか?


    拡大したところではそうでもないようです。

  • すいません
    割込みハンドラーのソースです
    __interrupt static void adc_interrupt(void)
    {
    static int count=0;

    if(sf.ad_max < ADC_Result){
    sf.ad_max=ADC_Result;
    sf.ad_count=count;

    P1 ^= 0x01;
    }

    if(count < 8000){
    count++;

    // P1 ^= 0x01;

    }else{
    TAU0_Channel1_Stop
    ADC_Stop
    count=0;
    sf.ad_busy=0;//ADCを無効

    P1 &=~0x01;
    }
    }

    初回のみsf.ad_countは96とか返すのですが、それ以降は0としか返しません、また入れ替えも起きませんのでADがおかしなことになっているのではないかと思います