ads1115から正常にデータ取得できない件について

いま上記のプログラムでads1115とセンサを接続して通信を行っているのですが

実行してデバックコンソールを見るとstartと0しか表示されておらずセンサの値が取得できません。

どなたか原因がわかる方がいらっしゃったら教えていただけるとありがたいです。

Parents
  • チョコです。
    別のスレッドにもコメントしましたが、R_Config_RIIC0_Master_Send関数とR_Config_RIIC0_Master_Receive関数の使い方を間違えています。
    これらは、通信を起動するだけで、通信の完了は待ちません。従って、通信が完了するのをプログラムで待つ必要があります。このためには、通信完了フラグを準備しておき、r_Config_RIIC0_callback_receiveend関数とr_Config_RIIC0_callback_transmitend関数でこのフラグをセットするようにします。また、R_Config_RIIC0_Master_Receive関数とR_Config_RIIC0_Master_Send関数をお呼び出した後は、このフラグをクリアしてから、フラグがセットされるのを待つようにしてください。
  • チョコさん、回答ありがとうございます。

    R_Config_RIIC0_Master_Send関数とR_Config_RIIC0_Master_Receive関数が通信を起動させるだけのものだということはわかりました。では実際に通信自体はどのタイミングでおこなわれるのでしょうか?

    何度もすみません、よろしくお願いします。
  • たむらさん簡単なことですよ、
    r_Config_RIIC0_callback_transmitend()
    {
    flg=1;
    }
    としておき
    R_Config_RIIC0_Master_Send();
    flg=0;
    while(!flg);
    ここ送信完了
  • チョコです。
    通信を起動するというのは、(引数で示された通信パラメータを保存し、)スタート・コンディションに続けてRIIC0にスレーブ・アドレスを書き込むことです。RIIC0はスレーブ・アドレスの送信を開始します。以降は全てRIIC0(ハードウェア)の動作で、ソフトウェアは、RIIC0からの割り込みでの処理となります。
    スレーブ・アドレスの通信が完了したら、RIIC0から割り込みが発生するので、そこで、通信パラメータに従った通信を行います(バッファからデータを読み出してRIIC0に書き込むことでデータを送信したり、RIIC0にデータ受信を指示することで、データ受信を起動したりします)。
    RIIC0から割り込みが発生し、引数で示された通信が全て完了していたら、r_Config_RIIC0_callback_receiveend関数かr_Config_RIIC0_callback_transmitend関数が実行されます。
    これらの関数でフラグをセットするようにしておけば、通信が終わったことが確認できます。
  • IKUZOさん、回答ありがとうございます。

    おっしゃられた通りにプログラムを組んだのですが
    while(!flg);の部分でループしてしまいます。
    原因はわかりますでしょうか?
    よろしくお願いします。以下がメインのプログラムです。

    #include "r_smc_entry.h"
    #include <stdio.h>
    #include <stdlib.h>
    void main(void);

    extern volatile uint8_t flgt;
    extern volatile uint8_t flgr;

    extern volatile uint8_t g_riic0_tx_buf[4];
    extern volatile uint8_t g_riic0_rx_buf[2];
    extern volatile uint16_t val;
    void main(void)
    {


    R_Config_RIIC0_Start();

    R_Config_RIIC0_Master_Send(0x48, (uint8_t *)g_riic0_tx_buf,3);
    flgt=0;
    while(!flgt);

    R_Config_RIIC0_Master_Receive(0x48,(uint8_t *)g_riic0_rx_buf,2);
    flgr=0;
    while(!flgr);
    printf("%x,\n",g_riic0_rx_buf[0]);



    }
Reply
  • IKUZOさん、回答ありがとうございます。

    おっしゃられた通りにプログラムを組んだのですが
    while(!flg);の部分でループしてしまいます。
    原因はわかりますでしょうか?
    よろしくお願いします。以下がメインのプログラムです。

    #include "r_smc_entry.h"
    #include <stdio.h>
    #include <stdlib.h>
    void main(void);

    extern volatile uint8_t flgt;
    extern volatile uint8_t flgr;

    extern volatile uint8_t g_riic0_tx_buf[4];
    extern volatile uint8_t g_riic0_rx_buf[2];
    extern volatile uint16_t val;
    void main(void)
    {


    R_Config_RIIC0_Start();

    R_Config_RIIC0_Master_Send(0x48, (uint8_t *)g_riic0_tx_buf,3);
    flgt=0;
    while(!flgt);

    R_Config_RIIC0_Master_Receive(0x48,(uint8_t *)g_riic0_rx_buf,2);
    flgr=0;
    while(!flgr);
    printf("%x,\n",g_riic0_rx_buf[0]);



    }
Children
No Data