[戻る]
一括表示

I2CSlave通信について 投稿者:なべ 投稿日:2017/04/08(Sat) 00:12:55 No.882

PIC24FのI2CのSlave通信について教えてください。
MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
参考にしたサイトでは、約2ms程度の遅れが必要とありました。

仕様的にどうなっているかご教示頂けないでしょうか。
よろしくお願い致します。

Re: I2CSlave通信について 投稿者:Gokan 投稿日:2017/04/11(Tue) 09:54:48 No.887

これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
プログラムの遅延時間次第です。
I2C自身の仕様では遅延時間は必要ありません。

> PIC24FのI2CのSlave通信について教えてください。
> MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
>
> 仕様的にどうなっているかご教示頂けないでしょうか。
> よろしくお願い致します。

Re^2: I2CSlave通信について 投稿者:なべ 投稿日:2017/04/11(Tue) 22:34:57 No.890

Gokan様
ありがとうございます。
MasterとSlaveのI2Cを制御するプログラムの遅延時間という事ですが、この場合は、スレーブ用割込み制御レジスタIFS1のSI2C1IF割り込みフラグをクリアするために必要なWait(処理)時間ということでしょうか。
while(1) //送信要求終了(NACK)を受信するまで繰り返す 
{
I2C1TRN = *strx;
I2C1CONbits.SCLREL = 1;
IFS1bits.SI2C1IF = 0;
if(I2C1STATbits.P == 1)break;
delay_ms(1);
strx++;
};
> これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
> プログラムの遅延時間次第です。
> I2C自身の仕様では遅延時間は必要ありません。
>
> > PIC24FのI2CのSlave通信について教えてください。
> > MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> > 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> > 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
> >
> > 仕様的にどうなっているかご教示頂けないでしょうか。
> > よろしくお願い致します。

Re^3: I2CSlave通信について 投稿者:Gokan 投稿日:2017/04/17(Mon) 09:56:05 No.894

msecオーダーの遅延ということは、受信してから何らかのデータ処理
をしている時間があるということではないでしょうか??
割込み処理で100usec以上かかるようなことは無いと思います。

> Gokan様
> ありがとうございます。
> MasterとSlaveのI2Cを制御するプログラムの遅延時間という事ですが、この場合は、スレーブ用割込み制御レジスタIFS1のSI2C1IF割り込みフラグをクリアするために必要なWait(処理)時間ということでしょうか。
> while(1) //送信要求終了(NACK)を受信するまで繰り返す 
> {
> I2C1TRN = *strx;
> I2C1CONbits.SCLREL = 1;
> IFS1bits.SI2C1IF = 0;
> if(I2C1STATbits.P == 1)break;
> delay_ms(1);
> strx++;
> };
> > これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
> > プログラムの遅延時間次第です。
> > I2C自身の仕様では遅延時間は必要ありません。
> >
> > > PIC24FのI2CのSlave通信について教えてください。
> > > MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> > > 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> > > 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
> > >
> > > 仕様的にどうなっているかご教示頂けないでしょうか。
> > > よろしくお願い致します。

Re^4: I2CSlave通信について 投稿者:なべ 投稿日:2017/05/06(Sat) 14:36:49 No.911

Gokan様
ご回答ありがとうございます。
再度、プログラムを整理してWaitを10μsから確認してみました。
50μs程度で文字抜けなく正常に受信できていることが分かりました。
Gokan様が言うとおり100μs以下で問題なさそうです。
ありがとうございました。

> msecオーダーの遅延ということは、受信してから何らかのデータ処理
> をしている時間があるということではないでしょうか??
> 割込み処理で100usec以上かかるようなことは無いと思います。
>
> > Gokan様
> > ありがとうございます。
> > MasterとSlaveのI2Cを制御するプログラムの遅延時間という事ですが、この場合は、スレーブ用割込み制御レジスタIFS1のSI2C1IF割り込みフラグをクリアするために必要なWait(処理)時間ということでしょうか。
> > while(1) //送信要求終了(NACK)を受信するまで繰り返す 
> > {
> > I2C1TRN = *strx;
> > I2C1CONbits.SCLREL = 1;
> > IFS1bits.SI2C1IF = 0;
> > if(I2C1STATbits.P == 1)break;
> > delay_ms(1);
> > strx++;
> > };
> > > これはI2Cの仕様ではなくてMasterとSlaveのI2Cを制御する
> > > プログラムの遅延時間次第です。
> > > I2C自身の仕様では遅延時間は必要ありません。
> > >
> > > > PIC24FのI2CのSlave通信について教えてください。
> > > > MasterがSlaveからデータを連続で複数取得する場合、Slaveは、データを送信する側としてデータを送る度にWait時間が必要になるのでしょうか。
> > > > 100μsのWaitで動作させるとデータが抜けたりしたため、1ms程度まで増やすと正常にデータを受信することができました。
> > > > 参考にしたサイトでは、約2ms程度の遅れが必要とありました。
> > > >
> > > > 仕様的にどうなっているかご教示頂けないでしょうか。
> > > > よろしくお願い致します。

- WebForum -