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

ВитГо

ну вообще то это первая отечественная альтернативку на мегу… я ею пользовался до того как VCoder написал, вроде адекватно работала…
Единственно что я использовал ее со штатным железом (мега64)…

ubd

У кого стоит прошивка на Мегу 128, отзовитесь. Как она у вас работает? И если работает нормально, то прошу выслать её мне, вернее тот hex который у вас прошит…

RW9UAO

у меня работало великолепно с ЖКИ 128х64 (стандартный какой-то) и оригинальным нокио 3310 что-ли.

ubd

Нет именно та которая для Труниджи 9х, или клонов.

Aleksey_Gorelikov

Да ни у кого ее нет, т.к. нет и необходимости курочить аппу ради вдвое большего епрома. Собственно, и актуальность прошивка думаю давно потеряла. Переезжайте на ER-9x.

Я когда-то, кому-то по просьбе 1 раз перекомпилил под 128, что, когда и кому- уже не помню. Отзывов мтоже не помню. Компилить специально - сейчас тоже не буду, т.к. проверить не на чем. Давайте считать проект умершим.

ubd

А ну вот и никто не тестировал толком на 128-м процу. Она глючная оказывается.
На ER мне нет необходимости переходить, этой хватает. Спасибо.

ВитГо

да и нет смысла в переходе на 128ую мегу… хватает 64ой…

ubd

Я то сначала не понял. Думал, что нужно обязательно 128 паять, что сполна всё получить от этой прошивки. оказалось 64 хватает.

18 days later
Lordik5

Где-то,помнится,промелькивала инфа-буквы AU у АтМег-это пониженная тактовая частота (кажись,8МГц).Надо поднять даташЫт.Хотя некоторые экземпляры и 16 тянут.Так что глюки и зависания возможны из-за этого.Только что прошил 2-й экземпляр,и нарвался на “триггерный” эффект пищалки.А на 1-м экземпляре 1,5 года назад всё было тип-топ…😵

ВитГо

гм… я считал всегда что пониженная частота это L индекс…
а AU это нормальная мега… в TQFP корпусе…

metronom

AU - коммерческое исполнение ( в смысле температурного диапазона).PU - соответственно промышленный вариант. А “L” правильно - низкое потребление - соответственно низкая тактовая.

Aleksey_Gorelikov

Нынче технологии производства чипов поменялись, поменялась и маркировка. Теперь уже чипы с индексом L становятся вымирающим видом старья. Нынешнее поколение марикруется буквой А в конце. В аппе стоит atmega64A. Серия “А” работает от 2.8 вольта и вроде бы не имеет ограничения по частоте при низковольтном питании. Так что не парьтесь - у нас от 5 вольт питается и буква А в конце - глючить на 16 мгц не должно.

З.Ы. смотрите свежие даташиты…

11 months later
ubd

Выяснилась проблема с сигналом РРМ на выходе.
Прошивка для Мега 64 без полётных режимов Coder_mega64_1fly_mode.hex.

Почему то межканальная пауза не 0,4мс, как по стандарту а всего 0,1 мс. Это очень мало. У меня автопилот не видит её, и не видит пачку РРМ.
Алексей, у вас исходники. Поправьте пожалуйста межканальную паузу на 0,4.

Самое интересное, что родная прошивка автора msv, нормально выдаёт 0,4 мс, но тот кто менял под турнигу 9х, сделал 0,1 мс. Зачем?

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

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

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