roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 фев 2025, 22:07

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Если ответа нет?
СообщениеДобавлено: 14 мар 2012, 19:35 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Вот думаю как красивее сделать? Если нет ответа от 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; 
}

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Если ответа нет?
СообщениеДобавлено: 15 мар 2012, 03:50 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Если ответа нет?
СообщениеДобавлено: 15 мар 2012, 15:04 
Не в сети
Аватара пользователя

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

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Если ответа нет?
СообщениеДобавлено: 15 мар 2012, 16:36 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO