roboforum.ru

Технический форум по робототехнике.

Если ответа нет?

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Если ответа нет?

Сообщение Korbofos » 14 мар 2012, 19:35

Вот думаю как красивее сделать? Если нет ответа от i2c девайса чтобы не сгинуть в цикле, как от этого лучше защитится? Таймер отдать для этого? Или както так?
Код: Выделить всёРазвернуть
unsigned char i2c_read_byte(void) 

unsigned int wait =65535;
TWCR = (1 << TWINT) | (1 << TWEA) | (1 << TWEN);
while (!(TWCR & (1 << TWINT))&&wait--); 
return TWDR; 
}
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Если ответа нет?

Сообщение Radist » 15 мар 2012, 03:50

Давно с ним не работал, но вроде там просто. Мастер делает клоки, пишет адрес и прочее, и вот доходит дело до аска от ведомого. Как узнать что его нет? Речь идет видимо о программной реализации протокола. В апликухах атмела этот пример есть, рекомендую глянуть, наверняка там это все есть.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Если ответа нет?

Сообщение Korbofos » 15 мар 2012, 15:04

мне нужно выполнять программу дальше не зацикливаясь в while (!(TWCR & (1 << TWINT))) если не поступит ответ...
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Если ответа нет?

Сообщение Dmitry__ » 15 мар 2012, 16:36

Так и делается как ты описал. Если проц очень шустрый и не хочется терять время на такие ожидалки, то такой обработчик делается через прерывание (например тик обработки i2c - каждые 10 мкс.), а основная программа опрашивает флаги статуса этого обработчика.
Сам обработчик будет конечным автоматом.
Влетел в прерывание, ушел на ветку текущего состояния, обработал кусок, изменил/оставил как есть состояние автомата, выставил флаги, свалил из прерывания...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13