Arduino для BAIT BOAT...

Панкратов_Сергей
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 к ардуино…

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

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

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

Надуманная проблема. К тому же все можно считать целочисленкой.

appolinari

Надумайте её решение и опишите.
А пустые изречения держите при себе.

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

А пустые изречения держите при себе.

Подобные этому-

appolinari:

Я пытался использовать ардуинку для подобного проекта, но ни чего хорошего из этого не вышло.

Или обосновывайте, что же в ардуинке мешает решить такую простую задачу…
То что не вышло у вас- это же не значит что это невозможно .