roboforum.ru

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

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


Правила форума


Правила раздела OpenRobotics



Начать новую тему Ответить на тему  [ Сообщений: 293 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20
Автор Сообщение
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 10:34 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Тайминги похоже неправильно расчитаны.

Я бы по-другому сделал. Сделать таблицу, в которую записаны состояния выходов серв, и время след. переключения. Прерывание по таймеру получится намного короче. Управление моторами сделать по прерыванию от таймера 2, а чтение АЦП - по прерыванию от самого АЦП.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 11:21 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Можно и по другому :)

Про таблицу - давай подробнее - если обнаруживаем, что не успеваем выйти из прерывания - начинаем в нём зависать, а по UART'у теряем данные?

Добавлено спустя 1 минуту 53 секунды:
Я вообще пока делаю "что бы хоть как-то работало и можно было использовать", приводить в идеальное состояние прошивку вроде можно и позже?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 11:36 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
У тебя шлюз изначально на 16МГц работал, и в принципе все успевало. Сейчас тактовая более чем в 2 раза ниже. уарт вряд ли потеряем, даже на 115200 получается 640 тактов на байт. А вот само прерывание по таймеру подгружает процессор неслабо, и надо бы его подсократить. Щас накидаю примерный код.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 12:56 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2blindman: Погоди, а зачем? Это же самостоятельная прошивка, в неё ничего кроме этой прошивки не происходит? Какая цель? Увеличить количество шагов по серве?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 13:47 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
А ты свой код дизассемблируй и поймешь. В прерывании от таймера в стэке сохраняются 28(!) регистров. Сохранение-восстановление одного регистра - 8 тактов, плюс столько же на вход и выход из прерывания. То есть если процессор только тем и будет заниматься, что обрабатывать это прерывание, получим 30 шагов - явно маловато, да и процессору кроме этого еще есть чем заняться. Да и вообще делать по принципу "работает - и ладно" - неправильно, ИМХО.

Добавлено спустя 36 минут 59 секунд:
Код:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

uint8_t* port;
uint8_t* servoPtr;
uint8_t servoValues[9*2];

ISR(TIMER0_COMP_vect)
{
    uint8_t time = *servoPtr;
    servoPtr++;
    *port = *servoPtr;
    servoPtr++;
    if (time) {
        OCR0 += time;
    } else {
        TCCR0 = 0;
    }
}


port - адрес порта, к которому подключены сервы, для обращения как к ячейке памяти.
servoPtr - указатель на текущее значение в таблице servoValues
servoValues - таблица, содержащая значения выводимые в порт, и время, в течение которого это время сохраняется. Каждые 4-5 мс устанавливаем новое значение port, ставим servoPtr на начало таблицы, заполняем таблицу значениями, выводим все 1 в порт и запускаем таймер на срабатывание прерывания через 1000 мкс (мин. длина импульса). Например если у нас 3 сервы подключенные к порту B[1,7,2], и длительность импульсов 1000, 1100, 1300 то таблица будет выглядеть так:
{100, 11111101b, 200, 01111101b, 0, 01111001b}, только длительность естественно надо пересчитать из микросекунд в периоды тактовой частоты таймера, port будет 0x38.

Если все это на ассемблере написать, 100 шагов можно будет получить, причем на любой ноге МК. Ну и все прочие обработчики прерываний пересмотреть, чтобы прерывания были запрещены минимальное время.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 16:26 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
а я всегда говорю - асм рулит )
на сях оно конечно быстрей получится... и проще... но тяжелее...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 16:29 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Получается впихнуть все прерывание в 60 тактов процессора, с учетом времени на вход в прерывание и выход из него. Значит можно будет сделать разрешение в 64 такта, или 8.68 мкс. На интервале в 1000 мкс это будет 115 шагов. В наихудшем случае, когда все 8 выводов порта используются для серв, и длительности импульсов отличаются на 1 шаг, получаем что в этом прерывании залипаем на 8*64= 512 тактов раз в 5мс, времени для обработки уарта и прочих прерываний более чем достаточно.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разработка Open Robotics: Контроллер общ. назн., SMD-вариант
СообщениеДобавлено: 31 мар 2009, 16:41 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Ок, не спорю - можно сделать вообще красиво :) но лучше сначала "как-то", а потом "красиво" :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 293 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20

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


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

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


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

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