Страница 1 из 3

Pins SDK

СообщениеДобавлено: 27 сен 2013, 23:00
phoenix367
В процессе исследования виртурилки мне стало понятно, что для написания под нее программ на C++ потребуется SDK для управления пинами ввода-вывода. Поскольку по понятным причинам в природе такого не существует, то возникло желание его разработать и заодно поближе познакомится с особенностями ввода-вывода на виртурилке. Поэтому был запилен проект с использованием тулчейна Codesourcery. Его довольно удачно удалось прикрутить к NetBeans IDE, что существенно облегчило сам процесс разработки. Даже удалось заставить работать отладчик (правда в ограниченном объеме). Сам проект я решил сделать открытым и выложил на гитхабе по адресу https://github.com/phoenix367/v2rpins_sdk.

Сейчас там конечно немного всего - только управление пинами аппаратного PWM и демонстрационная программа. Но надеюсь, что со временем проект удастся развить до нормального состояния.

Если есть желающие присоединиться к разработке - you are welcome. Замечания и пожелания также приветствуются.

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 00:54
andrewion
Добрый день!

Было бы очень круто, если бы у вас в SDK была бы возможность управлять сервой как в ардуино. А то сейчас сижу и курю вики (http://wiki.virt2real.ru/wiki/PPM) как расчитать эти тики и дути так, чтобы можно было бы управлять сервой в градусах, а не магическими заклинаниями формул из вики :D

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 01:34
phoenix367
Так вроде поворот сервопривода на заданный угол зависит от его характеристик, т.е. для разных приводов нужна разная длительность импульсов, чтобы они на одинаковый угол поворачивались. Или я не прав?

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 11:23
Arle
Нужно управление камерой, сервомашинками, управление входами выходами. Ну и работа на андроиде )))

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 11:43
Mirmik
phoenix367 писал(а):Так вроде поворот сервопривода на заданный угол зависит от его характеристик, т.е. для разных приводов нужна разная длительность импульсов, чтобы они на одинаковый угол поворачивались. Или я не прав?


... Плюс-минус конечно есть... Но лишь в пределах некоторой погрешности.
Практически же интерфейс подавляющего большинства "радиолюбительских" серв стандартный.

Чтобы не быть голословным, у Ардуино есть библиотека Servo.h, которая заводит с полпинка большинство сервоприводов. Одно то, что такая библиотека существует говорит о том, что задача решается.

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 11:49
Mirmik
Вот формула пересчета из градусов, если верить той инфе, что выложил камрад Gol.
(Хотя, должен сказать, что числа, ИМХО немного другие... Даже на видео, идущем в вики видно, что серва не доворачивается.)

#define grade_0 16666
#define grade_180 52380
duty=grade*(grade_180-grade_0)/180+grade_0;

Причем формула подходит не только для серв с лимитом в 180.

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 14:11
andrewion
phoenix367 писал(а):Так вроде поворот сервопривода на заданный угол зависит от его характеристик, т.е. для разных приводов нужна разная длительность импульсов, чтобы они на одинаковый угол поворачивались. Или я не прав?


Вроде правильно пишете. Но на Ардуино мы же просто указываем угол поворота, а не длительность импульсов.

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 14:15
andrewion
Mirmik писал(а):Вот формула пересчета из градусов, если верить той инфе, что выложил камрад Gol.
(Хотя, должен сказать, что числа, ИМХО немного другие... Даже на видео, идущем в вики видно, что серва не доворачивается.)

#define grade_0 16666
#define grade_180 52380
duty=grade*(grade_180-grade_0)/180+grade_0;

Причем формула подходит не только для серв с лимитом в 180.


Круто! Спасибо!

хм... что-то тут не так с константами, не совсем корректно работает у меня

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 18:55
Mirmik
andrewion писал(а):хм... что-то тут не так с константами, не совсем корректно работает у меня


И я о том же... У меня так 57000 верхний предел стоит...

Re: Pins SDK

СообщениеДобавлено: 28 сен 2013, 19:05
scayn
Для начала мне кажется необходимо разобраться с пинами. В вики распиновка не бъет. Пытался повесить на них оптические датчики. Только методом научного тыка удалось найти соответствие нескольких пинов. Есть ли точная схема распиновки платы?
И еще пара вопросов. Способ чтения пинов:
Код: Выделить всё
cat /dev/v2r_pins
выдает очень неудобный результат. Раньше писал на delphi. А вот в с++ делаю первые шаги. Я так понимаю нужно создать масив равный количеству пинов и обращаться к нужному элементу. Вопрос №1 в каком формате выдается результат комонды cat /dev/v2r_pins и как его запихнить в массив. Вопрос №2 может есть способ читать напрямую кокретный пин?