roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 21:46

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: передача переменных между контроллерами
СообщениеДобавлено: 29 дек 2005, 12:50 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2005, 08:08
Сообщения: 265
Откуда: Москва
Кто силен в программизме? Мне нужно из одного контроллера в другой передать значения около десятка переменных по i2c. Как это лучше организовать? Структурой?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 13:01 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
дак по-байтно и передать.  можно конечно сделать i2c слэйв, а можно просто по линии SDA передать с помощью програмного UART.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 13:06 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2005, 08:08
Сообщения: 265
Откуда: Москва
у меня и будет мастер и слейв, я хочу сообразить, в программе как это организовать. Слейв будет передавать. Как мастер будет запрашивать значение какой-л. переменной?
Например, мастер хочет узнать у слейва, какое значение у него имеет переменная А. Как это сделать? Я с i2c только с часами и памятью работал.
А так как переменных передавать много, чтобы не терять времени на запрос каждой переменной, нужно передать сразу пакет. И как это сделать я вообще не догоняю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 13:29 
Не в сети

Зарегистрирован: 23 июл 2005, 00:39
Сообщения: 63
Откуда: Казань
40inD писал(а):
у меня и будет мастер и слейв, я хочу сообразить, в программе как это организовать. Слейв будет передавать. Как мастер будет запрашивать значение какой-л. переменной?
Например, мастер хочет узнать у слейва, какое значение у него имеет переменная А. Как это сделать? Я с i2c только с часами и памятью работал.
А так как переменных передавать много, чтобы не терять времени на запрос каждой переменной, нужно передать сразу пакет. И как это сделать я вообще не догоняю.

Переменная характеризуется адресом и размером в байтах. Передать переменную - значит, передать N байт, располагающихся по её адресу. На приёмной стороне эти байты записываются по адресу какой-нибудь переменной такого же размера. Тип переменной не имеет значения.
Если нужно запрашивать переменную именно по идентификатору, можно прошивать во флэш-память опрашивающего м/к список переменных, который создаётся компилятором для прошивки опрашиваемого м/к (.map файл), и вести по нему поиск адреса для запрашиваемой переменной, который затем и передавать в запросе. Можно и наоборот - в запросе передавать идентификатор переменной, а поиск по .map вести на опрашиваемом м/к.


Последний раз редактировалось wolf 29 дек 2005, 13:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 13:42 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Тут смотря как удобнее: сразу всю пачку передавать или по-одно? Если в разном порядке или не все нужны в данный момент - лучше на каждую свой запрос делать. А если надо все сразу - просто слать их друг за другом в установленном порядке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 14:36 
Не в сети

Зарегистрирован: 18 дек 2004, 03:14
Сообщения: 155
Откуда: Москва
И смотря насколько универсально это должно быть.
Если планируется читать каждый раз один и тот же набор переменных, то пусть слейв на любой запрос на чтение просто последовательно высылает все значения, а мастер пусть их раскладывает куда надо. Можно для приёма такую структуру сделать
Код:
union  inbuf_
{
 unsigned char buffer[5];
 struct
 {
   unsigned char A;
   unsigned int  B;
   unsigned int  C;
 };
} inbuf;


А если планируются разные запросы к слейву, то есть стандартный подход -- передавать ему ID переменной, которую хочется прочитать. В принципе, можно сделать так, что 0x01 -- это переменная A, 0x02- B и т.д., а 0x10 -- это все переменные скопом.
Короче, можно сделать как угодно  ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 17 июн 2005, 08:08
Сообщения: 265
Откуда: Москва
Да, планируется читать каждый раз один и тот же набор переменных.
Так что посылка фиксированной структуры на запрос мастера - идеальный вариант. Засада в том, как слейвом передавать несколько байт сразу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 15:03 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
40inD писал(а):
Засада в том, как слейвом передавать несколько байт сразу.


да в чем засадо то? как в память передаешь сразу страницу байт за байтом так и делай.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 15:06 
Не в сети

Зарегистрирован: 23 июл 2005, 00:39
Сообщения: 63
Откуда: Казань
40inD писал(а):
Да, планируется читать каждый раз один и тот же набор переменных.
Так что посылка фиксированной структуры на запрос мастера - идеальный вариант. Засада в том, как слейвом передавать несколько байт сразу.

В даташите по шагам расписано, как это делать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 29 дек 2005, 21:41 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
40inD писал(а):
Засада в том, как слейвом передавать несколько байт сразу.


Ну, тут без вариантов, в очередь эыти байты выстроить и через интерфейс передать...  :roll:


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

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


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

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


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

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