ボッシュさんの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ビットのデータの読み出し関数まで作ってみました。余計な処理はできるだけ削除したり,変更しています。まだ,ワーニングは消えていませんが,エラーがなくなったのでアップしておきます。参考にしてください。