Самодельный передатчик (часть 1)

klen_s

Представляю второй вариант - который правильно распаян.
128 мегу поменял на 168, потомучто заказчик потребовал минимального размера, просто гад.
Сегодня завелась мега - шьется и моргает светодиодом.
Пока спать не свалюсь буду оживлять сей девайс. Нада для начал убедиться в том что все регистра трансивера читаются. Я всетаки не рискнул CC2420 на 5 вольт запитывать - в даташите четка написано - 3,6 - верхний край. Но на всякий случай в стабилизаторе на корпусном выводе место для SMD диодика оставил, потом поробую на 0,6 вольта поднять напряжение.

8 days later
VitaliyB

For Focus
Собрал кодер на Mege16 и появились вопросы.
При включении микшера, ручки управления элеронами и рулем высоты меняются местами.
Можно ли исправить этот глюк?
Заодно наверное есть смысл ввести програмное ограничение длительности канальных импульсов с коефициентом 1.2 , при натройке смешивания каналов длительности импульсов часто выходят за
пределы и сервоприводы совершают непредсказуемые движения.
С уважением .
Виталий.

jeti

Я так и не понял,
при прошивке в кодере от Фокуса с фьюзами чтото делать надо?

focus
VitaliyB:

For Focus
Собрал кодер на Mege16 и появились вопросы.
При включении микшера, ручки управления элеронами и рулем высоты меняются местами.
Можно ли исправить этот глюк?
Заодно наверное есть смысл ввести програмное ограничение длительности канальных импульсов с коефициентом 1.2 , при натройке смешивания каналов длительности импульсов часто выходят за
пределы и сервоприводы совершают непредсказуемые движения.
С уважением .
Виталий.

Глюк исправит можно… В коде замени
if (mix[1]==-1) {
ch[2]=2250+(adc[4]+adc[2])/2+trim[2]*10;
ch[4]=2250+(adc[4]-adc[2])/2+trim[4]*10;}

if (mix[2]==-1) {
ch[2]=2250+(adc[1]+adc[2])/2+trim[2]*10;
ch[1]=2250+(adc[1]-adc[2])/2+trim[1]*10;}

if (mix[3]==-1) {
ch[6]=2250+(adc[1]+adc[6])/2+trim[6]*10;
ch[1]=2250+(adc[1]-adc[6])/2+trim[1]*10;}

на if (mix[1]==-1) {
ch[2]=2250+(adc[2]+adc[4])/2+trim[2]*10;
ch[4]=2250+(adc[2]-adc[4])/2+trim[4]*10;}

if (mix[2]==-1) {
ch[2]=2250+(adc[2]+adc[1])/2+trim[2]*10;
ch[1]=2250+(adc[2]-adc[1])/2+trim[1]*10;}

if (mix[3]==-1) {
ch[6]=2250+(adc[6]+adc[1])/2+trim[6]*10;
ch[1]=2250+(adc[6]-adc[1])/2+trim[1]*10;}

Ограничения и прочее будут во второй версии. Она уже разрабатывается.

VitaliyB
focus:

Глюк исправит можно… В коде замени
if (mix[1]==-1) {
ch[2]=2250+(adc[4]+adc[2])/2+trim[2]*10;
ch[4]=2250+(adc[4]-adc[2])/2+trim[4]*10;}

if (mix[2]==-1) {
ch[2]=2250+(adc[1]+adc[2])/2+trim[2]*10;
ch[1]=2250+(adc[1]-adc[2])/2+trim[1]*10;}

if (mix[3]==-1) {
ch[6]=2250+(adc[1]+adc[6])/2+trim[6]*10;
ch[1]=2250+(adc[1]-adc[6])/2+trim[1]*10;}

на if (mix[1]==-1) {
ch[2]=2250+(adc[2]+adc[4])/2+trim[2]*10;
ch[4]=2250+(adc[2]-adc[4])/2+trim[4]*10;}

if (mix[2]==-1) {
ch[2]=2250+(adc[2]+adc[1])/2+trim[2]*10;
ch[1]=2250+(adc[2]-adc[1])/2+trim[1]*10;}

if (mix[3]==-1) {
ch[6]=2250+(adc[6]+adc[1])/2+trim[6]*10;
ch[1]=2250+(adc[6]-adc[1])/2+trim[1]*10;}
Ограничения и прочее будут во второй версии. Она уже разрабатывается.

К сожалению безуспешно.
Почему-то не заработало.

Andrey_K
focus:

Возникли вопросы. Сколько каналов должно быть? (по моим расчетам 8 - выше крыши) Какие типы моделей? (думаю самолет, планер с одной, двумя и четырьмямашинками на крыло и наверное верт, делется по типу автомата перекоса) Сколько режимов полета? И какие они для каждого типа моделей? Что в них должно настраиваться?

Решил ответить, хоть и с задержкой.
Может, стоит потратить время и довести то, что есть до логического завершения?
Оформить подробное описание и инструкцию по программированию. Чтобы самоделкин сразу понял что сможет, а что не сможет запрограммировать в этом передатчике.
Дать самоделкиным, у которых нет готовых джойстиков и нет внутрисхемного отладчика, рекомендации по настройке джойстиков. Т.е. рекомендации для тех, кто не может увидеть результаты АЦП на экране ПК. А если твоих знаний хватает – создай ПК интерфейс, позволяющий увидить. Это будут ОГРОМНЫЙ шаг вперед.

Смотрим на формулы

read_adc(3);
adc[1]=(ADCW-814); //читаем канал АЦП, вычитаем ненужный промежуток
read_adc(2);
adc[2]=(ADCW-832); //читаем канал АЦП, вычитаем ненужный промежуток
read_adc(1);
adc[3]=(ADCW-810); //читаем канал АЦП, вычитаем ненужный промежуток
read_adc(0);
adc[4]=(ADCW-818); //читаем канал АЦП, вычитаем ненужный промежуток
read_adc(4);
adc[6]=(ADCW-810);

и видим разные цифры: 814,832,810,818.

Может, стоит подробно описать процедуру выбора этих чисел? А заодно сказать, что делать тому, кто не обладает достаточными знаниями для переделки программы под себя?

В описании стоит уделить достойное внимание терминам и определениям. Например, что такое реверс. Все понимают, что это изменение направления вращения серво, но программно это м.б. выполнено по разному. Например, я для себя принял, что реверес осуществляется за счет реверса сигнала, полученного с канального потенциометра или тумблера. Или – что такое EPA. Я всегда считал, что ЕРА – это назначение конечных точек серво для канала. Т.е. это ИТОГОВОЕ масштабирование после всех смесителей.
Прибавление триммера – это тоже смеситель!
Хотя иногда ЕРА применяется для перецентрирования и реверса серво.

Смотрим на формулы

if (adc[1]>=0) adc[1]= adc[1]*epa1[1]/19*rev[1];
else adc[1]= adc[1]*epa2[1]/21*rev[1];

if (adc[2]>=0) adc[2]= adc[2]*epa1[2]/19*rev[2];
else adc[2]= adc[2]*epa2[2]/21*rev[2];

if (mix[2]==-1) {
ch[2]=2250+(adc[1]+adc[2])/2+trim[2]*10;
ch[1]=2250+(adc[1]-adc[2])/2+trim[1]*10;}

и видим, что триммеры прибавляются после ЕРА.

Число 2250 в этих формулах – желательно в описании указать: перемещение ручки канала NN от упора до упора при ЕРА=100% соответствует изменению длительности канального импульса от и до. То же для триммера.
Максимальная и минимальная длительности канального импульса не ограничиваются программно. Это опасно. Можно дойти до упора. (Футаба открытым текстом рекомендует настройку "от упора’, но это не образец для повторения. )
Обязательно нужна блок-схема последовательности вычислений.
Триммер масштабируется вместе с ручкой. Последствия и возможные решения проблемы стоит отметить в описании.

Смесители.
Для канала с триммером диапазон исходных чисел – это сумма диапазонов для ручки, триммера и нуля триммера (если нули триммера сохраняются). Для канала без триммера все проще. Если эти два канала смешиваются, возникает проблема несовпадения диапазонов исходных чисел. Пока нет сложных смесителей с пересчетными таблицами, эта проблема малозаметна, но она никуда не исчезнет. Тут есть над чем подумать.
Переписка по индикатору только упрочила мое мнение: для самодельного передатчика нужен вариант схемы и программы для стандартного индикатора, например 128х64 с контроллером ks0108. Да, это дороже. Но всем будет понятно и не нужно ходить по барыгам.

Зачем все это нужно? Чтобы пилот был пользователем передатчика, а не исследователем черного ящика. А если не сделать того, что написано выше? Тогда возможно дежа вю. И, через некоторое время, на вопрос “ Почему пищит?” последует ответ: “Нажмите две кнопки, не помню какие”. Увы, память не совершенна. Удачи!

VitaliyB

For Focus
Евгений не могли бы вы показать, что нужно исправить в ASM файле?
До сих пор не могу найти хороший компилятор С, подскажите пожалуйста какие
из них нормально работают.
О рабочей зоне потенциометров.
Мне представляется,что эту проблему можно решить с помощю пасты КОНТАКТОЛ US
(Используется для ремонта пультов ду,контактных площадок, экранирования пластиковых
корпусов и т.д.) и никакого меднения и серебрения.
Удачи во всех делах и хорошего настроения.

Magelan

Для переделки потенциометров использовал токопроводящий клей используемый для ремонта обогревателя заднего стекла автомобиля… (Хотя сейчас уже много чего токопроводящего выпускается)

29 days later
SVS

Focus

От скольких вольт работает индикатор?,
на схеме показано 5вольт, а в даташите на индикатор 3,3вольта?
А прошивка Вашего кодера находится в архиве proekt?

С уважением Валентин.

14 days later
SVS

Здравствуйте Женя.
Собрал Я кодер по Вашей схеме, применил индикатор от нокии 3310 или 3410, точно незнаю.
Запустил и на экране вижу такую картину
Что может быть такое что цифры находятся так низко и последняя строчка смещена?
В меню модели невлезли 5 моделей, а только 4 и 5-ая модель невидна, хотя она присутствует когда опустиш курсор наже.
В меню каналы такаяже фигня невлазят в экран 3 нижних пункта, их невидно ,но они есть?
Подскажите почему такая ерунда.
А если экран не 3410 , а 3310, то возможно переписать hex под 3310 и проверить предположение?

Индикатор питается от 3,5в.
Я думал что спалил индикатор , а оказалось минус нетуда припаял.
С уважением Валентин.

SVS

Здравствуйте Евгений.
Можно изменить в прошивке следуещее, сдвинуть часки таймера выше и чуть левее, чтобы таймер нормально показывал, а то нету нужного индикатора, есть только 3310.
Или переделате плз. под индикатор 3310.
С уважением.

SVS

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

yura_v

Есть другая идея по поводу народного модулятора

На атмелине делается только ацп часть для оцифровки джойстиков и кнопок
всё это высаживается в компорт
далее берётся едимакс роутер midge.vlad.org.ua ( ~35$)
который есть полноценный компутер с линуксом на борту
во евойный второй ком вдувается инфа с атмелины
к выходу кома подрубается какой-нибудь стандартный ЖКИ который поддержан в линухе
пишется прога для модулятора прямо на обычном компе с подрубленым жки
хоть на пёрле
далее несколько вариантов
cгенерённый PPM высаживаем на однобитный порт от лед или от usb едимакса
либо отправляем его в атмелину и уже с неё на ВЧ
либо плодим на едимаксе i2c и уже далее куда нибудь 😉

А если заработает блютус ( в усб версии едимакса) то можно попробовать и через него:)

Преимущества - софт пишется легко и размашисто любым программёром на любом компе с линухом и потом тупо пересобирается под едимаксом.
Недостатки - adm5120 жрёт многовато.

14 days later
focus

Доброго времени суток! Продвигается проект сейчас оч слабо… Надо сдавать выпускные и вступительные экзамены. Наработки есть, но выкладывать пока нечего… недавно заказал еще одну печатную плату, т.к. прошлая не устраивала… Жду. Обещали после праздников сделать.

А по поводу компутера и лиукса в кодере - это перебор… тем более за 35$ имхо…

Если интересно - вот последняя вресия ПП. Разведена немного коряво, но меня устраивает. Высоких частот там нет.

rulll
focus:

Высоких частот там нет.

За то есть АЦП…

focus

есть… Но он 10 бит, и все обвешано кондерами… так что здесь все ОК. Дерганки нет совершенно.

yura_v
focus:

есть… Но он 10 бит, и все обвешано кондерами… так что здесь все ОК. Дерганки нет совершенно.

Плата я смотрю под мегу128 разведена
а схема под неё есть?

lamobot

2yura_v:
линукс не система реального времени и никто не гарантирует что сигналы будут генерироваться так как хотелось бы. хотя если пересобрать ядро с опцией preemptive то это уже почти ))

focus

не, если линукс, то он тока обрабатывает сигналы и передает кодировочному блоку… а он уже шлет сигнал в реальном времени…

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

yura_v
lamobot:

2yura_v:
линукс не система реального времени и никто не гарантирует что сигналы будут генерироваться так как хотелось бы. хотя если пересобрать ядро с опцией preemptive то это уже почти ))

линух выдаст по кому или по и2с байты каналов в однокристалку которая и сгенерит ППМ
общая задержка там минимальная поскольку это не интел архитектура. Да и задач то в том линухе других нет.

но если уйти от ППМ то проблема нереального времени вообще уходит

можно попробовать даже через комп в качестве эксперимента 😃