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

Ser_bil
lamobot:

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

такой вариант сейчас и рассматриваетсятолько вместо задержки 1-1,5 сек ещё кнопочка вроде подтверждение…
либо переключатель трёхпозиционный пока оставил это на сладкое 😃

lamobot

честно говоря мне почти никогда не приходилось переключать режимы в полете =) поэтому судить не могу удобно это или нет. но мое ИМХО все же, что лучше бы исключить необходимость пялится на экран. допустим я лечу и смотрю в небо, и задумал переключить-получается я должен взор опустить на экран, покликать там =) попытатся разобрать название режима… короче не знаю. я наверное тумбер оставлю

настроение у меня фичакатное 😵

Ser_bil
lamobot:

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

здесь ты полностью прав… тумблер форева!

focus

Долго не было… Сначала экзамены, потом соревнвания, день рождения, выпускной… Все… Школа кончилась 😦((
Но передатчик движется к финалу. Вот выкладываю некоторые фотки менюшек.

З.Ы. для переключеня режимов у меня тоже стоит тумблер на три положения.

Сергей_Боровков
lamobot:

интересно конечно узнать как это сделано в фирменных передатчиках. но уж больно не хочется выслушивать некоторых особо умных хоббистов с их репликами "аааа он не может даже придумать как переключать режимы ааа пошел бы работать и купил футабу, недоумок!!! " 😲

Если интересно, могу расказать как сделаны переключатели на “Фирменном” чисто вертолетном пульте от валкеры. Думаю, что они там все слили с jr или еще откуда-то.
Там есть 3 шт. переключателя dual rate.
Для чувствительности гироскопа задается два значения, одно из которых в дальнейшем выбирается для каждого полетного режима.
1 шт. 3х-позиционный переключатель режимов+1 режим Throttle hold, который перекрывает 3х позиционный переключатель, если throttle hold включен. Для всех 4х режимов задаются кривые шага и номер чувствительности гироскопа. Для всех, кроме throttle hold задается газ. Для throttle hold задается уровень газа в процентых при всех положениях стика.
Есть крутилки для регулировки газа и шага в среднем положении стика газа (думаю чисто вертолетная фича)+крутилка, сдвигающая кривую шага на всем протяжении вверх-вниз.
Переключатель gear.

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

Есть монитор, показывающий положение всех каналов.

Есть настраиваемая пищалка по уровню напряжения аккумукляторов и запускаемый вручную таймер. Напряжение аккумуляторов показывается на экране.

Чего нет и что считаю удобством:

  1. Показа текущего режима
  2. цифрового триммера стика газа. (Почему-то аналоговый)
  3. Когда крутишь ручку pit trim (сдвигающую кривую шага целиком), то на экране не появляется график. Но двигается ползунок.
  4. Отсутствует таймер по газу больше определенного.

Да, экран неизвестного разрешения размером 5.7 на 3 см. Его площади и пиуселей достаточно для вывода практически всего необходимого. К примеру, обычные менюшки там высвечиваются в два столбца и под скроллер никогда не попадают.

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

Да, проц - то ли 32-я, то ли 64-я мега.

lamobot

спасибо вам большое! очень интересно!
несколько раз перечитывал-вроде понял =) Теперь обмозговываю.

Мне кажется что для универсального пульта будет оптимально иметь два ползунка, две крутилки, 4-6 трехпозиционных тумблеров и 2 двухпозиционных. Ну и ручки само собой. Кто нить прокомментирует?! 😉

Кстати в JR вроде бы тоже аналоговый триммер газа.

Если надо, могу сделать фотки экрана и выложить

если вас не затруднит, сделайте парочку пожалуйста!

Да, проц - то ли 32-я, то ли 64-я мега.

а вот это неожиданно! наверное на асме написана прошивка

svb

2focus:

Сделал таки Ваш кодер.
Переписал исходник на GCC под Mega128
Меню работает изумительно. Таймер полётного времени ведёт себя странно - хочет - стартует сразу при сбросе контроллера, хочет - через 2-3 минуты (то есть через время, никак не связанное со значением таймера), а иногда и вовсе не стартует.
В чём может быть засада?

Кстати, что и где надо поменять чтобы таймер работал правильно при тактовой 16МГц вместо 12МГц ?
(у меня отладочная плата на базе Mega128 с кварцем на 16МГц
ERE EMB128C16 + ERE MEGAEX )

Ser_bil
svb:

2focus:
Кстати, что и где надо поменять чтобы таймер работал правильно при тактовой 16МГц вместо 12МГц ?

проблеммка немного шире нежели кажется…
часы у вас торопятся так? так!
а считаются они у фокуса в прерывании от таймера!
тобиш тут:

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

если под GCC то тут:

SIGNAL(SIG_OUTPUT_COMPARE1A)

и параметры PPM у вас тожа уплыли !!!
у вас сейчас получается таймер щёлкает на 2 мегагерца а в оригинале было 1,5!!
а чтобы врё правильно заработало нужно ввести поправки в длительности каналов а часики сами наместо станут !!!

svb
Ser_bil:

и параметры PPM у вас тожа уплыли !!!
у вас сейчас получается таймер щёлкает на 2 мегагерца а в оригинале было 1,5!!
а чтобы врё правильно заработало нужно ввести поправки в длительности каналов а часики сами наместо станут !!!

Ага
я увеличил значения регистров чтобы считало “дольше”. Но часики как бежали - так и бегут. как раз на 25 прОцентов быстрее 😦
у Евгения значения канальных импульсов 2250, я выставил 3000 … Но ничего не изменилось … ВООБЩЕ НИЧЕГО !!! Может я не туда тыкаюсь? Ткните плиз куда мне надо, я с Таймерами в АВР ещё ни разу не работал - посему для меня это “тёмный лес”.

Прикол то ещё и в том, что эти часики то сами с места срываются - а то никакими усилиями не заставишь их тикать , и где ковырять - я тоже пока не понимаю.

rulll

Привет всем!
Переписал кодер Фокуса ( для мега16) под под схему Фокуса на мега128.
Хекс внизу.

#define up PIND.4
#define down PIND.5 // навигация по меню
#define ok PIND.6
#define esc PIND.7

#define ch7_1 PINE.2
#define ch7_2 PINE.3
#define ch5 PINE.4 // пятый канал
#define rate PINE.5 //расходы первые/вторые
#define cut PINE.6 // выключение двигателя
#define beeper PORTE.7

Ser_bil
svb:

у Евгения значения канальных импульсов 2250, я выставил 3000 … Но ничего не изменилось …

Прикол то ещё и в том, что эти часики то сами с места срываются - а то никакими усилиями не заставишь их тикать , и где ковырять - я тоже пока не понимаю.

del=ch[1]+ch[2]+ch[3]+ch[4]+ch[5]+ch[6]+ch[7];// вычисляем общую длину импульсов
del=30000-del;													// вычилляем длительность синхропаузы

здесь 30000 исправить на 40000
нуи считать каналы от 3000 и поправочка нужна к тому что прибавляеш к 3000
иначе получиш слишком шерокий диапазон длительностей и можеш выжеч машинки
выглядеть будет примерно так:

ch[1]=3000+adc[1]+trim[1]*9;

по поводу почему “срываются” часы надо в твой код глядеть… 😉

svb
Ser_bil:
del=ch[1]+ch[2]+ch[3]+ch[4]+ch[5]+ch[6]+ch[7];// вычисляем общую длину импульсов
del=30000-del;													// вычилляем длительность синхропаузы

здесь 30000 исправить на 40000

У Евгения есть ещё значение задержки 14000 - его тоже надо менять?

Ser_bil:

ну и считать каналы от 3000 и поправочка нужна к тому что прибавляеш к 3000
иначе получиш слишком шерокий диапазон длительностей и можеш выжеч машинки
выглядеть будет примерно так:

ch[1]=3000+adc[1]+trim[1]*9;

по поводу почему “срываются” часы надо в твой код глядеть… 😉

вот мой код - фактически это просто переделанный под Мегу128 и под GCC кодер Евгения. Да, и define вынесены в отдельный файл config.h, но логику работы я не менял.

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

Coder.rar

Ser_bil
svb:

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

по евгению
таймер запускается принажатии esc и up
останавливатся по esc и down

	  if ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера
		if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера

щас гляну ваш код ,далеко не уходите 😉

про 14000 это инециализационное значение если его не поменять то первая посылка после включения будет не правильная!короткая…
в принчепе ничего страшного но для полядка поставте туда 19000

svb
Ser_bil:

по евгению
таймер запускается принажатии esc и up
останавливатся по esc и down

	  if ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера
		if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера

Если верить этому коду, ТО (!esc)&&(!up) означает что кнопки НЕ нажаты, а вот (esc==0)&&(down==0) - как раз нажаты, и вроде как мне пару раз этой комбинацией удалось остановить таймер. но только пару раз 😦

Ser_bil:

щас гляну ваш код ,далеко не уходите 😉

про 14000 это инециализационное значение если его не поменять то первая посылка после включения будет не правильная!короткая…
в принчепе ничего страшного но для полядка поставте туда 19000

Ок, это поменял , я сейчас параллельно это в VMLAB кручу. У меня длительность канального импульса получается 104.6us , а пауза между импульсами - 406.7us , это правильно?

Ser_bil
svb:

Если верить этому коду, ТО (!esc)&&(!up) означает что кнопки НЕ нажаты, а вот (esc==0)&&(down==0) - как раз нажаты, и вроде как мне пару раз этой комбинацией удалось остановить таймер. но только пару раз 😦

одно но focus кнопачками на землю ножки коротит!!!
значит эти ножки подтянуты внутренними резисторами к плюсу и пока я не нажму на ноге будет “1”, а когда нажму то “0” а записи типа

(!esc)&&(!up)
и
(esc==0)&&(down==0)

равнозначны и обе говорят если 0 то отдать истину

Ок, это поменял , я сейчас параллельно это в VMLAB кручу. У меня длительность канального импульса получается 104.6us , а пауза между импульсами - 406.7us , это правильно?

там всё есть 😋
www.rcmaster.ru/club/glider/…/index.shtml

svb
Ser_bil:

а записи типа

(!esc)&&(!up)
и
(esc==0)&&(down==0)

равнозначны и обе говорят если 0 то отдать истину

Значит мне в моём случае надо поправить это под GCC, спасибо, щас сделаю.

Modris

Voprosik, a shemka Focus’a na atmega128 takajazhe ilji 4toto drugoje? Kakto njenashol v etoi vetke na 128, jestj toljko na Atmega 64.

svb
Ser_bil:

по евгению
таймер запускается принажатии esc и up
останавливатся по esc и down

	  if ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера
		if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера

щас гляну ваш код ,далеко не уходите 😉

Проверил - по esc + down таймер останавливается, но ненадолго, проходит какое-то небольшое время и таймер САМ стартует с последним значением, стартовать таймер по esc+up у меня так и не вышло.

С того момента как поменял все переменные в сторону увеличения у меня таймер вообще никак не стартует. Без JTAG отладить никак не получается, буду ждать когда посылка приедет с JTAG для AVR.

Большое спасибо за консультации и вообще за участие.

Персональное спасибо Евгению за его работу.

Сергей_Боровков
lamobot:

Мне кажется что для универсального пульта будет оптимально иметь два ползунка, две крутилки, 4-6 трехпозиционных тумблеров и 2 двухпозиционных. Ну и ручки само собой. Кто нить прокомментирует?! 😉

Для вертолета по-моему желательно иметь три крутилки, они помогают настраивать висение. А вот про ползунки не подскажу - в самолетах не шарю. На валкере есть ползунки (по бокам, под указательные пальцы), но они банально не задействованы. Есть и еще один переключатель незадействованный.

Фотки чуть позже сделаю.

osnwt
lucky75:

а ссылочку на что-то подобное? в частности на софтверный USB-лоадер, для примера.

Всему свое время. В данном случае это время пришло: вот ссылка на список проектов, базирующихся на открытом avr-usb драйвере от Objective Development. Сегодня утром там опубликованы новые проекты, в том числе два USB загрузчика.

Один из них - мой с поддержкой AES шифрования (компилятор IAR). Я все же решил его опубликовать КАК ЕСТЬ (без поддержки). Он не является законченным проектом для повторения, хотя в опубликованном виде он у меня работает на тестовой плате на базе ATmega32 (для 64/128 его придется модифицировать, но ход пока не дошел). Исходники утилит для PC (особенно утилита загрузки) выглядят отвратительно, поскольку это был хак чужого кода на скорую руку для проверки работы, собственно, бута. Претензии по стилю программирования не принимаются. Исходник самого бута для ATmega32 написан мной самим (не считая AES) и достаточно подробно прокомментирован в самом тексте. Этого хватит для того, чтобы сделать свой вариант под свои нужды. Я не поддерживаю этот проект, но готов попробовать ответить на конкретные вопросы (а не общие типа “почему это все не работает”).

Второй загрузчик использует библиотеку поддержки boot от GCC, прост и элегантен. Он пригоден для зашивки в бут блок ATmega8/48/88/168 и т.п. Для работы требует установку libusb драйвера на хост. Я его не проверял (он только сегодня появился). Если не требуется наворотов, то этот бут должен быть весьма хорош.

Сам драйвер обновился 26.06.2006. Из полезных нам фич есть поддержка дополнительных точек USB и возможность использовать любые пины порта для D+/D-, а не обязательно нулевой бит. Это крайне полезно для поддержки USB, например, в контроллере AT90PWM3. До сих пор я не видел возможности сделать в нем конфигурирование по USB из за занятости нулевых пинов другими аппаратными функциями, но теперь это вполне возможно.

В общем, дерзайте!

PS. На базе данного USB драйвера мной написан ради интереса свой вариант прошивки RC USB адаптера для схемы, приведенной в статье на данном сайте. В отличие от опубликованного, этот вариант написан на C (среда и компилятор IAR, 30-дневная версия доступна бесплатно с их сайта) и имеет открытый исходный код в соответствии с лицензией на avr-usb. Модульная (выбор на этапе компиляции) структура позволяет включать произвольный входной интерфейс (PPM декодер, встроенный ADC, различные варианты PCM и т.п.) и произвольный выходной кодер (стандартный джойстик, специальные интерфейсы для популярных симуляторов, выход на серво-тестер и т.п.). Я не приветствую публикации только прошивок для устройств, выкладываемых для публичного повторения, без исходников. Потому готов выложить исходники данного проекта. Есть только один нюанс: у меня нет собранной схемы, приведенной в той статье, я экспериментировал на своем собственном железе. Потому нужен доброволец (один), кто согласен проверить работу прошивки на собранном по той схеме устройстве и подтвердить ее работоспособность. После чего исходник будет опубликован. Только не обещаю, что сделаю это в течение 1-2-n дней, так как хотелок много, а времени мало. По мере возможности.

Размер кода в варианте PPM/Joystick - окодо 2.5 килобайта, что оставляет даже место в меге8 для USB загрузчика, что удобно тем, у кого нет своего программатора. Достаточно зашить раз загрузчик, после чего свободно экспериментировать с кодом приложения, зашивая его по тому же USB.