AVR i TWI (I2C)

Feb 10, 2009 3 Replies

Cześć,



Próbuję użyć TWI w AVR i mam pytanie - skąd mam wiedzieć, że STOP już został wysłany i mogę wysłać następny START?


Jako master nie musisz czekac na STOP. Mo¿esz wysy³aæ REPEATED START. Ja w³a¶nie wykombinowa³em jak nie wysy³aæ STOP.

Adam Wysocki pisze:

void i2c_stop(void) { /* send stop condition */ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); // wait until stop condition is executed and bus released while(TWCR & (1<<TWSTO));

}/* i2c_stop */

Czyli dopóki TWSTO jest wysokie, to nic nie powinieneś robić. Ale.. osobiście miałem problemy z slave'ami które miały z jakiegoś powodu wolną obsługę I2C. Za stopem a przed kolejnym startem, wstawiałem delaya - i się już dobrze bujało.

Ciekawiej siê robi w ¶rodowisku multimaster. Jest sobie SLAVE RECEIVER i czeka na stop, ¿eby prze³±czyc sie na MASTER TRANSMITTER i wys³aæ swoje. Niby jest TWSR = A0 ( TWI_SRX_STOP_RESTART), ale jak elegancko rozró¿niæ te dwa stany? Eeech.... biorê siê za lekture.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required