Arduino для BAIT BOAT...

V_Alex
Probelzaelo:

Итого, в нашем распоряжении 256 позиций для всего диаппазона используемых значений. это и на ход и на яркость и на все что угодно,

Вы не совсем поняли мой вопрос. Канальный импульс изменяется от 1 мс до 2 мс. АТМEGA своим 8-разрядным таймером формирует этот импульс целиком. Т.е. для 1 мс это составляет 127 тиков, а для 2 мс - 255 тиков. В этом случае на рабочий ход сервы приходится не 255, а 255-127=128 тиков. Если Вы сперва принимаете сервосигнал с такой-же точностью, а при этом он составляет, например, 201,5 тика, то контроллер его воспринимает то, как 201 тик, то как 202 тика. При обработке это колебание импульса передается на выход и серва, подключенная к этому выходу, будет скакать между этими двумя состояниями (зудеть), поскольку нормальное разрешение аналоговой сервы составляет примерно 0,5% хода и один тик больше этого значения.
Скачки импульса должны с запасом помещаться в эту мертвую зону, поэтому разрешение сервосигнала и должно составлять 1024 бита или лучше. Точность, которую обеспечивает Ардуино, достаточна для работы РЦ-свичей. Если сигнал вырабатывается контроллером, а не приходит извне и не обрабатывается, то разрешения 128 тиков вполне достаточно и для сервы. Для робота эти “ступеньки” будут незаметны. А вот для построения V-микшера под сервы Ардуино не годится, хотя с регуляторами такой микшер работать будет вполне терпимо.

Панкратов_Сергей:

А что мешает применить 16-ти битный таймер?

Или обойтись вовсе без таймера 😃

Панкратов_Сергей
Probelzaelo:

Разве что то мешает?

Probelzaelo:

У процессора ATMega есть маленькая особенность, за длительность импульсов шим сигнала отвечает встроенный таймер, с разрядностью всего 8 бит.

Мешает… То что Атмеге незаслуженно приписали какую то несуществующую особенность

Probelzaelo
V_Alex:

АТМEGA своим 8-разрядным таймером формирует этот импульс целиком. Т.е. для 1 мс это составляет 127 тиков, а для 2 мс - 255 тиков.

Нет, 256 это протяженность импульса, пауза специально отрабатывается, процесс запускается стабильно и с заданной периодичностью, с момента старта начинается импульс, далее отсчитывается его длительность и сбрасывается далее пауза на все оставшееся время до следующего старта и так далее… частота при этом получается неизменна, а скважность(длительность) импульса зависит от заданного значения.

V_Alex:

Или обойтись вовсе без таймера

При использовании библиотеки Servo про таймер можно не думать. Просто нужно помнить что зависимость от него ни куда не делась и что при использовании ШИМ, все завязано “аппаратно” и просто не нужно использовать соответствующий таймер для каких то других целей, благо таймеров несколько и можно выбрать каким пользоваться для чего.
Совсем без таймера будет сложновато. хотя, если нет ни каких других задач то возможно написать и собственный программный ШИМ, например тупо работающий “в лоб” или на выдержках пауз типа delay() только при этом будет совсем не эффективное использование процессора. В принципе(для лекторов), можно использовать и 16 битный таймер и черта в ступе…

Панкратов_Сергей:

Мешает…

У меня попкорн закончился, вернусь и внимательно слушаю дальше… вдруг что полезное мелькнет …

Панкратов_Сергей
Probelzaelo:

У меня попкорн закончился,

Вы с этим завязывайте… Если советуете, то головой не жевать нужно.
А так у вас таймеры не только 16 битные у атмеги пропадут, а и 8-ми битные.

Probelzaelo:

У процессора ATMega есть маленькая особенность, за длительность импульсов шим сигнала отвечает встроенный таймер, с разрядностью всего 8 бит.

Probelzaelo
Панкратов_Сергей:

А так у вас таймеры не только 16 битные у атмеги пропадут, а и 8-ми битные.

Не не не, не отпадут, я их намертво присобачил синей изолентой…

V_Alex
Probelzaelo:

Нет, 256 это протяженность импульса, пауза специально отрабатывается…

Сам импульс меняется не от 0% до 100%, а от 50% до 100% (от 1 до 2 мс). Если 100% - 255 тиков, то 50% - это 127 тиков.

Probelzaelo
V_Alex:

Сам импульс меняется не от 0% до 100%, а от 50% до 100% (от 1 до 2 мс). Если 100% - 255 тиков, то 50% - это 127 тиков.

это для случая когда есть нейтраль где то по середине но сигнал может быть и 1 и 50 тиков 0-50% одним словом примерно такие должны быть параметры – 700мс=0%=0, 1510мс=50%=127, 2200мс=100%=255
так что если у вас положение 0, это среднее положение стика, то да, это 127.

V_Alex

Мы опять не понимаем друг друга. В Вашем примере 100% импульса - 2200 мкс и 255 тиков. В таком случае один тик равен 2200/255 = 8,63 мкс. Для формирования импульса в 700 мкс нам понадобится 81 тик. Диапазон полезного сигнала составит 2200-700 = 1500 мкс или 174 тика (условно). Перед информационной частью импульса в любом случае идет “пустышка” - 700 мкс.
По Вашему сценарию, когда 700 мкс - это 0%, 2200 мкс - это 100%, а один тик равен (2200-700)/255 = 5,8 мкс, таймер придется запускать дважды.
В первом цикле он должен сформировать “пустышку” в 700 мкс (119 тиков по 5,8 мкс каждый), а во втором - информационную часть импульса - от 0 до 255 тиков по 5,8 мкс. На практике импульс формируется за один цикл работы таймера, а ход ручки соответствует изменению импульса от 1150 до 1850 мкс, остальная часть достается триммеру и дуалрайтам. По факту на управление сервой от ручки остается (1850-1150)/8,63 = 81 тик.

Панкратов_Сергей

Александр, не утруждайтесь. Это не “не понимаем”.
Дурака включать или уводить спор в сторону на месте где нужно было написать: извините, ошибся- это обычное поведение оппонента.

Probelzaelo
V_Alex:

В Вашем примере 100% импульса - 2200 мкс и 255 тиков. В таком случае один тик равен 2200/255 = 8,63 мкс.

понимаем! но жуем одно и то же. дело еще и в том что 0 тоже далеко не 0мкс , минимуму соответствует примерно 700мкс(для апаратуры) поэтому делить нужно не 2200.

V_Alex:

По Вашему сценарию, когда 700 мкс - это 0%, 2200 мкс - это 100%, а один тик равен (2200-700)/255 = 5,8 мкс, таймер придется запускать дважды.

он и работает “дважды” один отрабатывает период, запускает процес формирования импульса заданной частотой(порядка 50 гц), а второй отслеживает скважность(длительность) каждого импульса. А за протяженностью оставшегося времени(паузы) ни кто специально не следит, ибо оно не нужно

V_Alex:

Перед информационной частью импульса в любом случае идет “пустышка” - 700 мкс.

Именно! А я не учитываю что это время тоже кушает тики того же самого таймера. Исправляюсь!

V_Alex:

АТМEGA своим 8-разрядным таймером формирует этот импульс целиком.

Вот в этом мнении мы точно расходимся. я не учитываю что импульс то формируется аппаратно. Таймер в течении отработки импульса не работает два раза чтобы отработать 700, а потом остальное. Тут вы правы 100%

И больше того 2200 которые “предел” для сервы, но тоже еще не край для таймера. он же после срабатывания должен будет и дальше щелкать …

Панкратов_Сергей:

Дурака включать … … - это обычное поведение оппонента.

Нам это давно понятно и вАм не хворать…

V_Alex
Панкратов_Сергей:

Александр, не утруждайтесь. Это не “не понимаем”…

Сергей, тут дело чуть сложнее. Я для себя пытаюсь разобраться в возможностях Ардуино при работе со стандартными библиотеками. Пока я пришел в выводу, что библиотеки для работы с сервами годятся для построения наглядных пособий по робототехнике.
Получается, что для обработки и генерации сервоимпульсов нормального качества нужно использовать 16-разрядный таймер, либо делать это программно.
Учитывая тот факт, что сервоимпульс максимальной длительности 2 мс занимает 10% от такта в 20 мс, то на прием и выдачу на выход такого импульса требуется не более 20% рабочего времени контроллера, остальные 80% спокойно идут на математику. У меня программно получается сделать один тик равный 6 тактам микроконтроллера. При 8 МГц получается разрешение 2667 тиков на импульс в 2 мс. Соответственно, никакого джиттера нет и в помине.

Панкратов_Сергей
V_Alex:

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

Библиотеку “серво” с натяжкой можно назвать стандартной или базовой.
Но вопрос даже не в этом а в том что свойства какой то библиотеки начали приписывать самому микроконтроллеру.
Было бы не верно даже свойства какой то библиотеки приписывать среде ардуино, а не то что микроконтроллеру.
Все работает и без джиттера и на атмеге и в среде ардуино. Масса примеров этому.

V_Alex

В возможностях Меги 328 я не сомневаюсь. Меня больше интересует летопись “Великого грабельного похода” 😃

appolinari
Панкратов_Сергей:

Все работает и без джиттера и на атмеге и в среде ардуино. Масса примеров этому.

Дайте ссылку на примеры… Или на ресурс, где можно об этом почитать?
Если можно, с привязкой к ардуино… 😃

V_Alex

Появилась достаточно забавная приблуда - DigiSpark. Это платка с attiny85, которую можно программировать из среды Arduino через USB порт.
Обзор тут: mysku.ru/blog/china-stores/36691.html
Она в несколько раз меньше и легче Ардуины-Нано и ИМХО идеально подходит для большинства околомодельных задач.

Панкратов_Сергей
V_Alex:

Появилась достаточно забавная приблуда - DigiSpark. Это платка с attiny85, которую можно программировать из среды Arduino через USB порт.

А мне тут мало было 328-й, таймеров, последовательных портов, нашел компактную плату , уже испытал.
ru.aliexpress.com/item/…/32802520577.html
И да, получил желтого утенка - внешнего датчика эхолота.
Попытал- протокол до примитивности прост. Будет в моей лодке, конечно без штатного радиоканала. Радиоканал будет собственный, общий- двунаправленный.
Управление-телеметрия.

appolinari:

Дайте ссылку на примеры…

Практически все LRS- ки на атмеге и писались в среде ардуино, хотя знаю что некоторые щеки надувают, стесняются про это говорить.
Несколько проектов- открытые.

esau

Уважаемые форумчане, никто не заморачивался привязки GPS к ардуино и по радио каналу скидывать положение кораблика на вторую ардуино и на LCD экран ? В идеале конечно лучше запоминать точки прикормки и гнать автопилотом , но готовых решений не видел . Конечно на тубе есть ,но все как то скудновато по реализации .

Панкратов_Сергей
esau:

Уважаемые форумчане, никто не заморачивался привязки GPS к ардуино и по радио каналу скидывать положение кораблика на вторую ардуино и на LCD экран ? В идеале конечно лучше запоминать точки прикормки и гнать автопилотом , но готовых решений не видел . Конечно на тубе есть ,но все как то скудновато по реализации .

Заморачивались. Только вряд ли кто выложит готовое решение, а не на уровне полуфабрикатов.
И потом- LCD разные бывают. Цветные на солнце- только нервы трепать.
У меня будет чернобелый, причем практически только текстовая инфа. Максимум из графики - стрелка направления и расстояние.

Musgravehill:

Сергей, можно подробнее?

Как выше писали- вначале синхроимпульс…
А вот за ним через время прохождения туда-сюда пачки ультразвука ответный импульс. Единственно, что вас и и многих путало- есть защитный интервал ( время прохождения 40-50 см ( *2)- в это время ничего не будет приниматься. И все…
С температурой не разбирался, да и в моем утенке датчика нет. Но там думаю все тоже просто… После интервала времени, отведенного для ответного импульса максимальной дальности идет 2 байта значения температуры.

appolinari
esau:

…никто не заморачивался привязки GPS к ардуино…

Я пытался использовать ардуинку для подобного проекта, но ни чего хорошего из этого не вышло. Ардуино не сильно любит числа с плавающей точкой и, из за этого страдает точность позиционирования… 😦