БАНо
Если бы передние фронты сигналов были сдвинуты относительно друг друга, проблем бы с использованием одного таймера не возникло.
Я думаю все дело в построении алгоритма.
Дело не построении алгоритма, а в том под что алгоритм писался. Когда я писал исходник, то делал это под свой спектрум, а там сигналы сдвинуты и всё работает. Если реально импульсы стартуют одновременно, то это фича аппы и тогда действительно надо с алгоритмом что-то решать.
Поставить счетчик каналов и по этому счетчику перебирать прерывания по каналам, поскольку пользуем один таймер.
Avto 4_5.rar
Или перейти всё-таки на мегу48 и использовать таймер2. Подумайте, порешайте…
Вот не пойму, чего так народ ломится на аттини? 😉 В tqfp32 мега48 дешевле, в дипе, правда на полбакса дороже, но ведь и начинка-то серьезнее… Не понятно…
Кстати pind2 и pind3 таки лучше подтянуть к +5В.
Когда я писал исходник, то делал это под свой спектрум, а там сигналы сдвинуты и всё работает.
Вот про это я и говорю алгоритм взят с расчетом что каждый канал обрабатывается индивидуально и при этом на остальные внимание не обращается - независимо от состояния входов.
Зато в случае когда нужна одновременная обработка алгоритм этот уже неработает. нужен собственный алгоритм обработки для такого варианта, но он не сможет гарантированно работать в случае сдвинутых импульсов.
Третий вариант когда каждый канал обрабатывается полностью независимо от остальных, одновременно или последовательно или вообще в разнобой. Вот этот случай будет работать всегда.
надо при обработке прерывания смотреть на второй канал прерывания и запускать таймер только если он не запущен и тормозить только в том случае если канал с более коротким импульсом уже прочитан либо ещё проще - читать таймер поочереди - сначала 1й канал, на следующем прерывании со 2го канала и тд… по флагам оринтироваться
надо при обработке прерывания смотреть на второй канал прерывания и запускать таймер только если он не запущен и тормозить только в том случае если канал с более коротким импульсом уже прочитан либо ещё проще - читать таймер поочереди - сначала 1й канал, на следующем прерывании со 2го канала и тд… по флагам оринтироваться
Просто нужно пользоваться таймером как то иначе. не сбрасывать его по началу каждого импульса, а только по первому из серии(первый канал например) а далее читать текущее значение на момент входа в прерывание различая состояния фронт/спад и сохраняя время начала/конца импульса в отдельной переменной индивидуально для каждого канала. Вообще судя по схеме в Avto4_4 каждый канал обрабатывается собственным прерыванием. совсем не ясно почему обеспечиваются глюки. исходник то есть?
Исходник и правда есть, для Алгоритм билдер…
Предлогаю, для случая с параллельными канальными импульсами, в обработчике прерывания External_1 просто прибить все оставив лишь единственно полезный момент - запись значения tcnt1 -> Period1. Все остальное, особенно обнуление Таймера1, считать вредным излишеством, тк он уже был обнулен, еще в обработчике External_0.
Впрочем там и других вопросов хватает, например зачем проверять номер обрабатываемого канала внутри “чужого” обработчика? это было бы разумно если бы все прерывания обрабатывались единым алгоритмом. С автором бы обсудить. Похоже что изначально задумывалось универсальное решение, но реализовано было лишь частное, отсюда выплыл глюк.
глючит потому что по каждому из прерывания происходит сброс-старт и стоп таймера, таймер один и тот же используют, а далее прога использует то что таймер насчитал
Probelzaelo, мы об одном думаем:)) тока разными словами.
внес в прогу счетчик каналов. см. мой пост выше.
внес в прогу счетчик каналов. см. мой пост выше.
что то я пытался найти отличие. не увидел…
Если реально импульсы стартуют одновременно, то это фича аппы и тогда действительно надо с алгоритмом что-то решать. Поставить счетчик каналов и по этому счетчику перебирать прерывания по каналам, поскольку пользуем один таймер. Avto 4_5.rar Или перейти всё-таки на мегу48 и использовать таймер2. Подумайте, порешайте…
С одним таймером вполне можно обходиться. Для случая с параллельными импульсами. нужно не забывая про приоритеты прерываний обнулять таймер по прерыванию INT0, остальных в этот момент можно проигнорить. А потом, по мере окончания импульсов просто присваивать текущее значение таймера соответствующему значению. кан импульса. тем более что, в данном конкретном решении, используется всего два внешних прерывания int0 и int1. для int1 весь обработчик может состоять из единственной строчки Импульс1=Таймер1, это будет чистейшей правдой, кроме случая когда импульсов нет совсем(приемник скис и тп… ))
cnt_channel. в обработчиках прерываний.
Есть предложение не тормозить таймер1 вообще, а в обработчиках захватывать числа из него по фронту и спаду управляющих импульсов. Затем из бОльшего вычитать меньшее.
Как автор самой первой версии могу сказать, что задумывалась вся эта шняга как БАНО, управление по одному каналу. Потом, когда появилось желание управлять от двух каналов, кто-то, а может и я, внес обработчик второго прерывания и такое использование таймера. Для стандартной аппы всё работало, у меня и сейчас есть проекты, где отрабатывается по двум входам и уверен, что при необходимости будет обрабатывать и больше, потому как импульсы каналов стартуют последовательно по времени.
Есть предложение не тормозить таймер1 вообще, а в обработчиках захватывать числа из него по фронту и спаду управляющих импульсов.
Ну да, примерно так. Но это годится только для приемников у которых импульсы стартуют параллельно. Получается такая петрушка что пока алгоритмы обработки не универсальны, или - или…
С другой стороны изобретается велосипед. ведь все это уже реализовывалось не однократно. например PPM SUM - это просто (очередное простое решение проблемы) и кстати - #40 не правда ли ожидается следующая знакомая ситуация? 3 канала одновременно, потом еще три, и потом остальные ))
Если реально импульсы стартуют одновременно, то это фича аппы и тогда действительно надо с алгоритмом что-то решать. Поставить счетчик каналов и по этому счетчику перебирать прерывания по каналам, поскольку пользуем один таймер.
На выходных остался без интернета и потому не читал тему. Решил таймер 0 который использовался для “аварийки” приспособить для поворотов. Все работает. См.вложение Avto 4_5(alternative).rar
Вот не пойму, чего так народ ломится на аттини?
К сожалению когда нашел данную тему и был в Новосибирске, читать ее времени не было. Поэтому купил то что использовал МаркАнтоний, надеясь просто прошить и радоваться, но столкнулся с проблемой параллельных импульсов и понеслось + еще хотелки разные.
Поставить счетчик каналов и по этому счетчику перебирать прерывания по каналам, поскольку пользуем один таймер.
Попробовал алгоритм в Proteus. Что-то не работает как надо. Но мысль понял. Попробую еще в железе.
Теперь вот думаю как организовать задержку выключения фар на 5 сек. после того как машина остановилась. В теле main паузу использовать нельзя, т.к. это тормознет всю программу на 5 сек. Надо чтобы отсчет времени происходил параллельно, и после того как отсчитаются 5 сек. некая переменная бы изменила значение и в основной программе проверять значание этой переменной. Для этого наверное можно было использовать таймер, но они и так уже кончились.
Еще хотел для габаритов и стопов использовать один и тот же светодиод.
Тут есть 2 варианта:
1.Можно конечно с двух ног через резисторы подавать сигнал на один светодиод. Через R1 допустим ток 5мА - это будет габарит, А если через R1 и R2 то будет допустим 5мА + 20мА и это будет уже стоп.
2.Использовать некое подобие ШИМ. Что и было сделано см.Вложение в Auto 4_6. Вот только при простое, когда ничего не должно светить появились кратковременные вспышки с плавающей частотой. Причем при выключении передатчика вспышки исчезают.
Также не логично выглядят горящие стопы при езде назад и загорающиеся фары при торможении при езде задом. Подумаю над логикой, как все это должно работать.
Вот не пойму, чего так народ ломится на аттини?
Все просто, для коммерческой реализации важна конечная стоимость. А она определяется не только ценой кристалла, но и количеством лапок, и размером платы, и ценой адаптера. Для задачи БАНО достаточно 13 тини. Для стопов или поворотников - 25 тини (поскольку там нужен кварц). Для совмещенной задачи - 24 тини (наличие кварца и соответствующего количества ног), причем таймер для обработки там нахненужен - только ловля приключений себе на задницу, что собссно и наблюдается в крайней странице данной темы.
Подумаю над логикой, как все это должно работать.
Золотые слова. Только делать это нужно до, а не после 😃
Также не логично выглядят горящие стопы при езде назад и загорающиеся фары при торможении при езде задом.
“Товагищи! Назгела Геволюционная ситуация!”
Считаем что альфа,бета,гамма тестирования прошли, наступила пора основательной переделки как обработчика входных сигналов, так и логику включения. пожалуй не будет лишним и ввод третьего, служебного канала, для максималистов?
Все просто, для коммерческой реализации важна конечная стоимость. А она определяется не только ценой кристалла, но и количеством лапок, и размером платы, и ценой адаптера.
Но чаще всего реализация “наколенных” проектов обусловлена тем, что было под рукой у разработчика ))
Многие потом повторяют используя готовое решение заливая готовую отлаженную и опубликованную прошивку. и в этих случаях цена в полдоллара никакой роли не играет.
У меня например валяются несколько 328 процессоров, 88 и 84 все они не из самых дешевых и что называется “из пушки по воробьям”, но я же поеду ради одного изделия покупать более дешевый 48 или 13. тем более что все они практически одинаково отработают с подобного рода задачкой.
причем таймер для обработки там …ненужен
Действительно, реально-достаточно постоянно и красиво тикающего T0, текущее значение счетчика которого всегда доступно и эти данные прекрасно укладываются в задачу вычисления интервалов времени между событиями, в каком угодно(в пределах разумного) их количестве.
Добрый день, коллеги. Во вторник вернулся с чемпионата Украины по свободному лету. Там ведущие спортсмены применяли проблесковый маячек на светодиодах. Очень эффективно в сумерках. Да и в солнечный день хорошо видно на большем расстоянии. Во всяком случае, судья в бинокль четко видит фазы полета. Вблизи выглядит как штырек с тремя светодиодами через 120 градусов (во всяком случае у планеристов). Питается от одной банки Ли-по, включается при сходе модели с леера. Выключается после посадки модели. Моргает раз в 4 секунды. Спрашивал марку светодиодов - спортсмены не знают, говорят покупали готовое изделие, но вероятнее всего - от вспышки на мобильник.
Вот и хочу спросить, может кто знает, какие излучатели применяются. Или кто присоветует марку. Основное требование - минимальный вес.
Товарищи реализован алгоритм работы фонаря заднего хода и стоп сигналов как оно должно быть. См.вложение
Оставшиеся проблемы:
1.Если работает поворотник, то из -за его пауз, на полный цикл программы приходиться целая секунда. (Нужно параллельное вычисление паузы для поворотов).
2.Аналогично повороту не могу реализовать задержку выключения фар. Опять же нужно считать параллельно основной программе).
И тишина… Где? Некому написать начальный код? А то переколбашивать готовый мастера есть…
Результаты моих трудов.
Сделано на основе бано Маркантония (а его бано на основе valera_o)
Думаю по видео все будет понятно.
Все задержки и интервалы настраиваются.
Все прокоментированно в файле AlgorithmBuilder, есть схема и печатка в Proteus.
Если есть вопросы с удовольствием отвечу.
Видео здесь:
Круто. Только не совсем понял, при движении назад горит огонь заднего хода, потом загораются стоп сигналы при нажатии курка газа вперед. Я думал, стопы должны загораться просто при отпускании курка после задней передачи? нет? а то получается, что и стопы загорелись а машина вперед поехала. Или у вас регулятор хитрый?
У меня в регуляторе реализовано следующим образом:
если машина едет назад (курок от себя) и отпустить курок, то машина едет накатом по инерции, а если курок нажать к себе она тормозит вплоть до стопора колес.
После этого отпускаю курок в нейтраль и снова на себя, вот тогда она едет вперед. Аналогично при движении вперед.
На видео, если присмотреться в правый нижний угол, там видно колесо, ну и по звуку можно догадаться, только он тихо записан - делайте погромче.
ясно. просто у меня не совсем так.
если едет назад, затем отпустить - накатом, но если при этом нажать к себе - будет движение вперед. тормоз работает только для движения вперед.
Ребята подскажите какая из схем для самолета работает нормально и включается с пульта.
заранее спасибо.
пробовал в протеусе для 2313, но у меня не заработала