Обсуждение реализации шлюз-контроллера [ORFA]

Разработка стандартизированных модулей для домашнего робостроения.
Правила форума
Правила раздела OpenRobotics

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 12 июн 2009, 09:37

Логично :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 12 июн 2009, 09:53

Ещё лучше придумал. Делаем кучу обработчиков прерываний, каждый из которых берёт по фиксированным адресам задержку и маску порта, выводит в порт, перенастраивает таймер, и устанавливает адрес нового обработчика. И никакой косвенной адресации, никаких проверок условий! И процессор практически нагружаться не будет
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

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

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 12 июн 2009, 10:02

Блин, и правда! :)

Добавлено спустя 1 минуту 9 секунд:
Срочно патентовать! :-D

Добавлено спустя 27 секунд:
PS: Я пропадаю до вечера завтра, уезжаю из города.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение Duhas » 12 июн 2009, 11:28

и написать все эти манипуляции на асме, чтоб потом только вызывать из под сей...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 12 июн 2009, 11:54

Вероятнее всего, хотя может получиться что компилятор C сгенерирует точно такой же код, так как действия там элементарные. Тогда оставим на C, для лучшей читабельности
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

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

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение Duhas » 12 июн 2009, 11:57

ну если такой же, то ессно нет смысла...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 15 июн 2009, 23:02

Придумалось по поводу управления сервами - делаем обработчики прерывания 4 видов:

Вид 0: Выставляем порт в 0, выставляем таймер, выставляем следующий обработчик прерывания, курим.

Вид 1: В зависимости от значения специальной ячейки памяти выставляем таймер, устанавливаем следующим обработчиком прерывания нужный.

Вид 2: Выставляем таймер, маску порта, ждём не выходя из прерывания нужное время, выставляем вторую маску порта, выставляем следующий обработчик.

Вид 3: Выставляем таймер, маску порта, выставляем следующий обработчик.

Прескэйлер пользуем 1/32, т.е. разрешение получим 4.34мкс, на 2500мкс это 576 шагов.

Делаем на каждые пару пинов такой набор:
Обработчик вида 0 с паузой 400мкс => обработчик вида 1 с паузой X мкс и ветвлением, уходим либо на
А) 2 подряд обработчика вида 2 с выходом на обработчик вида 0 следующей пары пинов;
Б) 3 подряд обработчиков вида 3 с выходом на обработчик вида 0 следующей пары пинов;

Добавлено спустя 7 минут 47 секунд:
Если положения серв близки, выставляем ветвление на А), иначе на Б).

Пусть А), если положения больше 1500мс, тогда размещаем их во втором обработчике, а первый просто обеспечивает паузу. Иначе размещаем их в первом обработчике, а второй обеспечивает паузу.

Иначе если Б) - аналогично выбираем каким обработчиком обеспечить паузу, а каким переключать пины.

Добавлено спустя 16 секунд:
PS: Всем мозг сломал? :P
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 16 июн 2009, 04:09

Нужны только 3 вида обработчиков прерывания:
  1. Выставить оба вывода в 1
  2. Выставить один или оба вывода в 0 по маске
  3. Выставить один вывод в 0, подождать, выставить второй вывод в 0
Каждый из обработчиков разумеется выставляет после себя паузу и адрес следующего обработчика в цепочке. Просто пауза, без изменения состояния выводов, реализуется вариантом 2 с маской 0xFF.

Каждый обработчик будет проглатывать 4 байта данных : маска, пауза, адрес следующего обработчика.


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

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

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 16 июн 2009, 08:44

А разве для 3 не надо 2 маски?

Добавлено спустя 13 минут 7 секунд:
А условного прерывания не надо разве? Чередовать что ли 2 и 3 будем?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 июн 2009, 20:41

Пожалуй продолжу, а то уже пора завязывать с драйвером серв :)

Итак до чего мы дошли - условное прерывание вроде бы всё-таки надо?

шаги в 32 такта, шагов на цикл длиной 2500мкс порядка 587.

Итого имеем структуру обработчиков для каждой пары портов:
1. Выставляем в оба порта по AND-NOT-маске M0 (может - какие порты включены) единицы, таймер на X0 шагов;
2. Выбираем по селектору M1 какой обработчик нам нужен - сдвоенный или одинарный, таймер на X1 шагов;

3A. Вариант одинарного обработчика:
i. Выставляем OR-маску M2, таймер на X2 шагов;
ii. Выставляем OR-маску M3, таймер на X3 шагов;

3B. Вариант сдвоенного обработчика:
i. Выставляем OR-маску M2a, пауза X2a шагов, ставим OR-маску M2b, таймер на X2b шагов;
ii. Выставляем OR-маску M3a, пауза X3a шагов, ставим OR-маску M3b, таймер на X3b шагов;
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 июн 2009, 20:57

=DeaD= , это проще написать в коде, чем описать словами :D Я вот понимаю, как оно должно работать, а описать затрудняюсь, и твоё описание не понимаю :)
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

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

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 июн 2009, 21:15

Кстати, одинарные обработчики и правда можно ликвидировать.

Итого имеем структуру обработчиков для каждой пары портов:
1. Выставляем в оба порта по AND-NOT-маске M1a (может - какие порты включены) единицы, таймер на X1a шагов;
2. Выставляем OR-маску M2a, пауза X2a шагов, ставим OR-маску M2b, таймер на X2b шагов;
3. Выставляем OR-маску M3a, пауза X3a шагов, ставим OR-маску M3b, таймер на X3b шагов;
4. Выставляем OR-маску M4a, пауза X4a шагов, ставим OR-маску M4b, таймер на X4b шагов;

Добавлено спустя 12 минут 5 секунд:
Кстати, а #define вложенными можно делать? :roll:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 июн 2009, 21:20

=DeaD= писал(а):Кстати, а #define вложенными можно делать?

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

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

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

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение Vooon » 17 июн 2009, 21:37

Хм, или я не понял что деад хочет, или путаю...
Но препроцессор гцц умеет несколько раз разворачивать подстановку.
Видел примеры в исходниках какй-то осрв, там пин дефайнился как PORTB, PINB, 0 и с ним работали макросы.

--
Нашел: http://scmrtos.svn.sourceforge.net/view ... iew=markup

Код: Выделить всё
vovan@vovan-laptop:/tmp$ cat test.c
// preprocessor test

#include <stdio.h>

int a=-3, b=-2, c=-1;

#define _OPER(_a, _b, _c) _a = 1; _b = 2; _c = 3
#define OPERATION(x) _OPER(x)

#define ARGS a,b,c

int main()
{
        printf("a=%i, b=%i, c=%i\n", a, b, c);

        OPERATION(ARGS);

        printf("a=%i, b=%i, c=%i\n", a, b, c);

        return 0;
}
vovan@vovan-laptop:/tmp$ gcc -std=c99 test.c
vovan@vovan-laptop:/tmp$ ./a.out
a=-3, b=-2, c=-1
a=1, b=2, c=3
vovan@vovan-laptop:/tmp$
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 июн 2009, 21:39

То есть работает вложенный #define? :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Open Robotics

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

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