БАНо

Анатолий24
avisenja:

Собрал всю инфу с сайта и накидал свою прошивку за 30 минут на сей девайс,
пробуйте…😉
Мож кто спасиб скажет:)

avisenja:

Вложения miggalka.zip‎ (406.9 Кб, Просмотров: 5)

большое спасибо Сеня сегодня вечером попробую собрать и завтра отпишусь

а можно схемку получьше а то листике непонятно

23 days later
egor-mav

А есть у кого-нибудь вариант который предложил Gintas??? Можете выложить?

4 months later
bocman74
avisenja:

Собрал всю инфу с сайта и накидал свою прошивку за 30 минут на сей девайс,
пробуйте…😉
Мож кто спасиб скажет:)

Можно схему четче нарисовать а то не понятно

3 months later
Vitrum82

Добрый день всем участникам данной ветки. Недавно наткнулся на нее и взяв за основу БАНО Марка Антония из сообщения 282 rcopen.com/forum/f8/topic144500/282 сделал под свои нужды.
Работают повороты, габариты, стопы, фары.
1 канал - подключается к каналу руля;
2 канал - подключается к каналу газа.
Столкнулся с двумя проблемами:

  1. Не могу придумать алгоритм реализации фонаря заднего хода (курок от себя ->нейтраль ->курок от себя)
  2. При одновременном подключении двух каналов происходит их влияние друг на друга (например при повороте руля влево и езде вперед - промаргивают стопы с периодичностью поворотов, хотя должны светить только фары и габариты). Каналы по отдельности работают как надо и повороты и приборы освещения.
    Выкладываю алгоритм в Algorithm Builder, и собранную схему в Proteus.
    Может кто подскажет в чем дело?
    Забыл указать. Смотрел каналы осцилографом: Период 10 милисекунд, сигнал от 1 до 2 милисекунд.

Avto 4_4.zip

Probelzaelo

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

Vitrum82

Да исходник МаркаАнтония был, все делал на его основе, менял только логику включения осветительных приборов. Взаимное действие каналов наблюдается как в Proteus так и в живую на макетке. Аварийка у меня не работает даже при выключенном передатчике, видимо даже без него идут с приемника импульсы (вот этого осцилографом не посмотрел).

Vitrum82

У меня подозрение на то, что прерывание обоих каналов просчитывается одним и тем же таймером. Не пойму как он определяет из какого канала получил длину импульса? готов отказаться от аварийки в пользу использования отдельных таймеров для каждого канала.

Probelzaelo
Vitrum82:

одозрение на то, что прерывание обоих каналов просчитывается одним и тем же таймером.

Пока МаркАнтоний занят давай копнем сами, ткни пальцем в тот исходник который ты используешь плиз и уточни куда именно у тебя что включено(схему). кстати исходник вместе с готовой моделью в протеусе будет соовсем не лишним, там конечно не более 15 минут ее делать, но…

Vitrum82
Probelzaelo:

кстати исходник вместе с готовой моделью в протеусе будет соовсем не лишним, там конечно не более 15 минут ее делать, но…

Поменял форму генератора в модели протеуса. Прикладываю архив, в нем и модель в протеус и агоритм в буилдере, схема подробно расписана в протеусе.
Опишу еще алгоритм словами:
Вкратце:
Имею Р/У модель:
Управляющие сигналы с приемника:
Прямоугольные импулься с периодом 10 мсек с шириной импульса 1-2мсек (измеренно осцилографом) амплитуда 5 вольт.
Канал 1 (Поворот сервомашинки)
Поворот направо 100% - 2мсек
Поворот налево 100% - 1мсек
Прямо - 1,5мсек
Канал 2 (Управление регулятором хода двигателя)
Полный газ 100% - 2сек
Полный назад 100% - 1мсек
Нейтраль - 1,5мсек

Сам алгоритм:
Канал 1
0,9-1,25мсек - мигает левый поворот
1,75-2,2мсек - мигает правый поворот
Канал 2
0,9-1,45мсек - светят стопы и габариты
1,55-1,75мсек - светят габариты
1,75-2,2мсек - светят габариты и фары
При пропадение канальных импульсов работает “аварийка”
Похоже причина наложения прерываний в отсутствии сдвига между импульсами в разных каналах. Завтра на работе измерю два канала одновременно осцилографом. Пока мои домыслы на вложенной картинке.

Avto 4_4.rar

Probelzaelo
Vitrum82:

Пока мои домыслы на вложенной картинке.

Бывают оба варианта! но если чтение канальных импульсов написано с учетом этого, то глюков быть не должно

Vitrum82

Ну что ж друзья, сегодня мои подозрения подтвердил осцилограф. Отсутствие временного сдвига каналов относительно друг друга. Придется отказаться либо от аварийки (один фиг она не будет у меня работать, так как при выключенном передатчике импульсы все равно идут и не меняются см.вторую картинку), либо от поворотников. Пытался вчера прикрутить Timer0 к поворотам - не получилось.

Probelzaelo
Vitrum82:

Отсутствие временного сдвига каналов относительно друг друга.

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

Vitrum82

В том то и проблема. Так как для обоих прерываний используется один и тот же таймер. Передний фронт попадает в таймер одновременно с обоих прерываний, а вот задний либо который опроситься первым, либо как то еще. Если бы передние фронты сигналов были сдвинуты относительно друг друга, проблем бы с использованием одного таймера не возникло.

Иван

выходные каналы то разные? в чём проблема может быть? если прерывание с разных лап приходит, а стартовое можно использовать для запуска таймера и тем проще что оба канала паралельно генерят 😉

V_Alex
Vitrum82:

Если бы передние фронты сигналов были сдвинуты относительно друг друга, проблем бы с использованием одного таймера не возникло.

Так сдвиньте сами, в чем проблема? Один такт обрабатываете повороты, стопы пропускаете, следующий - обрабатываете стопы, повороты пропускаете. Да, такт обработки увеличится с 20 до 40 мс, но зато все станет универсальным и пригодным для любого варианта выхода приемника. В конце концов лампочками на машынке блымать - не хвостом на вертолете крутить 😃

Probelzaelo
Vitrum82:

Если бы передние фронты сигналов были сдвинуты относительно друг друга, проблем бы с использованием одного таймера не возникло.

Я думаю все дело в построении алгоритма.

valera_o

Дело не построении алгоритма, а в том под что алгоритм писался. Когда я писал исходник, то делал это под свой спектрум, а там сигналы сдвинуты и всё работает. Если реально импульсы стартуют одновременно, то это фича аппы и тогда действительно надо с алгоритмом что-то решать.
Поставить счетчик каналов и по этому счетчику перебирать прерывания по каналам, поскольку пользуем один таймер.
Avto 4_5.rar
Или перейти всё-таки на мегу48 и использовать таймер2. Подумайте, порешайте…
Вот не пойму, чего так народ ломится на аттини? 😉 В tqfp32 мега48 дешевле, в дипе, правда на полбакса дороже, но ведь и начинка-то серьезнее… Не понятно…
Кстати pind2 и pind3 таки лучше подтянуть к +5В.

Probelzaelo
valera_o:

Когда я писал исходник, то делал это под свой спектрум, а там сигналы сдвинуты и всё работает.

Вот про это я и говорю алгоритм взят с расчетом что каждый канал обрабатывается индивидуально и при этом на остальные внимание не обращается - независимо от состояния входов.
Зато в случае когда нужна одновременная обработка алгоритм этот уже неработает. нужен собственный алгоритм обработки для такого варианта, но он не сможет гарантированно работать в случае сдвинутых импульсов.
Третий вариант когда каждый канал обрабатывается полностью независимо от остальных, одновременно или последовательно или вообще в разнобой. Вот этот случай будет работать всегда.

Иван

надо при обработке прерывания смотреть на второй канал прерывания и запускать таймер только если он не запущен и тормозить только в том случае если канал с более коротким импульсом уже прочитан либо ещё проще - читать таймер поочереди - сначала 1й канал, на следующем прерывании со 2го канала и тд… по флагам оринтироваться

Probelzaelo
Иван:

надо при обработке прерывания смотреть на второй канал прерывания и запускать таймер только если он не запущен и тормозить только в том случае если канал с более коротким импульсом уже прочитан либо ещё проще - читать таймер поочереди - сначала 1й канал, на следующем прерывании со 2го канала и тд… по флагам оринтироваться

Просто нужно пользоваться таймером как то иначе. не сбрасывать его по началу каждого импульса, а только по первому из серии(первый канал например) а далее читать текущее значение на момент входа в прерывание различая состояния фронт/спад и сохраняя время начала/конца импульса в отдельной переменной индивидуально для каждого канала. Вообще судя по схеме в Avto4_4 каждый канал обрабатывается собственным прерыванием. совсем не ясно почему обеспечиваются глюки. исходник то есть?

Исходник и правда есть, для Алгоритм билдер…
Предлогаю, для случая с параллельными канальными импульсами, в обработчике прерывания External_1 просто прибить все оставив лишь единственно полезный момент - запись значения tcnt1 -> Period1. Все остальное, особенно обнуление Таймера1, считать вредным излишеством, тк он уже был обнулен, еще в обработчике External_0.
Впрочем там и других вопросов хватает, например зачем проверять номер обрабатываемого канала внутри “чужого” обработчика? это было бы разумно если бы все прерывания обрабатывались единым алгоритмом. С автором бы обсудить. Похоже что изначально задумывалось универсальное решение, но реализовано было лишь частное, отсюда выплыл глюк.

Иван

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

valera_o

внес в прогу счетчик каналов. см. мой пост выше.