電流・電圧測定デバイスであるINA233を用いて電圧値を測定し,測定値を簡易IIC通信でRX231に送るプログラムを作成しておりますが上手くいきません.
RX231シリーズ R5F52316ADFM
ROM:256Kbyte RAM 32Kbyte 外部発振20MHzを使用しています.
コード生成はSCI12を簡易IICバスに設定し,生成しました.
void main(void){ R_MAIN_UserInit(); /* Start user code. Do not edit comment generated here */ { uint8_t adr =0 ;//7bit address uint8_t dir =0 ;//0:Write 1:Read uint8_t tx_buf[255] = {0};//send data uint8_t rx_buf[255] = {0};//receive data while(1){ adr = 0x41; dir = 0x00; adr = (adr<<1) | (dir & 0x00); tx_buf[0] = 0x88; //READ_VIN PMBusコード ina233 tx_buf[1] = 0x89; //READ_IN PMBusコード ina233 //PMBusコマンド ina233に送信 R_SCI12_Create(); R_SCI12_Start(); R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3); R_SCI12_Stop(); adr = 0x41; dir = 0x01; adr = (adr<<1) | (dir & 0x00); //ina233からデータ取得 R_SCI12_Start(); R_SCI12_IIC_Master_Receive(adr,rx_buf,3); R_SCI12_Stop(); } } /* End user code. Do not edit comment generated here */}
CS+の設定等もよく分からないのでその辺りも教えていただけるとありがたいです.
初歩的な質問ですいませんが,よろしくお願いいたします.
//INA233のデータシート
www.ti.com/.../ina233.pdf
fiReさん、こんにちは。NoMaYです。少し脱線しますが、確認したいことがあります。今現在、RX231のソフトウェア開発で使われるツールはRXスマートコンフィグレータというものになるのですが、fiReさんが提示されているソースコードはコード生成機能とよばれる機能で生成されたソースになっています。頂いている文面から察するに、CS+を使うのは初めて?(RX231というより)RXマイコンを使うのも初めて?のように思われるのですが、どういう経緯で、RXスマートコンフィグレータを使わずにコード生成機能を使われているのですか?私がとっさに思い浮かべたのは、以下の理由かな?と思ったのですが、、、(1) スタータキット(Renesas Starter Kit for RX231)に同梱されていた(?)かなり古い(?)CS+を使用していてコード生成機能しか無かったので?製品ページURLwww.renesas.com/jp/ja/products/software-tools/boards-and-kits/starter-kits/renesas-starter-kit-for-rx231.htmlちなみにRenesas Starter Kit for RX231(B版: Trusted Secure IP搭載)もDVD内のCS+はかなり古いのだろうか、、、(独り言です、、、)www.renesas.com/jp/ja/products/software-tools/boards-and-kits/starter-kits/renesas-starter-kit-for-rx231b.html[訂正] すみません、そういえば、Renesas公式サンプルコードはe2 studio版しかありませんでした。(2) ターゲットボード(Target Board for RX231)向けRenesas公式サンプルコード(この機種だけコード生成機能を使用)をベースにしたので?サンプルコードダウンロードURLwww.renesas.com/jp/ja/software/D6002186.htmlちなみに、コード生成機能で生成されたものかRXスマートコンフィグレータで生成されたものかは、以下のようにAPI関数が若干異なりますので、区別が出来ます。コード生成機能で生成例) R_SCI12_IIC_Master_Send()RXスマートコンフィグレータで生成例) R_Config_SCI12_IIC_Master_Send()
チョコです。
>while(SCI12.SSR.BIT.TDRE == 0){
>R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);
>}
この処理は間違いです。最初に送信を一度起動して,送信完了を待ちます。
R_SCI12_IIC_Master_Send(adr,&tx_buf[0],3);
while(...){
}
同様に受信についても,最初にR_SCI12_IIC_Master_Receive(adr,rx_buf,3);
で受信を起動してから,受信完了を待ちます。おそらくSSR.RDRFでは,1バイトでも受信したら抜けてしまうので,鈴木さんが提示した資料を参照してください。(送信についても同様。)
細かなことですが,adr = (adr<<1) | (dir & 0x00);の右側の項は常に0なので,無意味です。というか,これ自体が不要では。
以上