RL78/G1EのIICのデータ受信の件

お世話になります初心者IKUZOと申します
RL78/G1EのIICの件ですが、教えていただけませんでしょうか?
先ほど、
P15/ANI24/SCK20/SCL20/(KR5) SCL20 MAX6626用IIC(adr 10010001)
P14/ANI23/SI20/SDA20/RxD2/(KR4) SDA20 MAX6626用IIC(adr 10010001)
を接続しまして、プログラムを下記のように作成して実行しましたところ
オシロスコープを監視すると正常に動作していないと思われます
アドバイスいただけませんでしょうか
●実行ソース

RL78/G1EのIICのデータ受信の件-2.txt
///////////////////////////////////////////////////////////////////////
//MAX6626���x����擾
///////////////////////////////////////////////////////////////////////
int cmd_max6626(char *str)
{
	uint8_t data[2];
	IIC20_Master_Receive(0x91 , data , 2);
	printf("0x%02X%02X\r",(int)data[0] &0xFF ,(int)data[1] &0xFF );
	return CMD_OK;
}
///////////////////////////////////////////////////////////////////////
//MAX6626���x����擾
///////////////////////////////////////////////////////////////////////


●MAX6626のIICの手順


●実行して観測された波形(上SCL 下SDA)

Parents
  • チョコです。
    これまでも何度かコメントしているのですが,コード生成された送受信関数は通信を開始するところまでで,通信は完了していません。
    I2C関係では,プログラムはスレーブアドレスを送信開始しただけで戻ってきます。後はシリアルのハードウェアがスレーブアドレスの送信を行っています。
    送信が完了すると,IIC20から割り込みが発生するのですが,その時点ではプログラムの実行は停止しているので,波形はここまでになります。通信が完了するまで,プログラムで待ったください。
    今は時間がないので詳細は別途。
  • チョコさんお世話になります
    「送信が完了すると,IIC20から割り込みが発生するのですが」
    それで見ましたところr_iic20_interrupt割込みハンドラを
    登録するのを忘れていました、これを入れてやってみます。
  • チョコさんできたようです
    「通信が完了するまで,
    プログラムで待ったください。」これを挿入しましたら
    正常に動作しているように見えます、
    大切なヒントを与えていただいてありがとうございました。
    ●ソース

    RL78/G1EのIICのデータ受信の件-3.txt
    ///////////////////////////////////////////////////////////////////////
    //MAX6626���x����擾
    ///////////////////////////////////////////////////////////////////////
    int cmd_max6626(char *str)
    {
    	double temp;
    	temp=get_max6626();
    	printf("%.1f��\r", temp  );
    	return CMD_OK;
    }
    ///////////////////////////////////////////////////////////////////////
    //MAX6626���x����擾
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    //MAX6626�̉��x���擾
    ///////////////////////////////////////////////////////////////////////
    double get_max6626(void)
    {
    	double ret;
    	uint8_t data[2];
    
    	IIC20_Master_Receive(0x91, data, 2);
    
    	while( (SOE1 & _0001_SAU_CH0_OUTPUT_ENABLE ) !=0){}
    
    	ret=(double)(((((int)data[0] <<8) | (int)data[1] & 0xFF) >>4) & 0x0FFF);
    	ret *=0.0625;
    	return ret;
    }
    ///////////////////////////////////////////////////////////////////////
    //MAX6626�̉��x���擾
    ///////////////////////////////////////////////////////////////////////
    
    

    ●波形


    ●モニター

Reply
  • チョコさんできたようです
    「通信が完了するまで,
    プログラムで待ったください。」これを挿入しましたら
    正常に動作しているように見えます、
    大切なヒントを与えていただいてありがとうございました。
    ●ソース

    RL78/G1EのIICのデータ受信の件-3.txt
    ///////////////////////////////////////////////////////////////////////
    //MAX6626���x����擾
    ///////////////////////////////////////////////////////////////////////
    int cmd_max6626(char *str)
    {
    	double temp;
    	temp=get_max6626();
    	printf("%.1f��\r", temp  );
    	return CMD_OK;
    }
    ///////////////////////////////////////////////////////////////////////
    //MAX6626���x����擾
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////
    //MAX6626�̉��x���擾
    ///////////////////////////////////////////////////////////////////////
    double get_max6626(void)
    {
    	double ret;
    	uint8_t data[2];
    
    	IIC20_Master_Receive(0x91, data, 2);
    
    	while( (SOE1 & _0001_SAU_CH0_OUTPUT_ENABLE ) !=0){}
    
    	ret=(double)(((((int)data[0] <<8) | (int)data[1] & 0xFF) >>4) & 0x0FFF);
    	ret *=0.0625;
    	return ret;
    }
    ///////////////////////////////////////////////////////////////////////
    //MAX6626�̉��x���擾
    ///////////////////////////////////////////////////////////////////////
    
    

    ●波形


    ●モニター

Children
No Data