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

Aleksey_Gorelikov
vvvv:

жаль не видно маркировки
случайно маркировку не записали ?

Ее там нет… Я ж где-то писал, что маркировки нет, а фото я сделать забыл… Вот сделал, чтобы хоть по фото опознать можно было. Вал у него сильно подпружинен. Щелкается довольно тяжело. Снизу - 4 контакта. При вращении в одну сторону замыкаются два с каждым щелчком. Больше ничем помоч не могу к сожалению, кроме как сказать, что часто эти штуки встречаются в СБ радиостанциях. Покрайней мере в йосане 2204, алане 48+,78+ и их клонах.

Aleksey_Gorelikov
Aleksey_Gorelikov:

Кстати, для тех, кто еще не начал делать самодельный передатчик, а только собирается - есть серьезный повод задуматься:
rcopen.com/forum/f65/topic139727

Повод задуматься стал еще серьезней!!! Наткнулся на схему этого чуда. Построена на АТМЕГА64, дисплей стандартный, с паралельным интерфейсом… В общем - ничего сложного нет под нее туже прошивку от фокуса\мсв переписать.
Там даже (судя по схеме) разъем для программатора имеется.

ubd

Ну дык, а ссылку на схему. Посмотреть бы…

Aleksey_Gorelikov

В “той” теме выложил

З.Ы. ой, не в “той” а в самолетной ветке про аппу…

Nick_Shl
ubd:

Я там ничего не нашёл…

Тут.

Aleksey_Gorelikov:

Там даже (судя по схеме) разъем для программатора имеется.

А вот судя по фото - не имеется. Конечно, возможно, он выполнен в виде контактных площадок под черной губкой со стороны экрана…

loss78

пока перечитал всю тему слегка запутался. какую прошиву лучше брать для последней схемы? еще вопрос по каналам. почему бы не реализовать каналы все на переменных резисторах, не важно каково их колличество? хоть 10 хоть 20 и если ком надо, воткнуть переключатели двух или трех позицый сделать замену. ниже вариант замены как на типовых джойстиках для PC

может кто подскажет на куда пойти, чтоб подробней узнать как прикрутить вч-модуль на 2.4ггц, а то валяется тут у меня таких пара

ubd

Пост 1658 - последняя прошивка под ВЧ-блок с сентизатором частоты
Пост 1662 - исходники к ней
Те схемы что есть на форуме уже устарели, так что выкладываю обновлённую схему к этой прошивке.

ВЧ блок с сентизатором частоты тут: rcopen.com/forum/f8/topic127576/41
Но прошивка будет работать с любым другим ВЧ-блоком, и с 2,4 ггц то же. Как подключить не комне. Но это обсуждали миллион раз и там ничего сложного нет, можно самому разобраться. По моему в этой ветке уже этот вопрос подымался, ищите.

Плата, можно взять самую последнюю, называется Coder_v2. Изменяйте её как вам угодно под свой корпус и свои надобности. Прога SprintLayout 5.0.

еще вопрос по каналам. почему бы не реализовать каналы все на переменных резисторах, не важно каково их колличество?

Не получиться. Для аналоговых каналов, нужны АЦП, а их у проца только 8. Из них 5 шт заняты под пропорциональные каналы, 1 шт под замер напряжения батареи и 1шт на замер тока в антенне. Свободный остаётся только один.
Оставь как есть, всё работает как часы, и все довольны. Если хочешь делай свою версию под свои нужды. Проект обсалютно открытый.

loss78
ubd:

1 шт под замер напряжения батареи и 1шт на замер тока в антенне.

вот такой вопрос: зачем мерять ток в антенне если используешь готовые модули приемопередачи? на пример на 430МГц или на 2.4ГГц

Aleksey_Gorelikov

Да можно не мерить… Вот человеку захотелось, он сделал, меряет. Вам не надо - ну выкиньте кусок кода, никто ж не запрещает. Об чем спич то?

vvvv
ubd:

Пост 1658 - последняя прошивка под ВЧ-блок с
Те схемы что есть на форуме уже устарели, так что выкладываю обновлённую схему к этой прошивке.

а можно чуть побольше картинку
а то на этой ничего не видно при увеличении
спасибо

Texnik
Aleksey_Gorelikov:

Если в программировании не силен, то просто возьми исходники, и поиском с заменой замени во всем проекте “curmodel.trimmer[FLY_MODE]” - на “curmodel.trimmer[1]”, после этого откомпилируй и прошей заново контроллер. Тримера во всех режимах будут одинаковы. Так делать не совсем правильно, в плане “эстетики” программирования, но за то максимально просто, ошибиться негде.

А о доработках, тебе чего хочется получить? Ты спроси, может и подскажут. А так - дорабатывают кто во что гаразд, кому как нравится. У меня к примеру - экран другой, внешняя епром, переписано под большее кол-во органов управления (корпус от эклипса, вот и заюзал все кнопки и вертелки, что были), предупреждения о полетных режимах при включении, ограничение канальных импульсов, “замедлитель рулевой машинки для выпуска шасси”… Кто-то ПСМ дописывал, кто-то в уарт выводит и стандартные радиомодули использует. Собственно выкладывать все наверно смысла нет, т.к. если что-то и исправляют, то под себя. К примеру - тебе один тример во всех режимах нужен, а мне разные, для каждого режима свой. Если все будут свои прошивки выкладывать - то просто путаница будет. Уже путаница - куча разных плат и прошивок, новичек голову сломает какая прошивка к какой плате подходит, особенно когда исходники не приложены.

Вот библиотека для дисплеев tic 149-152

В coder.c в инклудах должно быть следующие

#incl*ude <mega128.h>
#incl*ude <delay.h>
#incl*ude <stdio.h>
#incl*ude <def.c>
#incl*ude <Variables.c>
#incl*ude <math.h>

#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=5
.equ __scl_bit=4
#endasm
#incl*ude <graph_new.h>

Сама библиотека - во вложении, но это промежуточная версия, возможны ошибки 😃

Под Tic-1xx схемку кодера не нашел. Поделитесь пожалуйста!

ubd

Пардон, это форум катринку урезал, я не виноват…

Texnik

Дисплей NOKIA 3310 соответствует tic-149 ? Вроде они отличаются.

Aleksey_Gorelikov

Угадали! Отличаются координально! Один SPI, а другой I2C, разрешение немного разное:-) Размеры…

Схема - таже… Распиновку дисплея посмотрите только. Ресет его на +5, шины клок и дата подтянуть резисторами к +5. (3-10 ком).

Texnik

Алексей, меня интересует подключение tic к кодеру. По распиновке (data) подключение аналогичное приведенной схеме?

Nick_Shl

Продолжаем. Внутри получилось так:

Чуть под углом:

Вид на батарейный отсек:

И с батарейкой:

Батарейку пришлось заказывать с ebay, поглядывая на размеры…

Переходим к управлению и программной части. Вид на главное меню:

Для навигации доступно 6 кнопок. Кроме стандартных ещё две дополнительные.

Ввод имени:

Все шесть кнопок используются в полной мере. Гораздо удобнее чем в оригинале.

Сохранение модели:

Отвечаем на вопрос воспользовавшись Ok и Cancel.

Диалог выбора откуда и куда:

Изменение значений:

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

Изменение кривой:

Опять, же 6 кнопок гораздо удобнее.

Диаглог выбора строковых значений:

Надо бы ещё добавить полосу скроллинга сбоку.

Что касается исходников, то решил, что буду буду придерживаться такой точки зрения:

Aleksey_Gorelikov:

Не вижу смысла ее публиковать, да и не хочу.

Прошивку пришлось переписать заново. То что она представляла вначале - вообще ужас. Тут говорят, что Фокус сбежал что бы поддержкой не работать, но в действительности прошивка написана так, что в ней программисту разобраться сложно, а о начинающих и говорить не приходится!
Форматирование отсутствует как класс, жуткий хард кодинг - попробуйте хотя бы поменять кварц. Но Фокусу это всё простительно - он всего лишь был школьником, опыта не было никакого, сделал как смог…
Но что ещё более интересно, так это то, что за всё это время никто кардинально ничего не изменил!
В прошивке MSV хоть и есть изменения к лучшему, но всё равно это ужас - форматирования нет, комментариев нет, кругом всё тот же хард кодинг.
И вот сижу я и думаю… Ну выложу я прошивку и что? Если никому до этого это было не нужно, то что изменится? Технической поддержкой я тоже работать не хочу.
Если кому интересно программных средств использую CodeVisionAVR v2, Araxis Merge(для сравнения изменений в файлах) и TortoiseSVN(управление версиями, хранит историю изменений, позволяет получить любую версию).

Aleksey_Gorelikov
Texnik:

Алексей, меня интересует подключение tic к кодеру. По распиновке (data) подключение аналогичное приведенной схеме?

То, что я выкладывал - это 10 минутная переделка библиотеки фокуса, делал только для того, чтобы “пощупать руками”. Собсвтенно - пощупал. Если использовать эту библиотеку - в ней и2с програмный - можно подключить к любым двум ногам произвольного порта.
Смотри:
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=5
.equ __scl_bit=4
Вот и вся схема. 😃 Ну к дисплею надо конденцатор подключить, землю, питание, вывод ресет на +5, sda и scl к питанию подтянуть и на этом все.

Aleksey_Gorelikov
Nick_Shl:

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

Ну Фокус и не сбежал вовсе… Общаться с ним вполне реально, а вот со временем у него труба, похоже. А по коду - парень учится, на первую версию на меге16 - вобще без слез не взглянешь, на второй - уже терпимие, третья - лучше. Не на много конечно, но прогресс есть. Может она когда в свет и выйдет. Разобраться - вполне реально, и школьнику и программисту. Еслиб писал действительно программист, после удаления коментариев и форматирования разобраться бы еще сложнее было. (а многие специально коменты и форматирование удаляют, благо многие редакторы такую функцию имеют 😃 )
Насчет координальных изменений - зачем они, для чего публиковать? Основные функции кодер и так выполняет, дополнительные “удобства” - я и в твоих фотках не увидел, как и не увидел ( а может оно есть?) - экраны “неправильного включения” (т.е. предупреждения о включение передатчика с газом в мах, даблрейтами и т.д. - по вкусу), или контроля целостности епром (как в ДХ-7, нелюбимый всеми “Backup error” 😃, а ведь епром не вечен,хоть об этом и можно спорить. Передатчик может быть выключен в момент сохранения (в том же спектруме есть аппаратная защита от этого, но это не мешает епрому слететь). В прошивке МСВ лучше реализована работа с епром в плане экономии циклов перезаписи. - тоже прогресс налицо.
Сей проект лично я рассматриваю как любительскую поделку, приятно, что тот же Фокус и МСВ решились публиковать исходники, но… В любом случае самодельный кодер - на свой страх и риск. Кто желает заняться этим хобби (кодеростроение 😃 ) - просто обязан как минимум разобраться полностью в софте, переписать все, что не нравится, дописать все, что необходимо лично ему и т.д, перед тем как поднимать в небо “аппарат”.
Несомненно плюс проекта в том, что кто-то сядет - начнет разбираться, втянется, обретет еще одну профессию, наконец. Проект Фокуса\МСВ - это только _ПРИМЕР_ того, что можно сделать своими руками то, что хочешь, а не эталон передатчика… Целей догнать и переплюнуть бренды никто не ставил, и не ставит, экономить деньги - тоже не получится, экономить на китае можно (турниджи тот же).
Но зачем ругать то тех же авторов??? Пишут как могут, как хотят, для себя
Точно так же как и я, и ты. Уверен, и в наших проектах найдется что улучшить. Я люблю смотреть чужие исходники ради самообразования (и плоихие, и хорошие. Бошка у всех по разному работает, порой интересные алгоритмы попадаются.), при этом стараюсь не коментировать что все хреново! Железка работает, автора устраивает и замечательно! Посоветовать что-то можно, но… Это я к чему - ты своим постом у того же МСВ отбил желание свой код показывать.😉 А показывать он его и так не собирался, просто народ насчет дисплеев ныть стал, а после хексов - стал ныть еще больше, что мол ручки не на месте, печатка другая и т.д. А я его предупреждал… 😁 И от этого наверно никто не пострадал, но осадочек останется.
Зря ты так.

Nick_Shl
Aleksey_Gorelikov:

Ну Фокус и не сбежал вовсе… Общаться с ним вполне реально, а вот со временем у него труба, похоже.

Про время это он так думает 😃. Я себя вспоминаю - всегда казалось, что мало времени. Но чуть позже понимал, как много у меня его было…
А про “сбежал” имел ввиду это:

Aleksey_Gorelikov:

Я не исключаю, что и Женя тут больше не появляется, ввиду того, что надоело постоянно суппортом работать.

Aleksey_Gorelikov:

Еслиб писал действительно программист, после удаления коментариев и форматирования разобраться бы еще сложнее было.

Не согласен.Использование дефайнов, enum’ов для описания здорово облегчает понимание.

Aleksey_Gorelikov:

Насчет координальных изменений - зачем они, для чего публиковать? Основные функции кодер и так выполняет, дополнительные “удобства” - я и в твоих фотках не увидел, как и не увидел ( а может оно есть?) - экраны “неправильного включения” (т.е. предупреждения о включение передатчика с газом в мах, даблрейтами и т.д. - по вкусу)

Это первая версия. Задача была уйти от “неправильной” идеологии хардкодинга и меню с “кооперативной многозадачностью”. Тем более мой вкус только формируется. Есть верт ESky который в моих руках не летает и недавно построил самолетик - он даже летал, но тяги маловато…

Aleksey_Gorelikov:

или контроля целостности епром (как в ДХ-7, нелюбимый всеми “Backup error” 😃, а ведь епром не вечен,хоть об этом и можно спорить. Передатчик может быть выключен в момент сохранения (в том же спектруме есть аппаратная защита от этого, но это не мешает епрому слететь).

Всё картинками не покажешь. CRC EEPROM была одной из первых в очереди задач, после переписки кода. Вот:

// *****************************************************************************
// ***   Мусорная переменная - нулевая ячейка подвержена самопорче   ***********
// *****************************************************************************
static eeprom unsigned char EEPROM_TRASH @(0x0000);

// *****************************************************************************
// ***   Переменная для хранения CRC, размещена в конце EEPROM   ***************
// *****************************************************************************
static eeprom unsigned short EEPROM_CRC @(0x1000 - sizeof(unsigned short));

// *****************************************************************************
// ***   Подсчет CRC EEPROM и его записть   ************************************
// *****************************************************************************
static inline void Recalc_EEPROM_CRC(void)
{
    // Считаем новый EEPROM CRC и записываем его в EEPROM
    EEPROM_CRC = Crc16_eeprom((unsigned char eeprom *)1, 0x1000 - sizeof(unsigned short));
}

// *****************************************************************************
// ***   Проверка корректности CRC EEPROM   ************************************
// *****************************************************************************
inline unsigned char Is_EEPROM_CRC_Correct(void)
{
    // Считаем EEPROM CRC и сравниваем с записанным
    // Если совпадает - возвращаем ИСТИНУ
    if(EEPROM_CRC == Crc16_eeprom((unsigned char eeprom *)1, 0x1000 - sizeof(unsigned short))) return(TRUE);
    // Иначе - ЛОЖ
    else return(FALSE);
}
Aleksey_Gorelikov:

Несомненно плюс проекта в том, что кто-то сядет - начнет разбираться, втянется, обретет еще одну профессию, наконец. Проект Фокуса\МСВ - это только _ПРИМЕР_ того, что можно сделать своими руками то, что хочешь, а не эталон передатчика… Целей догнать и переплюнуть бренды никто не ставил, и не ставит, экономить деньги - тоже не получится, экономить на китае можно (турниджи тот же).

Экономить - действительно цель мнимая. А вот “догнать и перегнать” - та цель к которой стоит стремится. А ещё цель реализовать любую понадобившуюся фичу которой нет у брендов. Если бы Linux был бы только _ПРИМЕР_'ом? Linux очень хороший пример чего можно достич, если задатся целью.

Aleksey_Gorelikov:

Но зачем ругать то тех же авторов???

Во-первых я ругал код, а не авторов.

Aleksey_Gorelikov:

Но зачем ругать то тех же авторов??? Пишут как могут, как хотят, для себя
Точно так же как и я, и ты.

Я писал не совсем для себя. Я писал для всех. У меня каждая строчка откомментирована, потому как писалось для “чайников”… Но ведь это никому не надо, верно? Кто что либо сделал для проекта? Можно пересчитать этих людей по пальцам одной руки… И это за 3 года!
А ещё не хочу, что бы написанный код со временем в помойку превратился…

Aleksey_Gorelikov:

Это я к чему - ты своим постом у того же МСВ отбил желание свой код показывать.😉 А показывать он его и так не собирался, просто народ насчет дисплеев ныть стал, а после хексов - стал ныть еще больше, что мол ручки не на месте, печатка другая и т.д. А я его предупреждал… 😁 И от этого наверно никто не пострадал, но осадочек останется.
Зря ты так.

Цель не отбить желание, цель мотивировать сделать код лучше и понятнее для чайников.

Если же интересны детали, то работа моей переработки полностью повторяет таковую у фокуса. Цель сразу всё переработать не было. Была цель реализовать читабельный и модульный код. Эта цель достигнута.
Как я уже писал идеология “кооперативной многозадачности” для меню и не модульность его самого меня не устраивала полностью. Поэтому я решил сделать “вытесняющюю” всё в кавычках, потому ка не совсем то, сто написано. У меня три уровня.
Первый, самый приоритетный - только формирование импульсов и математика. Это должно работать всегда.
Второй - драйвер клавиатуры, подсчет таймера, проигрывание мелодии в фоновом режиме, сохранение триммеров, если они были изменены. Всё это вызыватся из отдельного прерывания, при этом разрешаются прерывания и поддерживается не реентерабельность.
Самый низкий - главный экран и меню. Меню реализовано на движке и описывается структурами:

// *****************************************************************************
// ***   Описание пункта меню   ************************************************
// *****************************************************************************
typedef flash struct typeMenuButton
{
    flash char *   str;            // Название пункта меню
    void (*fun) (char AddParam);   // Функция вызываемая при нажатии ВВОД
    char * (*GetStr) (char * Buf, char AddParam); // Функция вывода дополнительной информации
    char AddParam;                 // Дополнительный параметр, передаваемый в функции
} MenuButton;

// *****************************************************************************
// ***   Описание меню   *******************************************************
// *****************************************************************************
typedef struct typeMenuPad
{
    flash char *    CaptionStr; // Название меню, выводимое в заголовке
    FontProfile *  CaptionFont; // Указатель на профайл шрифта заголовка
    FontProfile *     MenuFont; // Указатель на профайл шрифта пунктов меню
    flash MenuButton * Buttons; // Указатель на массив описания пунктов
    char            ButtonsNum; // Количество пунктов меню
    char            CurrentPos; // Выбранный пункт
    void      (*Before) (void); // Функция вызываемая перед отображением меню
    void      (*After)  (void); // Функция вызываемая перед отображением меню
} MenuPad;

Заполняем и вызываем функцию MenuCycle(MenuPad * Menu);
Ладно, на сегодня всё… пойду спать.

Denn

Господа!
Что-то вы как-то агрессивно выражаетесь!
Как я понимаю, целью проекта является создание работающей схемы с возможностью её лёгкого повторения. Причём понятно, что предпочтения и приоритеты у каждого свои, как и способности, и навыки. Поэтому предлагаю :
давайте считать, что всё здесь сделанное является

  1. общим и бесплатным ( пока не оговорено другое )
  2. сделанным по своим возможностям и желаниям
  3. сделанным не со зла
  4. и т.д.

Лично я приветствую любую информацию, которая поможет хоть кому-нибудь сделать кодер или передатчик! Причём чем более грамотным и упорядоченным будет код и сам процесс - в выигрыше будут все.
Поэтому предлагаю: кто делает доработки и модификации - не жалейте пожалуйста времени и сил на опубликование своих творений, причём очень желательно с подробными комментариями ( так как может пригодиться и в других проектах ).
Будьте добрее!
Спасибо всем!