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

dollop
Kappitoshka:

Посмотрел схемы которые Omegats выкладывал…

Нет. Поправляем… Какой вы глазастый 😛. Я только С31 и С15 увидев насторожился…
Спасибо.

Andrej100
Lordik5:

Вот читаю ваши мнения по поводу новой v1.9, и облизываюсь- дисплей-то у меня “перевёрнутый”,и залить 1.9 я не могу.Может,кто уже скомпиллил её под перевёрнутый 3310 ?Поделитесь,пожалуйста…😦

Вот 😒

Coder.rar

dollop

Исправил плату для HK-T6A и ему подобных.
Там в архиве два варианта. Оличаются организацией питания кодера и ВЧ блока.

  1. на двух импульсных стабилизаторах LM2674-5.0
  2. на двух линейных стабилизаторах 7805 и одном P-Ch MOSFET.

Все замеченные (спасибо Kappitoshka) ошибки исправлены.
Возможно (как это часто бывает) добавлены новые 😛 - шутка, конечно, но до “массовых заказов для всех обладателей подобных пультов” желательно проверить живьем.

Coder_msv_HK-T6A.zip

omegats

Спасибо за замеченные ошибки. Не буду цитировать, т.к. с мобильного, но по возникшим вопросам… LM2674-5.0 брал в Имраде, резюки и кондеры 1206 (0805 влазят почти везде), кнопки и переключатель - разводил под те что были в наличии. Разъемы сначала пропаивал с одной стороны, потом приподнимал пластик и с другой стороны, где надо. Переключатель - сначала перемычку между слоями, а потом его впаял. Плату делал по ЛУТ. Еще не запускал - успел сделать програматор на FT232RL+МЕГА8 и сдох ноут 😦. Так что…

ВитГо

Еще один вопросик по синтаксису СИ (я понимаю что наверное не совсем то место… но других у меня пока нет)

Описал структуру
typedef struct {
unsigned char itemcol; // Количество пунктов меню
unsigned char *items[]; // пункты меню
unsigned char upitemnum; // указатель на вышестоящий пункт меню
}MENU_STRUCT;

Теперь мне нужно ее проинициализировать значениями

__flash const MENU_STRUCT menu_info[3]={
// Cтартовое меню - 0
{ 2, { “MODEL”, “SYSTEM” }, 255 },

// Меню MODEL - 1
{ 5, { “NEW”, “SELECT”, “EDIT”, “COPY”, “DELETE” }, 0 },

// Меню MODEL - EDIT - 2
{ 6, { “TYPE”, “NAME”, “TIMERS”, “CHANNELS”, “UCH”, “FLY_MODES” }, 0 }
};

вроде так ?
но на строчку
{ 5, { “NEW”, “SELECT”, “EDIT”, “COPY”, “DELETE” }, 0 },
codeVisionAVR ругается что мол пропущена }

мозг уже плавиться… как правильно ?

p.s. эх, как же тяжко переходить на СИ с Паскаля и Дельфей 😦

EagleB3

Я не могу себя назвать продвинутым программером, но, КМК, причина в том, что есть в CVAVR (или вообще в ANSI C?) какое-то ограничение на штуку, которая, вроде как, называется динамическим массивом. Если ее в CVAVR и можно задать, то, видимо, не так, как делаешь ты. И как ее можно задать я не знаю.

Для экспериментов я обычно преобразовываю участки к более “растянутому” виду, тогда становится понятно на что именно ругается компилятор. Например:

// Cтартовое меню - 0
    {   2,
        { "MODEL", "SYSTEM" },
        255
    }
    ,
    {   1,
        "AB",
        "CD",
        "EF",
        5}
    ,
    {   6,
        { "TYPE", "NAME", "TIMERS", "CHANNELS", "UCH", "FLY_MODES" },
        0
    }
};

Теперь изменяй количество “пунктов” для второго раздела меню (удаляя сначала строку “EF”, а потом строки “CD” и “EF”) - и все будет очень наглядно.
Ощущение такое, что компилятор определяет количество элементов массива по первой строке, и обижается, если в последующих строках это количество изменяется.

И в самом деле, если в описании типа сказать либо unsigned char *items[6];, либо unsigned char *items[0];, то проканает вот такая инициализация:

__flash const MENU_STRUCT menu_info[3]={
// Cтартовое меню - 0
    {2, { "MODEL", "SYSTEM", "", "", "", ""}, 255 },
    {1, { "AB", "CD", "EF", "", "", ""},        5 },
    {6, { "TYPE", "NAME", "TIMERS", "CHANNELS", "UCH", "FLY_MODES" }, 0 }
};
ВитГо

фиксированную длинну массива знаю… но хотелось по короче… а то у меня есть менюха в которой 28 пунктов… 😃))))

EagleB3

Почитай встроенный хелп - там довольно много и довольно толково.
Еще могу прислать мануал на CVAVR v.2.03.5. Или выложить его и еще несколько толковых мануалов по CVAVR, по Си вообще и по микроконтроллерному Си в частности. Или в сети поищи, например, “CodeVisionAVR пособие для начинающих, Лебедев М.Б.” - практически перевод мануала; причем из 250 страниц автор умудрился сделать 600…

ВитГо

переделал на фиксированное количество элементов… все компилится…

остальное в личку

EagleB3
ВитГо:

у меня есть менюха в которой 28 пунктов… 😃))))

Это жесть! Это обязательно надо разбивать на подпункты, КМК.

ВитГо

Я просто боюсь что разбив сделаю путанным меню…
28 пунктов это конечные точки каждого из органов управления. их 13 плюс еще одна пара нужна…
сейчас поделил на Stick (4 элемента) , Vario (3), Switch(5), Buttons(1)…

DD

ВитГо, можно вручную выделять память с помощью getmem, и потом с помощью указателей обращаться к элементам массива в этой памяти

ВитГо
DD:

ВитГо, можно вручную выделять память с помощью getmem, и потом с помощью указателей обращаться к элементам массива в этой памяти

Да, наверное это единственный выход…
Но для меню я его применять не буду, так как экономия на нулевых стрингах прибавит в коде - скорее всего плюс минус тоже самое и выйдет…

свой вопрос закрываю…

Всем помогающим большое спасибо !!! приятно осознавать что твоему кипящему мозгу помогают ! 😃

Modris

Jest lji vozmozhnostj pereklju4itj Dual Rate s odnjim viklu4ateljem na 1,2,4 kanal , kak eto sdelano v Futaba 7C?

dollop

Конечно. Но только на hardware уровне. То есть программно этот режим в имеющеся прошивке на тумблер не повесить (разве что в виде микшеров каких-нить) А на постоянно сделать можно - вместо трех тумблеров поставить один и запараллелить соответствующие входы микроконтроллера

Aleksey_Gorelikov

Выходы (точнее входы) можно и програмно запаралелить… Хотябы в def.h одну и ту-же ногу указать.

EagleB3

Совершенно согласен!
И, более того, если есть хотя бы минимальные навыки программирования (да или просто желание разобраться с программой - на уровне определения ног никаких сложностей вообще нет!), то, IMHO, это и надо делать программно.

Отдавать три ноги контроллера под то, что можно отлично делать одной ногой - расточительство!

Кстати, как вариант, при желании/необходимости: один из неиспользуемых переключателей (SA14…SA16) можно отдать под команду “Все двойные”. И рулить двойными расходами либо по отдельности существующими переключателями, либо всеми сразу.

msv

Для этого (в тч. групповое переключение расходов одним щелчком) существуют режимы полета.

valera_o

Молодцы, ребята!!! Благодарю всем за огромную проделанную работу!
Сделал еще вариант Евгения, “повернул” экран, летал на нем. Потом купил Спектрум, потому как надежность работы на 35МГц никакая…
А вот понадобился передатчик на 8каналов, достал с пыльной полки, перепрошил версией 1.7, повернув экран и приспособив к моей раскладке тумблеров. Печатка та же, разве только заменить пищик на безгенераторный, но таки спрошу. Подскажите хотя бы в каком файле можно отменить индикацию потребляемого тока и тока в антенне? Хочу поставить модуль Корона, ток антенны и вообще нет смысла мерять.

ВитГо

А кто нить замерял насколько много времени занимает по пиксельное рисование экрана ? особенно инверсных надписей да и надписей вообще ?

пишу для ТЮФ (Турниги\Юрки\ФлайСкай) - там экранная память организована таким образом что вывод символов с координатами Y кратными 8 - будет заключаться в копировании из знакогенератора 5-6-7 байт… правда знакогенератор должен по другому символы описывать… но я уже и шрифт нашел положенный набок 😃 (от мк161)

стоит переписывать процедуру вывода символа - или эти высвобожденные ресурсы все равно погоды не сделают ?

EagleB3

2 msv, чисто идея по поводу отображения индикаторов:

Чтобы управлять отображением и при этом не менять структуру меню и не вводить лишних переменных в EEPROM, можно, наверное, сделать так: если порог сигнализатора тока антенны поставлен в “0”, то убирать с экрана пиктограмму, индикатор и цифровое значение для антенны. Можно и прочие “антенные” места (обращение к ADC канала, обсчет) обходить по этому условию. А может быть за одно и вообще всю работу с LMX2306 обходить.