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

EagleB3

Ну не могу молчать! Ну распирает меня!!! 😃

Сегодня сделал печатную плату под “Санву VG400”. Получилось ПРОСТО СУПЕР!!!
Кому интересно и кто трафика не боится - вот общий вид снизу (542Кб) и макро вид одного участка (854Кб). Это я не наилучший участок фотал - она по качеству ВСЯ ТАКАЯ! 😃

Еще не сверленая, не луженая и в размер не обрезалась. Протравлена, помыта, канифольным лаком покрыта - от него на дорожках “шагрень” и разводы. На макро снят участок возле ног 17…28. Две пары площадок под 0805 почти по центру - это конденсаторы обвязки кварца. Ширина дорожек 20th (0,508мм).

Делалось с фоторезистом ПНФ-ВЩ.
Крестики - “прицелы” для совмещения слоев верха и низа.

msv:

Прошу уточнить на схеме: PF0- датчик тока антены, PF1- датчик температуры, PD0- тахометр.

Сделано. Текстом. И про буззер безвстроенногенераторный - тоже. Новая ссылка на схему

VRV
vvvv:

наконец энкодер вместо кнопок
а нельзя ли сделать как то так что бы все управлялось с одного колеса как в футабе ?

пару постов назад кидал проект в протеусе с меню на знкодере(колесо+кнопка=от мыши)

EagleB3, по собственному опыту, старайся не делать ререходов под смд, их тогда паять трудно, а так симпатично. После 5 числа ожидаю свою вг400, буду ломать:)

И еще вопрос больше к моделистам, кто активно использует пульты. Какие функции в основном задействованы? Какие лишние? Каких не хватает? Если у кого есть желание и терпение-накидайте примерную структуру ВАШЕГО меню. Если подобный вопрос обсуждался- кинте ссылку.

DD

Видимо нет, просто температуру среды мерять. У меня стоит какойто подобный от микрочипа, этого когда покупал не было. И еще хотел давно спросить: когда датчик калибруешь, показания должны быстро скакать?

msv

Схема формирователя тахометра отсюда:
radiokot.ru/circuit/digital/…/index.shtml
У меня несколько изменена, но и оригинальная думаю будет работать.
Датчик тока антенны можно здесь разглядеть:
rcopen.com/files/000000000000000000000000
(мой ВЧ-модуль).
В датчике температуры особого смысла нет, просто был свободны вход АЦП…
TMP36 - стоит в корпусе передатчика, подальше от всяких “грелок”. Бывает итересно глянуть температуру, особенно зимой…

Какие функции в основном задействованы?

Я не пользуюсь двойными расходами. Вместо этого расходы настраиваю в режимах полета. Но это как-бы стандарная функция и убирать их совсем пока не тороплюсь…

DD
msv:

Схема формирователя тахометра отсюда:
radiokot.ru/circuit/digital/…/index.shtml

там на схеме перепутаны все ножки операционника, сначала долго думал почему не работает

PS: msv, не ответете на счет показаний датчика температуры при калибровке?

msv

Конечно ничего скакать не должно. Гляньте осцилографом, что идет с датчика на вход ацп. Датчик нужно обязательно шунтировать емкостью по питанию в непосредственной близости, и выход мне тоже пришлось шунтировать, иначе с него шел возбуд…

VRV
EagleB3:

Глючит. И 7.6SP0 глючит. Он нормально (вроде как) сохраняет/читает с адресов дальше 0x00ff, но не ватчит. Даже через волатил не ватчит.

Неожиданно нашлось решение, точнее даже не решение:) а просто оно заработало.
Выдрал мегу со старого проекта- в еепром пишется и трассируется до конца. Сылка narod.ru/disk/15823597000/encoder.rar.html , единственное , что было замечено при переносе мк на новый лист волшебство пропадает и снова глюк до 255 ячейки. Т.е. проверять прошивку нужно на этом листе. Если у кото разберется в чем проблема- сообщите, будет интересно узнать в каком месте искривлены руки:)

msv

Похоже довыпендривался с чехардой версий до первой помидорины на форуме…
Ну когда то ж надо начинать… 😃
Сейчас хочу написать движок для менюшек, по заветам Nick_Shl.
С тем, что сейчас наворочено, может разобраться только автор (да и то с трудом…).
Жутко не хватает прелестей ++, инкапсуляция, перегрузка функций, наследование и проч. радостей объект.ориентированного программирования. Ну ничего справимся. Вот только по срокам ничего обещать не могу…

VRV
msv:

Похоже довыпендривался с чехардой версий до первой помидорины на форуме…
Ну когда то ж надо начинать… 😃
Сейчас хочу написать движок для менюшек, по заветам Nick_Shl.
С тем, что сейчас наворочено, может разобраться только автор (да и то с трудом…).
Жутко не хватает прелестей ++, инкапсуляция, перегрузка функций, наследование и проч. радостей объект.ориентированного программирования. Ну ничего справимся. Вот только по срокам ничего обещать не могу…

Основная причина, по которой начал переписывать выложенное, невозможность разобратся с меню в исходниках + хотелось убрать/добавить свои функции.
Сейчас в очередной раз переписал движок меню(отличается от прев. поста). Основная концепция- свободное добавление/удаление/перемещение пунктов и подпунктов, с сохранением понятной структуры. Процедура отрисовки самого меню стандартная, а конечные пункты, при выборе которых изменяются параметры вынесены в отдельные процедуры, которые входят в описание меню в качестве адресов. Также перенес генерацию звука, обработку энкодера и обновление буфера на прерывания(можно усложнять математику, т.к. освобождается время мк).

Networx

2 msv, скажите пожалуйста, печатка останетса прежней, поменяетса только прошивка?
А то я начал работу над платой кодера и не хочетса ее потом выкидывать!
Спасибо, буду следить за розвитием проекта и ждать новой прошивки!

msv

Пока в очередной версии предполагается только внутренний редизайн, правда весьма серьезный. Схема, функциональность да и внешний вид не изменится.

EagleB3

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

Собираюсь выложить проект в Протеусе (плата под Санву VG400 + TIC154; может, кому сгодится типа референса), но сначала хочу свою железяку запустить. Вдруг косяки всплывут… 😉

VRV
EagleB3:

Собираюсь выложить проект в Протеусе (плата под Санву VG400 + TIC154; может, кому сгодится типа референса), но сначала хочу свою железяку запустить. Вдруг косяки всплывут… 😉

Біло бі неплохо, тк тоже под санву расчитіваю.

Пока в очередной версии предполагается только внутренний редизайн, правда весьма серьезный. Схема, функциональность да и внешний вид не изменится.

msv, накидал свою версию меню, посмотри, может сделаешь на ней. Преимущества постом выше.

Предваврительно обявленные функции отрисовки. При этом само меню рисует функция ShowStdMenuDisp(void ) , а остальные- экраны ввода параметров.


 void ShowMainDisp(void );
  void ShowStdMenuDisp(void );
  void ShowSelectModelDisp (void );
  void ShowSaveModelDisp (void );
  void ShowCopyModelDisp (void );
  void ShowModelNameDisp (void );
  void ShowMixerDisp (void );
  void ShowCurveDisp (void );
  void ShowSetingTimerDisp (void );
  void ShowBatareyDisp (void );
  void ShowSoundDisp (void );
  void ShowDRExpDisp( void );
  void ShowChReversDisp ( void );
  void ShowCHLimitDisp( void );
  void ShowMonitorDisp ( void );
  void ShowSaveAllDisp ( void );
  void ShowCopyModDisp  ( void );
  void ShowCopyCtrDisp ( void );


Сама структура меню- все ясно и понятно(перемещение строк внутри таблицы влечет изменение меню на экране-удобно переносить и добавлять пункты)



flash MENU_STRUCT MenuTable[MenuMaxItems]=
{
//-|---NameMenuDisp---|------|level|--|----Param-|-------|---------FUNC----------
{"SCR",                       0,        0,                   &ShowMainDisp},
{   "Main",                   1,        0,                   &ShowStdMenuDisp},
{     "Model",                2,        0,                   &ShowStdMenuDisp},
{       "Select",             3,    MAX_MODELS,              &ShowSelectModelDisp},
{       "Save",               3,    MAX_MODELS,              &ShowSaveModelDisp},
{       "Name",               3,    MAX_MODELS_NAME+1,       &ShowModelNameDisp},
{       "Mode",               3,        0,                   &ShowStdMenuDisp},//&&
{     "Settings",             2,        0,                   &ShowStdMenuDisp},
{       "Controls",           3,        0,                   &ShowStdMenuDisp},
{          "Curve",           4,    CURVE_NODES+1,           &ShowCurveDisp },
{          "DR&Exp",          4,        3,                   &ShowDRExpDisp},
{       "Chanels",            3,        0,                   &ShowStdMenuDisp},
{          "Mixers",          4,   MAX_OUT_CHANS+1,          &ShowMixerDisp},
{          "CH limit",        4,        4,                   &ShowCHLimitDisp},
{          "CH revers",       4,    MAX_OUT_CHANS,           &ShowChReversDisp},
{     "Options",              2,        0,                   &ShowStdMenuDisp},
{       "Timer",              3,        0,                   &ShowSetingTimerDisp},
{       "Sound",              3,        1,                   &ShowSoundDisp},
{       "Batarey",            3,        3,                   &ShowBatareyDisp},
{       "Monitor",            3,        0,                   &ShowMonitorDisp},
{     "Save&Copy",            2,        0,                   &ShowStdMenuDisp},
{        "Save All",          3,        1,                   &ShowSaveAllDisp},
{        "Copy MDL",          3,        1,                   &ShowCopyModDisp},
{        "Copy CH",           3,        3,                   &ShowCopyCtrDisp}


};//end menutable


Ну и процедуры перемещения по меню




void CalcMenu(void)
{
unsigned char i,k;
k=0;
CurDispState.SubItems=0;
 for (i=CurDispState.CurDisp+1;i<MenuMaxItems;i++)
 {
   if (MenuTable[i].MenuLvl==MenuTable[CurDispState.CurDisp].MenuLvl) {break;}
   if (MenuTable[i].MenuLvl==MenuTable[CurDispState.CurDisp].MenuLvl+1)
   {CurDispState.SubItemArr[k]=i;k++;}
 }
 CurDispState.SubItems=k;
}

void EnterMenu(void)
{



if (CurDispState.CurDisp)
{
CurDispState.CurDisp=CurDispState.SubItemArr[CurDispState.SelectPos];
CalcMenu();
}
else
{
CurDispState.CurDisp=1;
CalcMenu();
}
CurDispState.SelectPos=0;
CurDispState.CurVal=0;
CurDispState.CurVal2=0;
CurDispState.IsSelected=0;
CurDispState.AddVal=0;
}

void ExitMenu(void)
{
unsigned char l,i;


if (MenuTable[CurDispState.CurDisp].MenuLvl>1) //??

 {
    l=CurDispState.CurDisp;
    for (i=CurDispState.CurDisp;i>0; i--)
    {
        if (MenuTable[i].MenuLvl==MenuTable[CurDispState.CurDisp].MenuLvl-1) {CurDispState.CurDisp=i;break;}
    }

    CalcMenu();

    for (i=0;i<CurDispState.SubItems; i++)
     {
     if (l==CurDispState.SubItemArr[i]) {break;}
    }
     CurDispState.SelectPos=i;
 }
 else
 {
  CurDispState.CurDisp=0;   //go main scr
 }


}


void DrawFunc(FuncPtr Function)
{
//	if ((void*)Function == NULL)
//	  return;

	((FuncPtr)Function)();
}


 void ShowDisp (void)
{





 if (IsKeyChange()||CurDispState.NeedUpdate)
 {  JoyMenuSelect();
 CurDispState.NeedUpdate=0;
 DrawFunc (MenuTable[CurDispState.CurDisp].Func);
 }



}



EagleB3

А может ли кто-нибудь прояснить: в чем состоит смысл каскада, собранного на VT2 и кусочке 4066 с выводами “10, 11, 12”?

… Допер! Кажется. Я так понимаю, это предохранитель от обрыва шнурка. Если “PPM in” перестает приходить на базу VT2, то, независимо от положения SA13 (“Тренер-Ученик”) на кодер пойдет “свой” PPM, а не внешний.

Так?

VRV
EagleB3:

А может ли кто-нибудь прояснить: в чем состоит смысл каскада, собранного на VT2 и кусочке 4066 с выводами “10, 11, 12”?

… Допер! Кажется. Я так понимаю, это предохранитель от обрыва шнурка. Если “PPM in” перестает приходить на базу VT2, то, независимо от положения SA13 (“Тренер-Ученик”) на кодер пойдет “свой” PPM, а не внешний.

Так?

А есть ли смысл делать каскад для подключения 2 пульта, если данная опция вряд ли когда будет использована?

ubd

Так?

Да.

А есть ли смысл делать каскад для подключения 2 пульта, если данная опция вряд ли когда будет использована?

Если ты не собираешься когото обучать полётам и не собираешься передатчик к симулятору подключать, то не нужна. Тренерский разъём, этот как бы неотемлемая часть любой более менее нормальной аппаратуры.

Aviator73
msv:

Между делом созрела очередная версия…

Сергей, подскажите, почему не проходит калибровка пропорциональных ручек?
Кручу ручки и крутилку 8-го канала - все ок. Ставлю по центру - точки выделяются квадратиками, как я понимаю, что центр ОК, нажимаю кнопку “Вправо” и после калибровки термометра выдает ошибку калибровки?

Плюс заметил, что в мониторе триммеры воздействуют на свои каналы, а в главном меню при отображении положения триммров каналы 3 (Trottle) и 2 (Elevator) попутаны местами. Думаю, что это из-за того, что у меня МОDE1?

И еще - огромное СПАСИБО за разработку!

ADima

Не Сергей но отвечу.
необходимо правильно выставить напряжение на ARef процентов на 10-20 больше чем на ручке и если надо подобрать сопротивления в пропорциональном канале

meKOil

Доброе время суток, Уважаемые!
Пока собирался взяться за изгатовление передатчика, пока преобретал всё нужное. Упустил из виду данную тему. Как понимаю много изменилось и в схеме, и в прошивке.
Не могли бы выложить одним архивом рабочую схему и прошивку с исходником?
Наворотов типа тахометра, термометра и т.п. не требуется…