I2C (Arduino)

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Sobota Prosinec 12 21:50:45 CET 2020


Muzete prozkoumat zdrojaky knihoven. Ale cekal bych, ze available bude 
neblokujici a ze se mozna pouziva i preruseni a buffer pro komunikaci.
Ale je to jen hypoteza, nezkoumal jsem. Nebo to nejak ruzne zkouset a 
odhadnout podle chovani. Ale ta ATMEGA je ak jednoducha, ze bych se asi 
do tech zdrojaku podival.

Dne 12.12.2020 v 21:44 Petr Zapadlo napsal(a):
> Však já tam tuhle funkci používám, ale byl jsem svědkem toho, že I2C 
> slave byl nějaký zaseklý a Atmegu mi resetoval WDT, protože se čekalo 
> na nějakou operaci na I2C sběrnici.
>
> Snažím se tomu nějak předejít a když nad tím tak přemýšlím, tak podle 
> mě  už Wire.requestFrom(I2C_SLAVE_ADDRESS, 10); musí zajistit ten 
> přenos dat do bufrů, které jsou pak testovány pomocí Wire.available()
>
> Jelikož nikde nejsou nějaké pauzy na přenos, a funkce RequestFrom a 
> available jdou hned za sebou, tak podle RequestFrom končí až v 
> okamžiku, kdy je v bufru 10 byte a pokud zahapruje Slave, tak se to 
> pozná už v rámci RequestFrom.
>
> A tem jsem možnost nějakého timeout nenašel.
>
> Myslím si to správně?
>
> Petr
>
> Dne 12. 12. 20 v 21:33 Petr Labaj napsal(a):
>> Já o Arduinu vím pendrek. Ale podle dokumentace je tam funkce 
>> available(),
>> která je určitě neblokující a říká, kolik dat je k dispozici.
>> Takže si timeout a ošetření kolapsu partnera snadno uděláte podle 
>> libosti sám.
>>
>> PL
>>
>> ***********************
>>
>> Dne 12.12.2020 v 21:04 Petr Zapadlo napsal(a):
>>> Zdravím,
>>>
>>> měl bych dotaz k použití I2C sběrnice, resp k její obsluze.
>>>
>>> Je to na ATmega328. Příkladový kousek kodu:
>>>
>>> Wire.requestFrom(I2C_SLAVE_ADDRESS, 10);
>>> while (Wire.available()) {
>>>       pole[i] = Wire.read();
>>>       i++;
>>>       if (i>=10){break;}
>>>     }
>>>
>>> A můj dotaz, jak se to bude chovat když Slave nějak zahapruje.
>>>
>>> Funkce Wire.requestFrom(I2C_SLAVE_ADDRESS, 10); má vrátit počet 
>>> byte, tj v mém případně bych měl dostat  číslo 10. Už tato funkce 
>>> načte těch 10 byte do bufru? A nebo jen dá pokyn "otroku posílej 
>>> data" a na vlastní přenos nečeká?
>>>
>>> Má smysl testovat návratovou hodnotu z této funkce?
>>>
>>> Když Slave neodpoví, kde se to zasekne, bude se někde na něco čekat? 
>>> Je tam nějaký timeout?
>>>
>>> Díky
>>>
>>> Petr
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list