roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 227 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 21:23 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Эх.... придется задачу в курс крапать по управлению SERVO !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 21:37 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Цитата:
Чему равна длительность '0', если переод равен 20мс, а длительность '1'  равна 1,5 мс?

20-1.5=18.5


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 00:21 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Lirzman писал(а):
Цитата:
Чему равна длительность '0', если переод равен 20мс, а длительность '1'  равна 1,5 мс?

20-1.5=18.5


Добавте это пожалуйста в программу.

Анатолий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 00:23 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Я наконец въехал, неполучалось из-за подмены понятий. :D
Через 5 минут выложу псевдокод


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 00:39 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Вот псевдокод, взята за основу ваша(aesok) картинка(2 стр назад)
Для кратости привожу в примере только 3 сервы
Код:
cur_servo;//серва на которую подаём сигнал в данный момент
if(cur_servo=1)
{clear_bit(3);
set_bit(1);
cur_servo=2;
wait(servo_time_1);
}
else if(cur_servo=2)
{clear_bit(1);
set_bit(2);
cur_servo=3;
wait(servo_time_2);
}
else if(cur_servo=3)

{clear_bit(2);
set_bit(3);
cur_servo=4;
wait(servo_time_3);
}
else if(cur_servo=4)
{clear_bit(3);
cur_servo=1;
wait(period - servo_time_1 - servo_time_2 - servo_time_3);
}


Вот так всё просто, если не сказать элементарно.

!!!НО!!! как мне сделать вычитание(последнюю функцию wait) если period=1 а servo_time_X = 62000..58500?

Может сложением? :shock:  :shock:  :shock:


Последний раз редактировалось Lirzman 17 авг 2006, 01:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:01 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Во-первых можно не писать else, пиши подряд if, так тоже работает.
Во-вторых у тебя есть маленькая опечатка:
else if(cur_servo=2)
{clear_bit(1);
set_bit(2);
cur_servo=3;
wait(servo_time_2);
}
else if(cur_servo=3)

{clear_bit(1); <<<<<<< Здесь должен быть бит 2. Ну сказал на всяк случай чтоб другие не путались.
set_bit(3);
cur_servo=4;
wait(servo_time_3);
}
else if(cur_servo=4)
{clear_bit(3);
cur_servo=1;
wait(period - servo_time_1 - servo_time_2 - servo_time_3);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:02 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Спасибо, исправил :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:05 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Так что мне с последней проблемой делать?

Не писать же таблицу соответствий для углов поворота/тиков таймера??? :shock:

Цитата:
Во-первых можно не писать else, пиши подряд if, так тоже работает.

А что в псевдокоде строгие правиля синтаксиса тоже есть? :D  :D  :D


Последний раз редактировалось Lirzman 17 авг 2006, 01:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:07 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Какая разница?
Главное что-б людям понятнее было.


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

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Цитата:
Слушай, а зачем делатьэто все на таймере1, ведь вроде это может и с таймером0 уместиться.

Страницы на 3-4 назад отмотай и все поймешь


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

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Да, главное чтоб понятней =) ну по-крайней мере псевдо код нужно писать покороче, ну а потом уже расписывать как нужно.., я так считаю.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:16 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Цитата:
ну по-крайней мере псевдо код нужно писать покороче

Ладно проехали(уже написал). :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:20 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Lirzman писал(а):
!!!НО!!! как мне сделать вычитание(последнюю функцию wait) если period=1 а servo_time_X = 62000..58500?

Здесь объясни пожалуйста, как период может быть равен 1,  если он должен быть равен 20мс? или я не в том направлении мыслю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:22 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Lirzman писал(а):
Вот псевдокод, взята за основу ваша(aesok) картинка(2 стр назад)
Для кратости привожу в примере только 3 сервы
Код:
cur_servo;//серва на которую подаём сигнал в данный момент
if(cur_servo=1)
{clear_bit(3);
set_bit(1);
cur_servo=2;
wait(servo_time_1);
}
else if(cur_servo=2)
{clear_bit(1);
set_bit(2);
cur_servo=3;
wait(servo_time_2);
}
else if(cur_servo=3)

{clear_bit(2);
set_bit(3);
cur_servo=4;
wait(servo_time_3);
}
else if(cur_servo=4)
{clear_bit(3);
cur_servo=1;
wait(period - servo_time_1 - servo_time_2 - servo_time_3);
}


Вот так всё просто, если не сказать элементарно.


Отлично 4 с 2 плюсами!!!!!

Цитата:

!!!НО!!! как мне сделать вычитание(последнюю функцию wait) если period=1 а servo_time_X = 62000..58500?

Может сложением? :shock:  :shock:  :shock:


Еще один плюс!!!! Да сложением. Еще раз проанализируйте как работает таймер, и попытайтесь понять почему именно сложением.

wait(servo_time_X); - это TCNT1=servo_time_X;
И у вас практически готовый код обработчика прерывыний таймера!!!

Анатолий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 авг 2006, 01:27 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Сергей писал(а):
Lirzman писал(а):
!!!НО!!! как мне сделать вычитание(последнюю функцию wait) если period=1 а servo_time_X = 62000..58500?

Здесь объясни пожалуйста, как период может быть равен 1,  если он должен быть равен 20мс? или я не в том направлении мыслю?

Фу, блин, дошло=)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 227 ]  На страницу Пред.  1 ... 11, 12, 13, 14, 15, 16  След.

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


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

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


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

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