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

Aleksey_Gorelikov
СЕРЖЖ:

А кто что думает про этот ДЕКОДЕР ???
www.e-radiocontrol.com.ar/?Circuitos_de_Radiocontr…

Файлсейва нет…Проверки на достоверность пакета - вроде бы тоже. Хотя я особо не вникал. Имхо выложенные в этой ветки пара декодеров от наших коллег лучше на порядок.

Nick_Shl

Раз уж зашёл разговор о декодерах, хочу представить свой вариант. Базируется он на варианте, ранее выложенным в этой ветке товарищем lomo(правда его зачем-то убрали). Хотя и схемотехнически и, особенно, программно значительно отличается от него. Изготовлен он был раньше, но из-за нехватки времени/желания так и не был испытан в “боевых” условиях.

Начну с описания аппаратной части. Схема:

Базируется декодер, так же как и прототип, на микроконтроллере ATtiny2313. Тактируется МК внутренним RC генератором, настроенным на частоту 8 МГц. В отличие от прототипа было решено применить двухцветный красно-зелёный светодиод, с помощью которого возможно получить три цвета: красный, жёлтый и зелёный. Однако для его применения нужно два токоограничивающих резистора, иначе жёлтый цвет получить невозможно. Если обойтись только зелёным и красным цветами, то можно упростить схему, поставив один токоограничивающий резистор в общую ногу светодиода. В такой схеме есть одна хитрость: выходные сигналы, в отличие от прототипа, размещены на выводах SCK, MISO и MOSI. Что облегчает программирование - можно подключать программатор к выводам приёмника. Только нужно вывести ещё сигнал “Сброс”. Проще всего его вывести на разъём “B”, если таковой имеется у приёмника-донора. Теперь расскажу про мою конкретную реализацию в железе. Вид внутри:

Донором был выбран имеющийся шестиканальный приёмник Esky. На МК были загнуты ноги вниз. Вся пайка так же была выполнена снизу МК. Подтягивающий сигнал “Сброс” к питанию SMD резистор паялся с помощью проволочек между 1(RESET) и 20(VCC) ногами МК(видно на фото). К остальным ногам МК были припаяны проволочки. Из приёмника был удалён оригинальный дешифратор и конденсатор. Конденсатор был заменён на танталовый меньшей ёмкости(надеюсь это никак не скажется на работе) и припаян снизу платы. МК впаивался как на фото. При этом первая(RESET) нога МК припаяна к сигнальному контакту разъёма “B”. Такое решение удерживает МК на месте при дальнейшей работе. Однако если пожертвовать возможностью лёгкой перешивки, на этот канал можно вывести 7-ой канал приёмника. Затем были припаяны провода питания, каналов и вход PPM сигнала - он был припаян прямо на выход компаратора. Все провода были залиты клеем “Титан” для фиксации, заодно приклеив МК к соседним деталям. В конце было выбрано место для установки светодиода, проделано отверстие и припаяны провода к нему. Токоограничивающие резисторы паялись прямо на ноги светодиода, а уже к ним припаивались провода. Для предотвращения замыканий оголённые части были спрятаны в термоусадочную трубку. Для программирования достаточно подать питание и подключить программатор. Я использую USB программатор с “рассыпным” хвостиком сделанным из корпусных USB проводов. Питание для прошивки подаётся с него же.

Программная часть была переписана практически полностью. Причём в начале я шёл по пути модернизации в сторону универсализации имеющегося кода. Позже выяснилось, что такой путь приводит к большой нагрузке на МК: рулевые машинки дрожат. Было принято решение упростить(что привело к небольшой избыточности кода) и изменить принципы построения программы. Наиболее значимое изменение - последовательное генерирование выходных импульсов с помощью прерывания. Машинки дрожать перестали. Осталось не реализованным поиск канала(ов) газа и запоминание его(их) для FailSafe. FailSafe устроен следующим образом: на все каналы выдаётся последний корректно принятый пакет. Если за время выдачи 0,3 сек(15 повторов) не был принят корректный пакет данных, то канал газа(установленный на этапе компиляции - у меня 3) устанавливается в минимальное положение, которое было получено с приёмника за всё время руления. ВНИМАНИЕ! при рулении моделями с ДВС это стоит учитывать, т.к. при реверсированной машинке(максимальная длинна импульса - минимальный газ) канала газа при сработке FailSafe получится полный газ! Если по прошествии 1,5 сек (75 повторов) так и не был получен корректный пакет FailSafe переходит во вторую стадию: перестаёт выдавать импульсы на все каналы, кроме канала газа. Имеющиеся у меня аналоговые машинки в таком случае переставали сопротивляться при попытке сдвинуть их качалку. Как мне кажется это может минимизировать ущерб при ударе рулём о землю. Код довольно подробно откомментирован - с пониманием вроде не должно быть проблем. Если появятся вопросы - постараюсь ответить.

Замеченные проблемы(пока такая одна):

  • Почему-то не работает корректно определение модуляции. У меня работает с PPM, а с IPPM - нет. Виснет на инициализации. Так и не дошли руки взять осциллограф и посмотреть в чём же дело и кто виноват. Может передатчик, может приёмный тракт, а может и программа - хотя на первый взгляд она вроде бы в порядке.

P.S. Разрешается использование только в с частном порядке для личных целей 😎.
Всё даётся As Is, никакой ответственности за использование я не несу. Hex’а нет - только код. Смотрите, проверяйте, компилируйте.

PPM_Decoder.ZIP

DD

Nick_Shl, по поводу иппм и ппм я задавал вопрос, но на него так ни кто и не ответил, у меня наоборот при иппм работает а при ппм нет, программа тоже вроде ни причем, модель в протеусе работает отлично что с иппм и ппм, следовательно виновать радио канал. причем как то интересно если если использовать мой приемник с родным валькеровским передатчиком при ппм то декодер вообще не распознает что у него есть что то на входе, на осциллографе там тоже ни чего нет, но вот с sanwa rd8000 почему то понимает ппм но сервы не двигаются. как то один раз в экпериментах с прошивкой мне как то удалось декодировать ппм, но только если антена приемника была в плотную к антене передатчика. Хорошо если бы ктонибудь это толково объяснил (шифты тут не при чем вроде). Вот еще нюанс есть иппм и ппм, а вот псм только одна

СЕРЖЖ

Этот декодер проще!!!
Ссылку смотреть чуть выше.
Но возникли вопросы какие биты конфигурации ставить???
Да и бес осциллографа непосмотриш что получилось на выходе в итоге!!!
Если ктото заставит работать эту схему пожалуйста поделитесь

robin123
СЕРЖЖ:

Этот декодер проще!!!
Ссылку смотреть чуть выше.
Но возникли вопросы какие биты конфигурации ставить???
Да и бес осциллографа непосмотриш что получилось на выходе в итоге!!!
Если ктото заставит работать эту схему пожалуйста поделитесь

“Utiliza el oscilador interno de 4 MHZ -hay que configurarlo así desde el propio grabador del PIC (IC-Prog, por ejemplo)-, sin MasterClear (también se configura desde el grabador de PIC).”
=
Use the 4-MHz internal oscillator, you have to configure it from within the programming software for the PIC (IC-Prog, for example) - without MCLR (also configured from IC-Prog).
=
Используйте 4 МГц внутреннего генератора, вам придется настроить его изнутри программирования для PIC (IC-Prog, например) - без MCLR (также настроен с помощью IC-Prog).

Please note: There is no fail-safe or smart-decoding.

Kappitoshka

Никто не подскажет как называется (марка) разъем тренер/ученик?

Aleksey_Gorelikov

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

СЕРЖЖ

Здравствуйте ! Собрал по Вашей схеме декодер на ATtiny2313. Скомпилировал HEX-файл – все работает замечательно с аналоговыми (Futaba S3003) сервами. Но стоит подключить цифровую (E_sky EK2-0508) – мигает светодиод всеми цветами и серва несколько секунд «клацает» издает слабые счелчки как будто пытается вращаться и наэтом все и заканчивается. Кстати в отличии от аналоговой цифровая пытается работать (если так можно сказать) с PPM и IPPM. Кодер использую на Atmega128.
Скажите пожалуй ста в чем может быть дело и как это устранить???
Заранее спасибо !!!

Kappitoshka
Aleksey_Gorelikov:

тот, что у тебя в корпусе “моно джек мама”.

Это да понятно. До вот только мне придется соединить in и out, vt2 и его цепи выбросить (см. вложение). Интересно что будет если по обоим кнопочкам пощелкать 😅

Мне понравился нарисованый на схеме круглый со штырьком по центру. Вход и выход разделены.

Aleksey_Gorelikov

Вадим, тебе имеет резон срисовать схему тренер\ученик с твоей аппы. Там достаточно интересно все реализовано. Передатчик включается при подсоединении шнура, Выключатель питания продублирован ключем и аппа отключается не тогда, когда ты тумблером щелкнул, а когда проц закончит запись в епром и в “спячку” ляжет.

К томуж и детали у тебя все есть. 😃 Ничего покупать не придется.

Nick_Shl
СЕРЖЖ:

Кстати в отличии от аналоговой цифровая пытается работать (если так можно сказать) с PPM и IPPM.

От сервы это никак в данном случае не зависит 😃

СЕРЖЖ:

Скомпилировал HEX-файл

Но в код похоже не заглядывали 😃.
В общем картина выглядит так: вначале происходит мигание светодиодами для их теста: зелёный, жёлтый, красный. Затем пауза когда светодиод не светится. Далее начинается сама инициализация:
Красный светодиод - определение полярности.
Жёлтый - подсчёт количества каналов на передатчике.
Дальше переключается на зелёный и начинает крутится. Если срабатывает FailSafe - светодиод меняет цвет на красный, по восстановлению связи вновь становится зелёным.

СЕРЖЖ:

все работает замечательно с аналоговыми (Futaba S3003) сервами.

Это значит, что всё спаяно правильно и прошивка прошла успешно.

СЕРЖЖ:

Но стоит подключить цифровую (E_sky EK2-0508) – мигает светодиод всеми цветами и серва несколько секунд «клацает» издает слабые счелчки как будто пытается вращаться и наэтом все и заканчивается.

Я могу утверждать только одно: от прошивки это не зависит(или по крайней мере не должно 😃). А что будет если подключить одну цифровую и несколько аналоговых? Если не работает только цифровая - нужно разбираться дальше. Если все и светодиод мигает всеми цветами, есть предположение, что цифровая серва шумит и возможно происходит сброс микроконтроллера. Думаю стоит попробовать уменьшить резистор между ногой сброса и питанием до 1К, питание выходов на сервы шунтировать керамикой на 0,1 мкф. А ещё можно попробовать взять конденсатор >= 6,3 В на n тыс. мкф, припаять к нему провод от дохлой сервы и воткнуть в неиспользуемый канал приёмника, для сглаживания резких просадок напряжения…

ubd

А подскажите по программе для проца в сообщении 2144. Чем компилировали? CodeVizor AVR v2.03.4 подойдёт?

EagleB3

В смысле? Мой CVAVR v2.03.4, во всяком случае, ругаться не стал. Сделал HEX объемом 4603 байта (чуть меньше 80% флеша) даже без варнингов.

“Не вижу препятствий!” (с) “Ва-банк 2”.

Nick_Shl
ubd:

А подскажите по программе для проца в сообщении 2144. Чем компилировали? CodeVizor AVR v2.03.4 подойдёт?

У меня такой же, только Vision 😃. Им и компилил.
А ещё я забыл выложить фузы. Помню только что нужно сконфигурировать на внутренний RC-генератор 8 МГц. Могу позже попробовать посмотреть…

EagleB3:

даже без варнингов.

Старался 😎.

EagleB3

У ATtiny2313 заводские установки CKSEL=0100 (=8MHz internal), да плюс CKDIV8 запрограммирован - итого 1МГц.

Для тактовой частоты 8МГц надо распрограммировать CKDIV8.

Denn

Купил дисплей от Nokia 3510. Надеялся, что они похожи на 3410. Увы, нет.
Может кто-нибудь знает, как его подключить и инициализировать?

7 days later
Networx

Подскажите пожалуйста, чем грозит отключение кодера вовремя записи в eoprom!
И как можно реализовать правильное отключение кодера, вплоть до установки дополнительного елемента питания (например таблетки от компа).
Спасибо!

EagleB3

Тем, что в EEPROM будет записан “мусор”. И, возможно, обнаружится это только когда модель уже в воздухе. Ну, допустим, звезды так сложились, что у тебя на модели №3 перекосило микширование РВ с элеронами, и только в режиме посадки. А перед взлетом ты это не проверял. И взлетел, и летал, и потом пошел на посадку…

Но:

  1. Порче при таких раскладах подвержена обычно самая первая ячейка EEPROM. Что можно сделать, чтобы от этой порчи не пострадать написал, например, Nick_Shl вот здесь
  2. Можно (и полезно, и нужно) контролировать содержимое EEPROM подсчитывая код CRC. Как этого можно сделать написал Nick_Shl там же. Focus и MSV собирались сделать это в своих прошивках, но, по-моему, так и не сделали. И (по-моему же) в выложенных здесь прошивках это никто не сделал.
  3. За-ради сохранности EEPROM полезно быстро заканчивать переходные процессы выключения микроконтроллера. А для этого нужно ставить электролитические конденсаторы в фильтрах с емкостью не более 10 мкф. Об этом здесь уже писалось, но кто именно писал - не помню, сорри.
  4. Аппаратно (как здесь писал и уже не раз Aleksey Gorelikov, и один из разов писал он прямо на этой странице чуть выше) шунтировать выключатель питания аппы ключиком-мосфетом. Перед началом записи в память микроконтроллер включает шунт; если в этот момент ты выключишь питание - ничего не произойдет. А когда запись будет завершена, микроконтроллер отключает шунт, и если к этому времени выключатель питания разомкут - аппа выключится. Как вариант можно сделать включение аппы двумя кнопками (“Вкл”/“Выкл”) или нефиксирующимся тумблером на три положения - для включения двинул тумблер в сторону “Вкл”, подалось питание на контроллер, контроллер зашунтировал тумблер мосфетом, пискнул - можно тумблер отпускать. Работаем и периодически опрашиваем тумблер (как и любой другой выключатель). Если тумблер двинули в состояние “Выкл”, проверяем это состояние в течение нескольких секунд (как бы “антидребезг”, только более долгий) и если состояние устойчиво, то заканчиваем запись данных моделей в EEPROM, считаем CRC, записываем его в EEPROM и и отпускаем шунт. Аппа выключилась. Пищать с какого-то момента проверки устойчивости состояния тумблера “Выкл” (типа, сигнал получен; отпусти тумблер, если это по ошибке) и до момента отключения тревожно-художественно-особым писком - по желанию.

Таблетка от компа - от лукавого. Она может бекапить устройства с микропотреблением; микроконтроллер к таковым можно отнести весьма условно, и только в особых режимах. Впрочем, “Хозяин - барин”.

----------------------------------------------

А вот (может, кому будет интересно…) как встают кнопки SWT-1 в качестве триммеров на джойстики аппы Sanwa VG400. Конструкция всех 4-х площадок потенциометров абсолютно идентичная.

Клеились на эпоксидку “ЭДП” (на первом фото хорошо видны следы ее растекания по площадке, а мазалась площадка клеем аскетично, без излишеств; надеюсь, это признак сильного поверхностного натяжения - значит, и держаться должно крепко по идее); площадки в месте приклеивания кнопок предварительно обезжиривались антисиликоном и ацетоном, потом зачищались шкуркой (зерно примерно 600) до шероховатости. Бока кнопок обезжиривались, потом притирались к плоской поверхности на шкурке (зерно примерно 1000) - чтобы ничего наружу не торчало (верхняя металлическая пластинка, следы пресс-формы на корпусе кнопки) и было шероховатым.

Паять собираюсь легкоплавким припоем (ок.100 градусов; эпоксидка “ЭДП”, насколько я помню, выдерживает до 300 градусов) - иначе припаял бы провода до приклеивания

Кстати, имеются аналогичные по размерам кнопки SWT-10 под SMD-монтаж, но, КМК, применять их будет менее удобно - выводы у них короткие (легко залить эпоксидкой).

msv

У меня при выключении портился EEPROM на первых порах, пока не включил boden. Причем портились случайные группы ячеек, вовсе не первые… И даже не в моменты записи… С тех пор как включил boden ни одного сбоя не замечал. Поэтому так и не дошли руки написать контроль целостности eeprom. Хотя конечно это надо бы на всякий сделать, работы минут на 10…
Лично у меня сложилось впечатление, что проблема нулевой ячейки- это качующий из форума в форум миф… Ну может и была когда проблемная партия мег с этим глюком, но ни одного официального документа на эту тему не попадалось… В моей версии нулевая ячейка eeprom- первый символ в названии первой модели. У кого нибудь она портилась?

EagleB3
msv:

Лично у меня сложилось впечатление, что проблема нулевой ячейки- это качующий из форума в форум миф… Ну может и была когда проблемная партия мег с этим глюком, но ни одного официального документа на эту тему не попадалось…

Да, вполне может быть, что это предание…

msv:

С тех пор как включил boden ни одного сбоя не замечал.

BOD-рулез. А уж встроенный-то грех не использовать.