0
TWIマスターからバスへの接続を初期化しようとすると、何らかのエラーが発生します。開始条件は送信されますが、プロセッサはバスにスレーブ・アドレスを送信し始める無限ループ・ビーバーで待機します。TWI on ATMega 2560待ち時間無限ループ
私はまた、バス上の信号を分析しました。その結果、クロックが動作していますが、バスにはデータが送信されません。
プロセッサ待ち時間は、矢印の付いた行にあります。
我々は
void i2c_master_init() {
TWBR = (uint8_t)TWBR_val;
}
void i2c_master_stop() {
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
}
uint8_t i2c_master_start(uint8_t address) {
TWCR = 0;
TWCR |= (1<<TWSTA);
TWCR |= (1<<TWEN);
TWCR |= (1<<TWINT);
while(!(TWCR & (1<<TWINT))); <--
[...]
}
は現在、私は、コードと間違って何が起こっているのか、分からない...起動し、バスを初期化するために、次のコードを使用します。それとも別のことをやっているのですか?誰でも助けてくれますか?
ありがとうございます。
お手伝いいただきありがとうございますが、現在別の問題が見つかりました。クライアント(スレーブ)は16MHzで動作し、ホスト(マスタ)は8MHzで動作します。これも問題です。したがって、2つのシステムは通信できません。 – FoxPixel
しかし、私たちは今問題を発見しただけです。 – FoxPixel
データシートの章24.5.2に示すように、TWIはCPUクロックについて話していますが、TWIは「TWBR」と「TWPS」レジスタを構成するバス速度(最大400kHz)を設定できます。計算方法については[ライブラリ実装](https://github.com/maximecb/AVR-Alarm-Clock/blob/master/i2cmaster.c)をご覧ください。 – andy