RL78/G1EのADの設定の件

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

  • 11. 6. 5 ハードウエア・トリガ・ノーウエイト・モード
    (セレクト・モード,連続変換モード)
    ① 停止状態で,A/Dコンバータ・モード・レジスタ0(ADM0)のADCE = 1に設定し,A/D変換待機状態と
    なります。
    ② ソフトウエアで安定待ち時間注をカウント後,ADM0レジスタのADCS = 1に設定することで,ハードウ
    エア・トリガ待機状態となります(この段階では変換を開始しません)。なお,ハードウエア・トリガ
    待機状態のとき,ADCS = 1に設定しても,A/D変換は開始しません。
    ③ ADCS = 1の状態で,ハードウエア・トリガが入力されると,アナログ入力チャネル指定レジスタ(ADS)
    で指定されたアナログ入力のA/D変換を行います。
    ④ A/D変換が終了すると,変換結果をA/D変換結果レジスタ(ADCR, ADCRH)に格納し,A/D変換終了割
    り込み要求信号(INTAD)を発生します。A/D変換終了後は,すぐに次のA/D変換を開始します。
    ⑤ 変換動作中にハードウエア・トリガが入力された場合,現在のA/D変換は中断され,再変換を開始します。
    変換動作途中のデータは破棄されます。
    ⑥ 変換動作中にADSレジスタを書き換えおよび上書きすると,現在のA/D変換は中断され,ADSレジスタで
    再度指定されたアナログ入力のA/D変換を行います。変換動作途中のデータは破棄されます。
    ⑦ 変換動作中にADCS = 1に上書きすると,現在のA/D変換は中断され,再変換を行います。変換動作途中
    のデータは破棄されます。
    ⑧ 変換動作中にADCS = 0に設定すると,現在のA/D変換は中断され,A/D変換待機状態となります。ただし,
    この状態でA/Dコンバータは停止状態になりません。
    ⑨ A/D変換待機中にADCE = 0に設定すると,A/Dコンバータは停止状態になります。ADCS = 0のとき,ハ
    ードウエア・トリガが入力されても無視され,A/D変換は開始しません。
    注 アナログ入力チャネルに高精度チャネル選択の場合: 安定待ち時間 = 0.5 μ s
    アナログ入力チャネルに標準チャネル選択の場合: 安定待ち時間 = 2 μ s
    INTTM01のトリガーでA/Dを起動したいですね
    最大80mS間をA/Dトレースできれば申し分ないのですが
    10uSでは割込みが多すぎてたぶん使いものにならない?
    であれば100uSぐらいは分解能に無理がありますか。

  • チョコです。
    >INTTM01から起動にしまして
    >だいたいこれでいいのでしょうか?
    INTTM01でハードウェア・トリガすること自体は問題ありません。

    >入力がANI0とANI22があるのが疑問です
    これは,それ以外は他の機能で使用されているので,使えないというだけです。

    >変換時間が赤く表示されているのは、エラーなんでしょうか?
    おそらく,A/Dを設定した後で,動作クロック周波数を変えたので,変換時間が変わったことを示しているだけだと思われます。

    >変換結果も設定はどうしたら良いのでしょうか?
    変換が完了したら,ADIFが1になり,最高優先順位で割り込みが発生するので,ADCRレジスタを読み出して,ビット11~ビット4が変換結果です(右に4ビットだけシフトすればビット7~ビット0になります)。
  • チョコです。
    何を気にされているか分かりませんが,必要な回数だけ,変換結果をDMAでRAMに16ビット転送で転送しておいて,DMA完了の割り込みで変換結果を処理するのではどうなのでしょうか?
  • チョコさんアドバイスありがとうございます
    INTTM01で10uSの割込みを発生させて
    INTTM01でA/Dにトリガを掛けて、
    INTTM01の割込みハンドラ内でA/Dデータを読み込んで
    大小判断を行いたいです
    int count=0;
    int max=0;

    int sv=0;
    void INTTM01_irq(void)
    {
    if(count < 8000){//80mS/0.01=8000
    count ++;
    }else{
    INTTM01_stop
    }
    if(max < ad){
    max=ad;

    sv=count;
    }
    }
    のようなことは可能でしょうか?

  • チョコです。
    >のようなことは可能でしょうか?
    問題があります。
    おそらく,adがA/D変換結果を意識されていると思いますが,A/D変換が終了したことを確認していないようです。
    INTTM01でA/Dをハードウェア・トリガ・ノーウェイト・モードで使用していたと思うので,INTTM01での割り込み処理をやる必要はなく,A/D変換完了割り込みだけを使用すればいいのでは。どうせ,INTTM01とINTADは1対1に対応するので,A/D変換完了割り込みでTM01の処理をしても十分だと思います。
  • チョコさんアドバイスありがとうございます
    「A/D変換完了割り込みでTM01の処理をしても十分」ということで
    int count=0;
    int max=0;
    int sv=0;
    void adend_irq(void)
    {
    if(count < 8000){//80mS/0.01=8000
    count ++;
    }else{
    INTTM01_stop
    }
    if(max >ad){
    max=ad;
    sv=count;
    }
    }
    にしたいと思います、
    A/Dの設定画面では10uSではなくて中途半端な値になっているのですが
    TM01の割込みというのは、TM01のタイマ設定の方で
    行っておけばよいのでしょうか?
  • 一応下記画面のように設定いたしました、だいじょうぶでしょうか?

  • これでコード生成しますと、r_cg_tau.cのvoid R_TAU0_Create(void)
    から Channel 1 used as square output functionの項目が
    消えているのですが、ここでTM01のタイマ設定でコード生成するのでしょうか?
  • TM01のタイマ設定が不使用になっていたので
    これをインターバルタイマ10uS設定で
    コード生成いたしました。

  • チョコです。
    ちょっと待ってください。TM01の割り込み処理は必要としませんが,A/Dを起動するためのハードウェア・トリガの要因としては必要なので,TM01は10usのインターバルタイマとして設定し,割り込みのチェックだけを外してください。