ボッシュさんの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 */
最初に戻る前に寄り道をさせて頂きます。イチゴのようなのでi2cをdetectするようなことをしたいです。さっと環境作れないので確認していないのですがコマンドのi2cdetecです。けっこう色々なスレーブを見つれたと思います。
こんなかなと思い作成して見ましたがダメでした。ご指導お願いします。
/* 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 i2cfind(void);/* End user code. Do not edit comment generated here */
void i2cfind(void){ int ad; MD_STATUS status; for(ad=0;ad<1024;ad++){ buf[0]=0x05; //ENQ? buf[1]=0x00; status=R_IICA0_Master_Send((uint8_t)ad,(uint8_t *)buf, 1,(int8_t)100); sleep(10); if( status==MD_OK ){ sprintf_tiny(data,"%04d OK ",ad); R_UART0_Send((uint8_t*)data,strlen(data)); sleep(15); }else{ sprintf_tiny(data,"%04d NG ",ad); R_UART0_Send((uint8_t*)data,strlen(data)); sleep(15); } if((ad%6)==0){ sprintf_tiny(data,"\n"); R_UART0_Send((uint8_t*)data,strlen(data)); sleep(15); } }}
環境e2 studio Version:5.3.1.002 評価期間の有効期限が切れています。RL78/G10 16ピン+E2 Lite
チョコです。 I2Cバスでは,スレーブアドレスの上位4ビットが0b0000と0b1111は拡張コードとして,通常のI2Cスレーブは 存在しないはずです。通常EEPROM等は0b1010xxxが使われていますし,BMP180は通常の7ビット・アドレスの 最後の0b1110111を使っています。 また,10ビット・アドレスと言うことで,0~1023を指定されようとしていますが,通常の7ビット・アドレスと10 ビット・アドレスはアドレス指定が異なります。少なくともコード生成は10ビット・アドレスには対応していません。 通常のデバイスは殆ど7ビット・アドレスです。(10ビット・アドレスはスレーブアドレス部が0b11110xxで,最初の データが下位8ビット分のアドレスになるので,やり方はレジスタ・アドレスを指定するのににていますが。) 今,RL78/G13用のプログラムをRL78/G10に移植中しています。環境が揃わないので,プログラムの移植だけに なりますが,本日中には何かアップできると思います。
RL78G10_IICA0.zip
チョコです。
サンプルプログラム等の「IICマスタ(RL78/G13版)改」はコード生成を初期化だけに使用し,I2Cの実際の処理部はライブラリとしてr_iic_lib.c(及びr_iic_lib.h)として独立させています。これをRL78/G10に書き換えてみました。
変更点:
・割り込みベクタを定義しているpragma指令からレジスタ・バンクを削除
・IIC_TM03_init関数のTMR03レジスタをTMR03Lに変更
これをr_cg_main.cの中で使ったg_IIC_put_data関数とg_IIC_get_data関数でレジスタを内蔵したスレーブ用のアクセス関数(スレーブ・アドレスとレジスタ・アドレスを指定した書き込み関数と読み出し関数)です。ついでに,16ビットのデータの読み出し関数まで作ってみました。余計な処理はできるだけ削除したり,変更しています。まだ,ワーニングは消えていませんが,エラーがなくなったのでアップしておきます。参考にしてください。
RL78G10_IICA0_rev2.zip
BMP180関係の定数の定義が間違えていた(入れ替わっていた)ところを修正し,温度を読み出す部分を関数にしてしまいました。
また,前回出ていたワーニングを消すために関数の引数の部分を変更しました。
BMP180のデータシートを見ると,計測した結果をEEPROMのデータを使って計算することで,0.1℃単位で温度が得られるとのことなので,温度計算に必要なパラメータをEEPROMから最初に読み出すようにしています。ただし,計算はやっていませんが。
動作確認はしていませんが,I2Cバスの制御はこんな感じです。一応これで試してみてください。
ご指導ありがとうございます。サンプルコードをe2-studioのインポートで読み込むとエラーがでました。
解決には時間がかかりそうです。
つくたろうさん、こんにちは。NoMaYです。チョコさんの手元ではCS+のプロジェクトをe2 studioにインポート出来たとのことですが、つくたろうさんの手元では結局出来なかったということになりますか?[メモ]今の私はBMP180について初心者なのでGoogle検索で見付けた頁へのリンクを色々貼らせて貰いました。BMP180BMP180製品ページ - BoschBMP180データシートPDF - Bosch使用例STM32L / Barometer (Bosch BMP180) on (GCC + OpenOCD) with PN2 - JH1PJL Homepage - 個人HPロジアナでの信号データありRL78/G13でBMP180 温度、圧力センサーの値を読む - RVF/RC45 blog - 個人BlogGNURL78で独自C++クラスを設計 (GitHubにて公開)Arduino Pro Mini+BMP180でI2Cを試す - hnw - Qiita個人投稿気圧センサーbmp180をテストする - A V R 試 用 記 (別館) - 個人HPRaspberry Pi + 温度センサーで部屋の温度を測る - Nyanchew's Digital Life - 個人BlogGoogle検索ボッシュ BMP180BMP180搭載モジュールはスイッチサイエンスや共立エレショップやaitendoで購入可能一世代前のBMP085搭載モジュールは秋月電子で購入可能