ボッシュさんの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 */
チョコさん、こんにちは。(Cc: つくたろうさん、鈴木さん) NoMaYです。チョコさんのCS+のプロジェクトをe2 studioのプロジェクトに変換していて気付いたのですが、今回のプロジェクトではコード生成機能の設定が“初期化関数のみ出力する”という設定に変更されています。これをコード生成機能のデフォルトの“設定に合わせてすべて出力する”に戻すとチョコさんの作成されたソースとコード生成したソースとでリンク時に変数(や関数)の2重定義エラーがIICA0/UARTの部分で発生します。ということは、タイマとかA/DとかIICA0/UART以外での利便性を求めてコード生成機能のデフォルトの設定で使いたい場合(つくたろうさん(?)、私とか、など)には遅かれ早かれ少々困った事態に遭遇することになりそうだと推測しているのですが、何か良い対処方法などあったりしないでしょうか?今回のプロジェクトは、つくたろうさんのところでIICA0がサッパリ動いていないようなのでチョコさんが大急ぎで作られたもの、というのは重々承知しているつもりですが、、、 また、以前にチョコさんが仰っていたコード生成機能で何でも出来る訳ではないという趣旨の意見も拝見していますが、、、
チョコです。
IICA0関係のヘッダファイルのマクロ定義等もコピーしないといけませんでした。
ついでに,インターバルタイマ関係も割り込み処理がr_cg_main.cで定義していたので,コード生成のインターバルタイマの割り込みを使用しないに変更しました。
なぜ,IICA0の初期設定がコード生成を利用していたかを思い出しました。通信速度を自由に設定するためにコード生成を使っていました。
一応,ここらを修正したプロジェクトを作ってみました。
ビルドまではやってみましたが,十分に返答ができているかは不明です。
RL78G10_IICA0_rev3.zip
つくたろうさん、こんにちは。NoMaYです。もしかしたら、、、と気になったのですが、今回のチョコさんのプロジェクトのmain関数は以下のようになっていて、よく見るとループしてないです。void main(void){ R_MAIN_UserInit(); /* Start user code. Do not edit comment generated here */ { uint8_t status;/* readr EEPROM */ status = g_IIC_get_wdata( BMP180, A_AC5, &g_AC5 ); if ( 0x00 == status ) { status = g_IIC_get_wdata( BMP180, A_AC6, &g_AC6 ); status = g_IIC_get_wdata( BMP180, A_MC, &g_MC ); status = g_IIC_get_wdata( BMP180, A_MD, &g_MD );/* start temperature measurement */ status = g_IIC_get_temp( &g_UT ); } } /* End user code. Do not edit comment generated here */}
void main(void)
{
R_MAIN_UserInit();
/* Start user code. Do not edit comment generated here */
uint8_t status;
/* readr EEPROM */
status = g_IIC_get_wdata( BMP180, A_AC5, &g_AC5 );
if ( 0x00 == status )
status = g_IIC_get_wdata( BMP180, A_AC6, &g_AC6 );
status = g_IIC_get_wdata( BMP180, A_MC, &g_MC );
status = g_IIC_get_wdata( BMP180, A_MD, &g_MD );
/* start temperature measurement */
status = g_IIC_get_temp( &g_UT );
}
/* End user code. Do not edit comment generated here */
つくたろうさんwrote: said:インポートもできました。 転送クロックfscl=100000bpsだとSCLは5μsで0Vと3.3Vになるのだと思うのですが、ずっと3.3Vのままです。[引用終]
チョコです。 今,外出から戻ってきました。 IICA0の各レジスタの値はどうなっていますでしょうか。 そこらが,問題を解決するヒントになるはずです。
追伸
変数の中がどうなってるかもチェックしてください。
NoMaYさん,つくたろうさん,
今回のIICA0を制御するライブラリの簡単な説明書を作ってみました。これを参考にしてプログラムを見てもらえれば,理解し易いかと思います。
要は,main関数の中は自分でやってねと言うことです。
IICA0ライブラリの解説.pdf
チョコさん、どうもありがとうございます。NoMaYです。今、説明書を読ませて頂いているところです。
チョコさんwrote: said:今回のIICA0を制御するライブラリの簡単な説明書を作ってみました。これを参考にしてプログラムを見てもらえれば,理解し易いかと思います。[引用終]
色々とご指導ありがとうございます。
ただ、うまくいかないです。106行目の status が0x82です。 ところで、下記資料の24頁の6.2.8の「または」が気になります。もしかして対応していないのでしょうか。 www.renesas.com/.../r20ut3964jj0100-csrn.pdf
つくたろうさん、こんにちは。(Cc: チョコさん) NoMaYです。たぶん、つくたろうさんが使っているのは、まだ、RL78G10_IICA0_rev2.zipを基にしたRL78G10_IICA0_rev2_for_e2.zipだと思いますので、そうであれば、cg_src\r_cg_iica.cの中のR_IICA0_Create関数を変更して下さい。昨晩、(CS+で、ひとまずBMP180の事は脇において、取り敢えずコード生成させたものを、素朴にそのまま使って)G10のシミュレータでIICA0を試してみようとしていたのですが、動き出す気配が全く無くて頭を抱えていたところでした。(G13のシミュレータで試してみるとあっさりと動く。) 今朝、チョコさんの書き込みを読んで該当部分のコードを変更して試したら、あっさりとG10のシミュレータで動き出しました。(といっても、今までSCLA0もSDAA0も全く出なかったのが、ひとまず出るようになったことを確認出来た、という段階ではありますが。)コード生成も間違っているし、マニュアルも間違っているし、ではどうにもこうにも、、、ですね。