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

Ser_bil

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

lamobot

молдетз!

полетные режимы я переключаю тумблером с тремя положениями. ну короче их три у меня всего 😊
а мне больше и не надо ))

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

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

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.

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

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