Альтернативная прошивка к FlySky/Turnigy/I-Max/Eurle (Кодер Fokus-a - MSV)

ubd

Оказалось межканальная пауза 0,1мс, из-за более высоко частоты проца. Родная частота 12 мгц, а в Турниге 16 мгц.
Не могу разобраться как сделать межканальную паузу 0,4 мс.

Сразу скажу, Си я не знаю. По этоу вопросы страшно ламерские. На PCI могу написать прогу, на PIC-Basic, а на Си нет пока…

Алексей мне выслал исходники, но их нужно поправить.
Мне нужно что бы не было полётных режимов, трёх позиционник был как 6-й канал, и 7 моделей в памяти.

Вот что нарыл:

Я так понимаю вот тут:

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1500,000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x02; // 02-disconnect c2-invert 82-no_invert
TCCR1B=0x1A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x17;
ICR1L=0x70;
OCR1AH=0x02;
OCR1AL=0x68;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

В регистре OCR1 устанавливается значение для таймера. Сделал OCR1AL = 80. Это мне Сергей Мельник msv подсказал, посчитал под 16 мгц. Но всё ровно межканальная пауза осталась прежней.
Но ведь этот таймер может работать только на выводе PB5 как в оригинальной прошивке. Но у Турниги используется порт PD1.
Какой тогда таймер отвечает за межканальную паузу?
И как она вообще формируется в программе?

Убрал переключение режимов полёта, тумблер сделал как SW2_1 и SW2_2. Но трёх позиционник не работает как 6-й канал, реакция на него есть - пикает когда щёлкаешь, но 6-й канал в мониторе не работает, стоит в 0. Нужно ещё что то сделать, я не знаю что…
Вывод режима полёта из главного экрана, убрал.

Не работает вызов монитора при нажатии кнопки вправо. На кнопку вправо никакой реакции, из главного экрана, только пикает. Хотелось бы что бы работало.

В меню Model, после пункта Reset, появились Aileron и Elevator. Их там не должно быть. Как убрать?

Помогите разобраться пожалуйста…

Source_Mega_64_for_TGY_9X.rar

Aleksey_Gorelikov

Ха! Кажется понял в чем прикол!!! 😃 Чаю попью, открою ноут с кодевижином. Походу таймер не причем! Смотри “маппинг” в прерывании таймера на ногу вывода ппм! Там ногодрыганье, т.к. нога к таймеру не привязывалась. Возможно там собачка порылась, уже не помню, давно это было.

ubd

Я не знаю что такое маппинг…

Aleksey_Gorelikov

Ну я имел ввиду назначение ног. В общем да, в теле прерывания просто дрыгал ногой. Вот, смотри:
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
static unsigned char nb=0;
static unsigned int sum=0;
static unsigned char fpv=0;
static unsigned int out=40000;

ICR1H=(unsigned char)(out>>8); //заливаем длительность канала
ICR1L=(unsigned char)out;

if (cur_model.modulation){
PORTB.0=1;
delay_us(100);
PORTB.0=0; } else
{PORTB.0=0;
delay_us(100);
PORTB.0=1; } ;

Собственно делай_ус(100) - 100 микросекунд “иголка”.

ubd:

В меню Model, после пункта Reset, появились Aileron и Elevator. Их там не должно быть. Как убрать?

Меню.с:

#define menuT0L 4
#define menuT1L 12
#define menuT2L 12
#define menuT3L 2
#define menuT4L 5
#define menuT5L 8
#define menuT6L 2
#define menuT7L 3
#define menuChL 6

Циферки - это кол-во пунктов в меню. Поиграйся. 😃

Вячеслав_Михеев
Aleksey_Gorelikov:

Ну я имел ввиду назначение ног. В общем да, в теле прерывания просто дрыгал ногой. Вот, смотри:
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
static unsigned char nb=0;
static unsigned int sum=0;
static unsigned char fpv=0;
static unsigned int out=40000;

ICR1H=(unsigned char)(out>>8); //заливаем длительность канала
ICR1L=(unsigned char)out;

if (cur_model.modulation){
PORTB.0=1;
delay_us(100);
PORTB.0=0; } else
{PORTB.0=0;
delay_us(100);
PORTB.0=1; } ;

Собственно делай_ус(100) - 100 микросекунд “иголка”.

Меню.с:

#define menuT0L 4
#define menuT1L 12
#define menuT2L 12
#define menuT3L 2
#define menuT4L 5
#define menuT5L 8
#define menuT6L 2
#define menuT7L 3
#define menuChL 6

Циферки - это кол-во пунктов в меню. Поиграйся. 😃

Я уже думал данно прошивкой никто не пользуется 😒

Aleksey_Gorelikov
ubd:

Убрал переключение режимов полёта, тумблер сделал как SW2_1 и SW2_2. Но трёх позиционник не работает как 6-й канал, реакция на него есть - пикает когда щёлкаешь, но 6-й канал в мониторе не работает, стоит в 0. Нужно ещё что то сделать, я не знаю что…

Содер.с:
if(prop3<200) input[5]=0;
else if(prop3>800) input[5]=1500;
else input[5]=750;

Вот тут пятый (т.е. шестой, т.к. нумерация от нуля!) канал привязан к крутилке проп3
Вместо этого надо что-то типа:
if(keys & F_SW2_1) input[5]=0;
else if(keys & F_SW2_2) input[5]=1500;
else input[5]=750;

ubd

Спасибо, большое!
В понедельник попробую. Всё на работе.

ubd

Я уже думал данно прошивкой никто не пользуется

Да ну, пользуемся. Штатная Турниговская тупая напроч.

ubd

Ещё бы сделать вызов Монитора нажатием вправо. Я что то сам пытался, не вызывается.

Aleksey_Gorelikov

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

ubd

Там кнопка вправо не задействована была вообще, на неё сделаю.

ubd

В общем всё сделал.
SW2 работает, в меню модель теперь порядок.

А вот с межканальной паузой, проблема теперь другая. Она стала 0,4, но длительность канала стала считаться некорректно.
В крайних положениях не дотягивает до 1мс, и до 2 мс. т.е. в одну сторону даёт не 1 а 1,3 мс а в другую сторону не 2 а 1,7мс. Как раз я на 0,3 увеличил паузу, и на 0,3 уменьшилиьс расходы. Это точно. Специально сейчас сидел осциллом стомотрел в разрешении 0,2мс на клетку. Всё точно на 0,3мс, недотягивает в обе стороны. Ну и как итог, АП от msv стоит в FS, т.к. управляющий канал и канал газа, не доходит до 1 мс.

А среднее положение, чётко 1,5 мс.

Алексей, помогай…

Aleksey_Gorelikov

Да не должна ширина “иголки” виять на таймер. Может и до этого расходы неполные были и никто не замечал??? По идее - достаточно увеличить расходы или в микшировании более 100% поставить, если “фокус” не помогает, то ограничение канальных импульсов в кодер.с:
//limit
if(val<-1350) val=-1350;
if(val>1350) val=1350;

ubd

Может и до этого расходы неполные были и никто не замечал???

Сейчас попробую изменить на 0,1 мс и постмотеть что будет.

Алексей, базара нет, при паузе в 0,1 то же самое расходы не полные. Точно так же не хватает 0,3 мс. Я просто до этого так внимательно не расматривал.

Слушай, получается и прошлая прошивка не даёт 100% расходы.
Оригинальная прошивка от MSV нормально работает. Она у меня до сих пор юзается на полностью самодельном передатчике.

Как бы нужно поправить этот косяк. Я понимаю что можно в меню расходы добавить, но это колхоз.
Говоришь вот это влияет на канальный импульс:
//limit
if(val<-1350) val=-1350;
if(val>1350) val=1350;

Только не понятно какие значения ставить? 1350 это мкс? Или что?

ubd

Здаётся мне что с увеличением частоты, уменьшилась и длительность канального импульса. Получается что под кварц 16 мгц, длительность канального импульса на пересчитывали…

Aleksey_Gorelikov
ubd:

Как бы нужно поправить этот косяк. Я понимаю что можно в меню расходы добавить, но это колхоз.

Ну если нужно - правь. Я считаю, что при максимальных (120%) расходах аппы импульс ппм не должен выходить за пределы 1.1-1.9мс. И моя логика объясняется просто: на ппм нет стандарта как такового. Общепринятым считается 1-2мс, у каких то аппаратур 0.8-1.8, у каких-то 1.2-2.2. Кто и что считает косяком - мне плевать. Я за совместимость с любыми радиомодулями-приемниками-декодерами. Завтра появится кто-то с jr модулем и начнет плеваться, что ему 0.8мс предел подавай, а потом кто-нибудь захочет 16 каналов в 22мс упихать - мне всеравно! Логика масштабирования (да и всего передатчика) не выходит за рамки линейного уравнения y=k*x+b сложного тут ничего нет. В свое время дядька Глайдер очень доходчивый труд написал по логике передатчиков.
Я с самого начала писал, что проект поддерживать не планирую. Однажды мой друг купил турниджи, и пока она валялась у меня я поигрался с прошивкой самодельного передатчика на этом железе. В какой-то момент - прошивка вызывала интерес и я понемногу ей занимался, потом забросил. Я ждал, что кто-то подхватит эстафетную палочку и дешевая но функцианальная аппаратура позволит нищим школьникам шагнуть на шаг вперед в моделизме.
Турниджи не дала нового витка развития самокодеру, но под нее пишут другие энтузиасты и другой, между прочим весьма достойный софт. Мне турниджи не интересна. Я по прежднему раздаю исходники всем желающим, подсказываю, но не работаю ни на кого! Мне не интересно тратить время на то, что кто-то воспринимает “стандартный” ппм не так, как я. Исходники у тебя есть - впреред! Твори, выдумывай, пробуй. Право пришития перламутровых пуговиц - у тебя.

А базар - он есть. Кому не нравится - могут купить бренд, могут влить прошивку от Влада, ер9х и миллион подобных, не нравится “колхоз” - можно использовать стандартную и пинать за косяки производителя, раз ты ему его труды оплатил.

ubd

Да нет я без претензий.
Я просто к тому что бы мне помочь поправить, вот и всё.
Но если это сложно и трудоёмко, то ладно. Нет так нет.

ВитГо

Пауза должна быть 300 МКС по-моему а не 400

PigTail

Опять таки и на паузу стандарта нет, но самая распространенная 400

ubd

От 300 до 400 стандарт. В общем то это не принципиально. Просто 100 слишком мало оказалось. Хотя и 100 достаточно. У меня FrSky модуль работает с той прошивкой где 100, уже год. Я только сейчас это узнал что там 100 мкс.

В общем я сделал расходы до 135% и всё ОК, длительности нормальные.

Алексей, спасибо!

22 days later
MPetrovich

Приветствую всех.
Есть необходимость в подключении к сателлиту Hobby King 2.4Ghz Receiver 6Ch V1 системы стабилизации FuBar по протоколу S.Bus. Принципиально, описание обоих протоколов я нашёл; однако, прежде, чем мутить собственный декодер, хочу спросить у народа: может кто-то уже делал что-то похожее? Заранее спасибо всем, кто откликнется.