Включение/выключене с 1 канала нескольких нагрузок. Возможно-ли?

wenom86

прицепить к серве у меня была идея в самом начале. Реализация очень простая - но вот не лежит сердце к ней. В общем создал новую тему, может кто напишет устройство под требуемые задачи? rcopen.com/forum/f8/topic298379

Благодарю всем откликнувшимся за предоставленную инфу.

9 days later
Dimac

Зацепила эта тема. Давно хотел научиться работать с микроконтроллерами, но всё никак не было подходящей темы, чтоб познавать на практике. Вот сваял за неделю такое устройство (скажу сразу, что после первого поста тему не читал и о существовании аналогов не знал, делал с чистого листа). Гуру программирования, прошу помидорами не кидаться, т.к. эта моя первая программа для микроконтроллеров (ну почти… не считая мигающего светодиода 😃 )
Распространяется свободно. Схему и все исходники прилагаю. Можно вносить любые изменения (комментировал почти каждую строчку кода, но понятное дело, для себя).

Работа устройства основана на измерении длительности импульса (от 0.7ms до 2.3ms c некоторым запасом, ориентировался на свой сервотестер).
Имеет 5 линий выходов плюс выход: “Потеря сигнала”. Эти выходы могут иметь 6 запрограммированных любых комбинаций, каждая комбинация соответствует своему положению стика или крутилки. (Если по другому - программируется шесть 5-и битных слов соответствующие своей длительности импульса ). Причём границы переключения устанавливаешь сам. Всё это можно программировать (границы переключений и настройка 5-и битных комбинаций) прямо в полевых условиях одной кнопкой.
Перемычка JP1 (установка) меняет выход с прямого на инверсный (это же относится и к выходу “Потеря сигнала”).
Перемычка JP2 (установка) сбрасывает выходы PB0 - PB4 (12-16ноги) при пропадании сигнала, при отсутствии перемычки - на выходах сохраняется крайнее состояние. Причём реализована защита от ложного переключения выходов, если сигнал пропадёт во время импульса (длина импульса тогда сократится). Правда работает это или нет - не знаю. Сложно проверить.

На схеме не показаны силовые ключи, тоторые подключаются к линиям выхода, каждый себе придумает сам. 😃
При прошивке пограмматором, Fuses менять не надо, заводская настройка по умолчанию (специально для кривых рук, чтоб не залочить микроконтроллер). На всякий случай привожу Fuses, как они отображены в программе “CodeVisionAVR”, в других программах они могут отображаться инверсно. (хотя, если быть точным, то именно в CodeVisionAVR они отображены наоборот) 😃.
Прошить можно программатором за 150 рублей с HК (ничуть не реклама 😃 )
www.hobbyking.com/hobbyking/…/uh_viewItem.asp?idPr…
-----------------------------
Порядок работы. (устройство собрано и прошито).

1. Инициализация.
Ручная настройка порогов срабатывания (от положения стика или крутилки). При этом, ранее запрограммированные комбинации стираются.
Нажать кнопку и не отпуская её подать питание (питать можно прямо от приёмника). Если питание отдельно от сигнала, то не запускать сигнал раньше питания, а то МК начнёт запитываться с линии сигнала до нажатия кнопки.
После этого отпускаем кнопку. Начнет мигать первый светодиод (D1) (буду называть его “курсор”). Короткое нажатие на кнопку перемещает курсор на следующий диод и так циклически по кругу. Каждый светодиод указывает на “ячейку” куда будем записывать пороговое значение положения стика(крутилки). Всего можно записать 5 порогов. 1-5 в любой последовательности. (потом они все равно отсортируются по длине импульса)
|-----1------2------3-------4--------5-----|
| - крайние положения стика.
Причём, пороги записываются с небольшим сдвигом -дельта Т. Сделано для того, что если кто поменяет на аппе крутилку на многодиапазонный переключатель с фиксированными положениями, то эти положения не попадали бы на границу переключения. Что при этом может происходить - думаю понятно, с учётом погрешности измерения длительности импульса.

Так вот. Устанавливаем стик(крутилку) в нужное положение, выбираем курсором “ячейку”, куда будем писать и нажимаем кнопку подольше. Курсор начнёт быстро мигать - показывая, что запись произведена (по секрету… при отсутствии сигнала - записи не будет, хотя помигает). Может сделать авт. перемещение курсора? см ниже.
Устанавливаем стик в другое положение, выбираем другую ячейку - опять записываем. И так далее. Необязательно записать что-то во все ячейки. Можно меньше, просто тогда будет меньше границ переходов.
Выход из режима инициализации - выключение питания. (при этом сигнал надо тоже снять)

2. Работа.
Подать питание и сигнал. Вращая крутилку наблюдаем поочерёдное зажигание светодиодов между установленными границами. Если пограммировали границы последовательно на каждую ячейку будет такая картина.

Ничего
не горит___D1___D2____D3____D4____D5
|--------1-------2------3------4-------5------|

Имеем 6 диапазонов и 5 границ. В каждом диапазоне сейчас горит по одному светодиоду. При инициализации в каждую граничную ячейку ещё был записан свой 5-и битный код. Например в первую 00001, во вторую 00010, в третью 00100 и т.д. И теперь при перемещении стика(крутилки) попадая в свой диапазон - загорается соответствующий светодиод.

На этом можно было и закончить (это была первая версия программы), но меня осенило 😃 .Я подумал, а что если самому задавать любую комбинацию на выходах для каждого диапазона. И появилась вторая версия и ещё один режим программирования.

3. Программирование комбинаций.
В режиме Работа долго(1-2с) нажать кнопку. Появится курсор. Перемещаем курсор, известным нам способом, устанавливаем на любой бит (линия выхода) и долгим нажатием кнопки меняем бит на противоположный (диод горел - потухнет и наоборот), при этом курсор перескочит на следующую позицию откроя нам изменения. (если курсор промигал, но не перескочил - значит нет сигнала на входе, запись не была произведена).
Стиком (крутилкой) выбираем диапазон (даже тот, где ничего не горит) и устанавливаем выходную комбинацию, как угодно.
Выход из этого режима традиционно - снятием питания (не забываем про сигнал)
Вот и всё.
--------------------------------------------------------
При пропадании сигнала соответствующий диод загорается с задержкой, сделано для того, чтобы не было срабатывания исполнительного устройства (если такой будет) при кратковременной потере сигнала.

Резистор на сигнальной линии, чтобы при отсутствии сигнала не ловились наводки. Например мигающий соседний светодиод, у меня, эмулировал приход сигнала 😃. Сколько же он мне крови попил, пока я разбирался, что это у меня глючит и искал ошибки в программе.

Надеюсь пояснение не было сильно путанным. Показалось, что объяснить было чуть ли не сложнее чем сделать.
Готового законченного устройства у меня пока нет, работает только на макетной плате.

RC_Switch.rar

Dimac

Сделал небольшие изменения.
Теперь при отсутствии сигнала - в режимах программирования, долгое нажатие кнопки визуально не отрабатывается, дабы не вводить в заблуждение о том была запись или нет. Курсор просто будет перемещаться, как при коротком нажатии. А в третий режим “Программирование комбинаций.” при отсутствии сигнала, попасть теперь невозможно.

RC_Switch_v2.01.rar

Dimac

******Версия 2.02
Сделал петлю гистерезиса на границе диапазонов, для более устойчивого переключения нагрузок.
В связи с этим, небольшая оптимизация и улучшение алгоритма.

RC_Switch_v2.02.rar

wenom86

вот спасибо тебе, добрый человек. Прямо в точку. осталось собрать это добро и опробовать.

robovan

а механически от сервы и крутилки не хо?

Dimac

Исправил некритическую ошибку. RC_Switch_v2.03.rar

Ещё сделал облегчённый вариант на Amtel ATtyny25 (делал для себя, просто что у меня было под рукой, на том и делал ), может кому ещё пригодится.

При включении питания, если крутилка в положении дальше центра к максимуму - контроллер входит в режим калибровки крайних положений. Начнет мигать диод D1. Для калибровки необходимо перевести крутилку в оба крайних положения в течение 3-4 секунд (пока мигает диод). Если положение крутилки не менять - время не стартует. (также будет если при включении нет сигнала)
Если калибровка не нужна - отключить питание, перевести крутилку в min положение и опять включить питание.
При калибровке весь диапазон делится на 4-е равных сектора. При нахождении крутилки в первом секторе ничего не горит, во втором секторе горит только D1, в третьем - только D2, в четвёртом - только D3.
Диод D4 показывает на отсутствие сигнала. Включается сразу. При пропадании сигнала, на выходе остаётся крайнее состояние.

При программировании, FUSES не трогаем - оставляем по умолчанию как есть.

RC_Switch_ATtiny25.rar

ions

Замечательно. Подскажите можно такую конструкцию доработать, чтобы каналы включались последовательно при включении 5 канала “Шасси”. Т.е. тумблер перевожу вверх - вкл. 1 канал, перевожу вниз потом вверх - вкл. 2 канал и т.д… Дело в том, что у меня 6 канальная аппа и свободен только 5 канал, хочу попробовать установить фейерферки.

biver72

Братцы, вы маньяки, уважю, сам таким был…
а сейчас бы приделал к качалке сервы скользящий контакт, а в оси крутилки дырок насверлил, и шариком на пружинке подпёр…5-6 положений запросто, и “Феникс” не надо доставать, и хлорное железо разводить…старею наверное?

wenom86

не. сейча 21 век. микроконтроллеры рулят.

Много работы навалилось. пока только прошил контроллер. Схему пок ане собирал. Как сделаю - отпишусь.

Dimac

Владимир подал интересную идею. Решил сделать универсальную прошивку и для крутилки и для тумблера. Долго ковырялся - всё вылезали всякие непонятные глюки. Что-то получилось.
Схема из 26 поста.

Как работает.

Перед первым использованием устройство калибруется. Для этого перед включением поставить крутилку в максимум или перевести тумблер во вкл. состояние. После подачи питания начнёт мигать диод D4 “нет сигнала” (в первой версии мигал D1), показывая, что устройство в режиме калибровки (если нет сигнала - будет постоянно гореть диод D4 “нет сигнала”).
Мигать будет пока не сдвинуть крутилку или щёлкнуть тумблером. После этого есть 3-4 секунды чтобы погонять крутилку несколько раз в крайние положения или пощёлкать тумблером (раза 2-а).
Во время калибровки устройство запоминает с чем работает и при смене подключения к другому каналу (с крутилки на тумблер и наоборот) калибровку сделать заново.

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

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

Павлу.
Программирование ещё одно моё хобби. Ещё в 90-е с отцом собрали ZX-Spectrum, и поигравшись начал писать программы начал на Бейсике - закончил Ассемблером. Апофеоз был, когда сделали версию спектрума Pentagon128 с дисководом и я стал переносить игрушки с кассет на диски. Вот пришлось вовсю дизассемблером ломать защиты, нестандартные загрузчики и т.д.
И вот теперь решил вспомнить молодость 😃

RC_Switch_ATtiny25_v2.rar

ions

Сегодня оббежал все радиомагазины Томска - нигде нет ATtiny25,на заказ тоже не берутся. Где вы их берете? Они, что уже сняты с производства? По логике работы то, что нужно.

Dimac

Я в Москве год назад покупал в “Чип и Дип”. У меня просто было тогда желание научиться программировать микроконтроллеры, остановился на Atmel но покупал от балды по принципу - один попроще, второй посложнее. Наугад купил ATtiny 25 и 2313. А сейчас наконец до них дошли руки. Можно попробовать переделать под другой контроллер, только нужно чтоб было 2-а таймера ATtiny15 ,24 и 26 вроде подходят. Я только проверить не смогу. Только когда куплю. Какие у вас там продаются?
А может там и переделывать не прийдётся.

wenom86

у нас в Рязани тинька 2313 не в дефиците. Спрашивал, пропадала-ли, говорят никогда.

Dimac

Да, полные аналоги ATtiny25 это ATtiny45 и ATtiny85. Они только имеют больше памяти.

Подправил программу, вроде бы исчели разные глюки и стало работать стабильно.

Нехочется пределывать с 25-й на 2313. Сейчас у меня на ней смакетирована первая схема, и может придётся ещё вносить какие-то исправления/изменения. На 25-й - вторая, и больше контроллеров у меня нет. Тем более, что на 25-й получилась очень стабильная работа.
мой стенд 😃

RC_Switch_ATtiny25_v2.1.rar

ions

Тогда будем через интернет заказывать?

Dimac

Да, не зачем так сложно. Есть у вас в продаже 2313?
Я погорячился, сказав, что мне сложно что-то менять. Там схемы практически одинаковые, могу её же и использовать. На сколько нагрузок сделать, чтоб последовательно переключались? Там ножек много.

ions

2313 есть, нагрузок хотелось бы 6, спасибо

Dimac

RC_Switch_2313

Имеет 6 выходов и 1 выход “потеря сигнала”
Работает в крутилкой и с тумблером.

Перед первым использованием произвести калибровку:
крутилкой: поставить крутилку в максимум и включить питание (вставить устройство в приёмник). Начнёт мигать диод “нет сигнала”. Перевести крутилку несколько раз в крайние положения.
Весь диапазон поделится на 7 частей: 1-ничего не горит, 2-горит диод D1, 3- D3, и т.д. 7-D6.
тумблером: переключить несколько раз. Далее, при работе, при каждом включении (ВКЛ.) тумблера будут последовательно циклически загораться диоды: D1, D2, D3 …D6, ничего не горит, D1… и т.д.
При смене подключения к каналу с крутилки на тумблер и наоборот, калибровку выполнить заново.

Перемычки.
JP1 - нет выход прямой, стоит выход инверсный
JP2 - нет на выходе крайнее состояние при потери сигнала, стоит выход сброшен при потери сигнала
JP3 - нет при выключении тумблера (ВЫКЛ.) состояние выхода не изменяется, стоит при выключении тумблера выход сбрасывается, в этом режиме при циклическом переключении нет отдельной позиции “ничего не горит” (когда цикл доходит до D6, следующий будет D1)

Пока отлаживал эту программу исправил ошибку в предыдущей.

RC_Switch_ATtiny25_v2.2.rarRC_Switch_2313.rar

ions

С 2313 у нас проблем нет, еще раз большое спасибо за материал, теперь можно будет доработать под себя.