シリアルインターフェイスIICAでデータを取得できません

ボッシュさんのBMP180 気圧センサで気温のデーターを取得しようとしているのですが、うまくいきません。
ご指導お願いします。個人的には下のコードで、パソコンの方でなにか数字がでると思っているのですが、000でした。
抵抗値か転送クロックに問題があるように思っています。よろしくお願いいたします。

 

環境
e2 studio Version:5.3.1.002 評価期間の有効期限が切れています。
RL78/G10+E2 Lite

 

周辺機能の設定の転送クロックは100000です。

抵抗は5kΩ位です。

 

/* Start user code for global. Do not edit comment generated here */
char buf[256]="";
char data[10]="";
unsigned long millisec;
void sleep(long i_end_millisecond);
void uart(void);
/* End user code. Do not edit comment generated here */ 

 

static void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
    EI();
    R_UART0_Start();
    buf[0]=0xF4;
    buf[1]=0x2E;
    buf[2]=0x00;
    R_IICA0_Master_Send(0xEE, (uint8_t *)buf, 2,20);
    sleep(20);
    while (1U){
        //R_UART0_Receive((uint8_t *)rx_buf,10);
     uart();
     sleep(10);
    }
    R_UART0_Stop();
    /* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
void uart(void){
    int i;
    R_IICA0_Master_Receive(0xEF, (uint8_t *)buf,256,20);
    for(i=0;i<256;i++){
     if((i%8)==7){
      sprintf_tiny(data,"%03d,%03d\n ",i,buf[i]);
     }else{
      sprintf_tiny(data,"%03d,%03d ",i,buf[i]);
     }
    //R_UART0_Send((uint8_t*)message,strlen(message));
    R_UART0_Send((uint8_t*)data,10);
    sleep(15);
   }
}
Parents
  • コード生成担当の鈴木です。BMP180は使ったことがないのですが、コード生成で出力したソースだけでは、データの取得はできません。BMP180でデータを取得するにはリスタート処理が必要になります。RL78 EEPROMアクセスする方法を参考資料として掲載します。この方法で、同じようにBMP180からもデータ取得できると思われます。

  • わわいです
    IICのヤバい(?)のは、スレーブアドレスのあとのオフセットデータが、スレーブデバイスによりバイト数が変わったり、中にはコマンドごとにオフセット部のバイト数が変わるというデバイスもあったりするところですねー
    そのおかげで、出来合いのコード持ってきてそれでOK、というのがやりにくいですね。
    そのうえ、割り込み駆動しようとすると、コマンドの送出タイミングで、ストップコンディションが出てくれなかったりと、なかなか苦労させられました。。
    #ストップコンディションが出ない、ってのは動作上正常に見えるだけにヤバい。。
    #こーゆーのはオシロで見ないとわかりませんわな。。
  • チョコです。
    >IICのヤバい(?)のは、スレーブアドレスのあとのオフセットデータが、スレーブデバイスによりバイト数が変わったり、中にはコマンドごとにオフセット部のバイト数が変わるというデバイスもあったりするところですねー

    これはI2Cだけではなく,SPIでも同じです。ここらは,スレーブの仕様なので,どんなI/Fでも同じようなことは起こります。
    I2Cではこれに輪をかけて,内部のレジスタアドレス(オフセット)の上位ビットがスレーブアドレスの下位の方に入る
    ことがあることです。
    どちらにしても,通信はスレーブの通信仕様に合わせることが必要です。
Reply
  • チョコです。
    >IICのヤバい(?)のは、スレーブアドレスのあとのオフセットデータが、スレーブデバイスによりバイト数が変わったり、中にはコマンドごとにオフセット部のバイト数が変わるというデバイスもあったりするところですねー

    これはI2Cだけではなく,SPIでも同じです。ここらは,スレーブの仕様なので,どんなI/Fでも同じようなことは起こります。
    I2Cではこれに輪をかけて,内部のレジスタアドレス(オフセット)の上位ビットがスレーブアドレスの下位の方に入る
    ことがあることです。
    どちらにしても,通信はスレーブの通信仕様に合わせることが必要です。
Children
No Data