-
1. Data: 2009-02-10 20:39:51
Temat: AVR i TWI (I2C)
Od: g...@n...invalid (Adam Wysocki)
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?
--
http://www.extreme-photo.pl/
-
2. Data: 2009-02-10 23:01:20
Temat: Re: AVR i TWI (I2C)
Od: "PcmOL" <...@...net>
"Adam Wysocki" <g...@n...invalid> wrote in message
news:gophi.pme.1234298391@news.chmurka.net...
> 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.
-
3. Data: 2009-02-10 23:06:21
Temat: Re: AVR i TWI (I2C)
Od: PH <s...@w...pl>
Adam Wysocki pisze:
> 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?
>
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.
--
PH
-
4. Data: 2009-02-11 07:53:08
Temat: Re: AVR i TWI (I2C)
Od: "PcmOL" <...@...net>
"PH" <s...@w...pl> wrote in message
news:gmt4jf$uo4$1@julia.coi.pw.edu.pl...
> Adam Wysocki pisze:
>> 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?
>>
>
> 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.