Fuck off happy

GCC vs LLVM-GCC
Link - Fri, 06 Apr 2012 13:27:06 GMT
Уже давно и неоднократно писалось, что LLVM-GCC проигрывает в производительности скомпилированного кода. Везде, как правило, указывалось на незначительные провалы в производительности и лишь в некоторых сложных тестах - до 50%.
Но, блин, я не думал, что 50% провал будет на таких простых задачках, как тут. 50% слив. А это означает, что LLVM-GCC не умеет даже при вклченой оптимизации нормально раскладывать все по регистрам и нормально лепить "короткие" переходы.

DS203
Link - Mon, 26 Sep 2011 18:02:14 GMT
Сегодня наконец пришла посылка с осцилографом DS203, он же DSO Quad. Про качество ничего пока сказать не могу, но конечно, подкупила цена, да еще с учетом того, что мне DealExtreme был должен денег. :)
Конечно. на DX комплектация победнее, чем у SeeedStudio (см. обзор от МК90), поставка OEM, но имеющиеся щупы однозначно лучше.
Прибор совсем лилипусичный! Я сначала даже сел на измену, когда распаковывал - думал, упаковка с аккумулятором, а прибор сперли. Боюсь представить, какого размера DSO Nano v2.
Я, правда, заранее подготовился и купил в SeeedStudio несколько переходников на BNC.







Феерический абзац с Роскомнадзором.
Link - Wed, 10 Aug 2011 02:41:02 GMT

Обзавелся я тут, значит, очередным трансивером в июле. Нужно зарегистрировать в Роскомнадзоре.
Раньше я пользовался услугой одного дядички - отдавал ему документы и его девочки-мальчики сами ездили оформлять разрешение на станцию с этой муторной процедурой. С нынешним разбродом (например, позывные до сих пор не дают и я не могу повысить категорию из-за этого), дядечка пока такой курьерской услугой не занимается. Так что теперь все самому.
Выяснил, что на rsoc.ru есть форма для подачи заявления в электронном виде - чтоб лишний раз туда не мотаться, я ее заполнил и стал ждать неизвестно чего.
Прошел практически месяц, никто не пишет и не звонит. Проверяю статус заявки на сайте: "заявка передана в электронную систему Роскомнадзора". Ну пипец какой-то, сайт уже не электронная система. Там же дан телефон справочной.
Звоню. Объясняю девушке в справочной, что частоты выделять мне не нужно, всего лишь зарегистрировать РЭС. в итоге договорились до того, что мне нужно позвонить в "отдел".
Еще неделя уходит на то, чтобы в этом "отделе" сняли трубку. В общем, меня отредиректили в справочную московского отделения Роскомнадзора. Звоню туда. Опять описываю девушке (теперь из московского филиала) ситуацию. Дает номер тетеньки, занимающейся электронными заявлениями. Звоню ей. Та раздроженным голосом завляет, что я уже второй за день умник, который звонит по этому поводу и к ней (не смотря на поданное в электронном виде заявление) это никакого отношения не имеет. Правда, дала телефон в "отдел", теперь уже региональный. Фиерия продолжается.
Звоню в "отдел": "А вы нам бумажные копии заявлений привозили? Откуда мы знаем о том, что вы завели электронные? Вот привезете - узнаем". Занавес.
Надо сказать, что все девушки, кроме той, что на электрических заявках, весьма вежливы. Хоть какой-то прогресс в госучереждении.

Posted via LiveJournal app for iPad.


Link - Mon, 01 Aug 2011 16:20:07 GMT
ВЕДОМОСТИ

Насколько Вы москвич?

Поздравляем! По всем признакам Вы коренной москвич. Вы знаете и любите свой город, переживаете за уходящую старую Москву с ее непередаваемым колоритом. Вас смущает, когда кто-то демонстративно небрежно отзывается о вашем любимом городе, и за это Вы, возможно, недолюбливаете приезжих.
Пройти тест
Насколько Вы москвич?

Top 10 must-have приложений для iPad от меня
Link - Thu, 07 Jul 2011 04:42:05 GMT
  • MobileRSS HD - великолепный клиент для Google Reader
  • Twitter - оригинальный клиент Твиттера прекрасен!
  • MyPad+ - для Facebook лучще ничего е видел
  • 1Password Pro - куда же без него, особенно при нынешней кросплатформенности приложения и DropBox в качестве хранилища
  • Forum Runner - не скажу, что он прекрасен, но при общении на форумах он сильно облегчает жизнь
  • Wikipanion+ - великолепнейший клиент для WiKi, имеющий возможность планировать чтение "на потом" и читать в оффлайне
    FlickrStackr - клиент для фотохостингов
  • eBay for iPad и Amazon WindowShop - с ними вы себя спросите, как же раньше обходились без них :)
  • Evernote - заметки, WebClip-ы... Последнее, на мой взгляд имеет некоторое преимущество по сравнению с InstaPapper и Read It Later Pro, потому что сохраняет в облаке содержимое, а не закладки, что полезно при сохрании страниц из Интранета или с безответственных сайтов :)
В добавок отмечу несколько специфичных для разных предметных областей приложений, которые мне так же очень понравились:
  • MacLoggerDX HD - лучший логгер для любительской радиосвязи с синхронизацией журнала с "большим" MacLoggerDX, а так же возможностью работы с радиостанцией через него же посредством Bonjour
  • OpenAPRS-xL - клиент для доступа к услугам APRS
  • ReBirth for iPad - клон знаменитого Rebirth от Propellerhead Software
  • KORG iElectribe - проммная реализация KORG ELECTRIBE·R
  • FL Studio Mobile HD - версия Fruity Loops для iPad
  • Koder - редактор кода с подсветкой синтаксиса,поддерживающий iDisk, DropBox, FTP

Вот теперь Garmin люблю я, вот теперь Garmin хвалю я!
Link - Tue, 05 Jul 2011 19:09:35 GMT
Давича копаясь на тему waypoint-ов по APRS, а соответственно, навигаторов, которые бы могли работать с APRS, наткнулся на используемую в штатах связку Garmin Nuvi 350 + Kenwood TM-D700 через маленькую поделку GTRANS Cable от Argent Data Systems.
Дальнейшие изыскания привели меня к тому, что в своих навигационных продуктах Garmin изготовил Fleet Management Interface, причем активно и в открытую развивает его.
Конечно, цена на кабель, особенно в версиях для новых устройств - кусачая, зато мы имеем несложный протокол поверх RS-232 и открырый SDK.
А самое главное - Garmin пошел на поводу у энтузиастов и начиная с версии протокола 2.50, устройства офицально (в версии 1 это было не официально) поддерживает управление waypoint-ами!
Ну предположим, с другой стороны у нас Kenwood TM-D710, имеющий отдельный интерфейс RS-232, который "кушает" NMEA и "сплевывает" waypoint-ы в собственном формате. А еще у нас есть данные из Интернет по камерам, постам и засадам, которые тоже достаточно часто (ежедневно) актуализируются. И заливать бы это дело удобно бы было со смартфона с помощью Bluetooth. Получается такая нехилая задачка по мультиплексированию и преобразованию данных на трех последовательных портах, хорошая задачка для Arduino на Mega 2560.
Пока писал, подумалось, что заодно можно и позиции друзей сливать из гео-социальных сетей. :)

Переключаем антенны на MFJ-993B с помощью microHAM Station Master
Link - Thu, 30 Jun 2011 03:47:04 GMT
Еще одна не совсем обычная интеграция приборов в шеке: у вас автоматизировано все управление с помошью microHAM Station Master, на столе стоит удобный пульт для него в виде PS/2 NumPad... а необходимо переключить коммутатор антенн на MFJ-993B. Собственно, причины использования коммутатора на MFJ-993B три: для второй антенны настройки в тюнере сохраняются отдельно, экономим на внешнем реле (зачем, если все равно есть встроенное), снижаем издержки качества сигнала - меньше побочной коммутации (разъемы, реле - на всем этом есть потери). Приимуществ, в общем, куча, а вот в концепцию автоматизированного управления и аскетичного рабочего места не укладывается. Что делать?
Нет, снимать штаны и бегать не потребуется. MFJ для нашего с вами удобства сделала проводной пульт дистанционного управления MFJ-993RC для этого тюнера. Сам пульт нам не нужен, но поскольку он прост до безобразия, мы воспользуемся его функцией коммутации антенн. Нога 8 разъема DB9 "Remote Control" у тюнера отвечает за переключение антенн. Замыкать ее следует на корпус разъема. Замкнутое состояние соответствует состоянию ANT1, разомкнутое - ANT2.
Что касается подключения к microHAM Station Master, для этого лучще всего подходят выходы B6 - B10, которые образуют отдельные коммутационные пары.
PS. Для автоматического переключения антенн кнопка ANT на тюнере должна быть нажата.

Вкусняшки для JavaScriptCore
Link - Wed, 22 Jun 2011 17:29:09 GMT
В кое-то веки решил поделиться некоторыми вкусняшками. :)
Если кто работал с WebKit или имел необходимость погонять JavaScript в своих приложениях знают, что одним из легко доступных движков является JavaScript Core от Apple, поставляемый в комплекте WebKit под большинством фреймворков.

В работе с движком есть одна особенность - за собой она тащит кусочек runtime-а от CoreFoundation, в частности строковые типы. При разработке кода на C разработчик не имеет вариантов и вынужден кругом использовать функции для работы с такими строками, что существенно перегружает код и снижает его читаемость. Если же мы обратимся к C++, то у нас найдется вполне элегантный вариант в виде класса-контейнера, скрывающего в себе реализацию JSStringRef:

class JSString
{
  public:
    JSString(const char* value);
    JSString(const std::string& value);
    JSString(const JSStringRef& value);
    JSString(const JSContextRef& context, const JSValueRef& value);
    ~JSString();
    operator JSStringRef();
    operator std::string();
    operator Glib::ustring();

  private:
    JSStringRef string;
};

JSString::JSString(const char* value)
{
  string = JSStringCreateWithUTF8CString(value);
}

JSString::JSString(const std::string& value)
{
  string = JSStringCreateWithUTF8CString(value.c_str());
}

JSString::JSString(const JSStringRef& value)
{
  string = value;
  JSStringRetain(string);
}

JSString::JSString(const JSContextRef& context, const JSValueRef& value)
{
  string = JSValueToStringCopy(context, value, NULL);
}

JSString::~JSString()
{
  JSStringRelease(string);
}

JSString::operator JSStringRef()
{
  return string;
}

JSString::operator std::string()
{
  size_t length = JSStringGetMaximumUTF8CStringSize(string);
  gchar buffer[length];
  JSStringGetUTF8CString(string, buffer, length);
  return std::string(buffer);
}

JSString::operator Glib::ustring()
{
  size_t length = JSStringGetMaximumUTF8CStringSize(string);
  char buffer[length];
  JSStringGetUTF8CString(string, buffer, length);
  return Glib::ustring(buffer);
}


Пример использования:

context = JSGlobalContextCreate(NULL);
JSObjectMakeFunctionWithCallback(context, JSString("dnsResolve"), dns_resolve);
JSObjectMakeFunctionWithCallback(context, JSString("myIpAddress"), my_ip);
JSEvaluateScript(context, JSString(proxyConfigureFunctions), NULL, NULL, 1, NULL);
JSEvaluateScript(context, JSString(script), NULL, NULL, 1, NULL);


Как можно заметить из примера, вся реализация управления временем жизни строки делегирована компилятору через создание на стеке анонимного экземпляра нашего класса-контейнера, код элегантен, не допускает утечек и прост для понимания для начинающих разработчиков. Вся сила C++ в элементарных "рюшечках".

Облако в массы!
Link - Sun, 12 Jun 2011 16:42:02 GMT
Я как-то смотрю на то что происходит вокруг и веселюсь. Лет 6-7 назад начал лабать толстых клиентов под сервисы для Symbian и всем пытался доказать, что на мобильных устройствах следует делать толстые приложения, соответствующие User Expirience-у платформы и компенсирующие низкую скорость и латентность передачи данных в радиосетях. Джобс вконце концов продавил это в мозги масс и теперь обходится без толстого мобильного клиента считается в среде интернет-сервисов неприличным.
Для прочих приложений издревле изготовленных под PC и даже под мобильные устройства ранее никто не задумывался о application continuity. То есть приложения мы имеем и там и там, а о том, чтобы как-то состояние синхронизировать между ними - не задумаывались. И вот свершилось Облако (в контексте application continuity)! Дошло. Apple обещает бесплатно, PlayStation Network в рамках подписки PSN+, да и самое интересное все равно ждать - приложения пока еще не готовы. Хотя прикольно, что хоть до кого-то дошло, что возможен такой вариант использования, если гамер режится в игру на PS3 и ему приспичило в сортир, можно перенесли плей на PS Vita и продолжить игру в туалете. Ну или в вагоне метро. И за это можно даже брать деньги. Посмотрите на IT 10-летней давности - этого ничего не было.
Кстати, большие дядьки в наших компаниях-операторах ходят и маяться: чуют, что "облако" в каком-то из проявлений нужно продавать, а в каком (помимо Office 365) - не поймут. Да и вооще, что есть "облако" им не понятно. И действительно?! :)
Соедующвя тенденция - очередное поколение развития социальных сетей. Слава богу, MySpace умирает - крайне кривой интерфейс и нечеткая концепция. А вот Цукерберг с Facebook продолжает удачно развиваться. И, как мне кажется, за счет интеграции с чужими сервисами, взращиванию приложений третьих сторон.
Пройдем мимо "Фермы". Какое-то время назад, когда Activision выпустил Guitar Hero 3, они реализовали некий простенький XML-интерфейс для получения информации по статусам игроков, не придавая этому большое значение. Народ активно его заиспользовал на всяких окогогеймерских форумах и сайтах. В то же время я разработал и опубликовал маленькое приложение на FB, которое отслеживает прохождения игроков за сутки и публикует это на стене FB. Через какое-то время интерфейс закрылся, но аналогичная потребность возникла в головах издателей и вот Rock Band и PlayStation Network засыпают мою стену достижениями в прохождении игр. И самое что интересное, функция ассоциации аккаунтов с FB появилась прямо из PS3.
Социализация вообще трансформируется как-то необъяснимо в последнее время. Sony пытается, похоже, изменить место PSN в процессе игры и максимально обозначить коммуникации между игроками за пределами домашней игровой консоли. В частности, релиз PS Vita обещает не только уже имеющийся в PS3 чат и инфо о статусе игры, но и некие нотификации вроде iOS-ных Push. Что это конкретно - пока не понятно. PS Vita - мобильное устройство с 3G.
Кстати, все последние гаджеты стимулируют спрос на услуги беспроводных операторов. Несколько лет назад человек с двумя SIM-картами смотрелся как полный гик, ныне чуть ли ни у каждого по отдельной карте еще в ноутбуке, iPad-е, скоро и в PS Vita. Назначенная пару лет назад стагнация продаж контрактов никак не прийдет - количество абонентов мобильных сетей уже превысило население страны, хотя, в какой-то мере, продажи спали. Интересно, когда же наконец доходы от передачи данных в мобильных сетях превзойдут доходы от трафика?
Социализация, облачные приложения, application continuity - все это многократно увеличивает потребление трафика. Очередная маленькая революция в ценах должна произойти, уже есть безлимитные пакеты мобильного трафика, наметились первые звоночки в ценах на роуминг при передачи данных. И вроде как все готово к очередной технологической революции, но как обстоят дела с юридическими аспектами? Конец анонимности, частной жизни и прочему?... Оставлю пока эту тему открытой...
Всем приношу извинения, что пост не содержит четкой структуры и выраженной мысли. Поток сознания, имевший целью обозначить существующие тенденции и дать вам задуматься о происходящем.

Очередной проект - "Туалетный контроллер"
Link - Tue, 24 May 2011 11:39:39 GMT
Идея реализации "туалетного контроллера" возникла у меня несколько лет назад, но только сейчас я созрел к реализации этого проекта.
"Туалетный контроллер" - что это такое?
Идея весьма проста. Это контроллер, который собирает околоводопроводную телеметрию, преобразует интерфейсы и выполняет некоторые привентивные действия, случись что. "Околоводопроводная" телеметрия - это показания счетчиков расхода воды, датчики утечки, температуры трубы горячей воды. Электронный монометр не помешал бы, но ценник кусается. Управляемыми устройствами должны стать нормально-закрытые электрические крапаны, перекрывающие поток воды, а при отключении горячей - маршрутизирущие поток в проточный нагреватель. Заодно все хотелось бы обернуть в RS-485 для того, чтобы синтегрироваться с контроллером домашней автоматизации ADI Leopard II, а так же компьютером для мониторинга, управления и снятия показаний - прежде всего расхода воды, его отправку на сайт ЕРЦ достаточно легко автоматизировать.
Наиболее продуманный сейчас момент - это замер расхода воды. Механические счетчики имеют герконовый импульсный датчик, дающий сигнал на каждые 10 литров. Так как снимать показания с механического счетчика нельзя, считать импульсы нужно непрерывно без прерывания. То есть считать на каком-либо контроллере не получится. У Maxim (Dallas Semiconductor) было замечательное решение на интерфейсе 1Wire - DS2423 - 2-хканальный счетчик с RAM. Уже пару лет как этот чип снят с производства. Похоже, что сменивниеся продакт-менеджеры в Maxim не просекли всей сути назначения этого чипа, сняв его с производства они предлагают на замену обычные 1Wire RAM. А ведь RAM в этом чипе вторичен, по-хорошему он нужен для того, чтобы сохранять состояние счетчика в момент последнего прочтения, что позволяет точно "снимать" телеметрию с каждого конктретного датчика вне зависимости от состояния контроллера, с помощью которого снимаются показания. Чип DS2423 можно найти на китайских складах по цене от $8 до $12, а Hobby Boards продает даже готовые решения на печатной плате с обвязкой и батареей питания за $28. Я выбрал последнее решение.
Пока-что снимать показания я собираюсь самодельным контроллером на базе Arduino Uno (AVR Mega168). Есть и промышленные решения, например контроллеры Poseidon, но цена вопроса, непонятки с счетчиками и отсутствие RS-485 в slave mode явно не в пользу этого выбора.
Рассматриваем вариант Arduino Uno. За коммуникации с 1Wire будет отвечать мост DS2482-100. Я вкурсе о программной реализации 1Wire в том числе и для Arduino, но помехоустойчивость такой непосредственной реализации сильно страдает. SOIC8, конечно, тяжело паять, но тут никуда не денешся. Единственный COM-порт Arduino Uno будет занят интерфейсом с компьютером, коммуникации RS-485 я планирую выносить на связку SC16IS750 + MAX482. SC16IS750 аппаратно реализует переключение направления передачи half-duplex для MAX482, аппаратно реализует адресные фильтры RS-485. Проблема SMD монтажа решается вот такой вот платкой от Sparkfun-а. Остается только на монтажной плате поставить разъемы да MAX482, благо есть в DIP-корпусе. RTC-часы на DS1307 доступны в виде готового конструктива.
Что касается исполнительных устройств, то тут пока определенности нет. Доступны разные варианты интерфейсов.
Продолжение следует...

Используем МКЭШ 14 для подключения антенны ФАП
Link - Fri, 20 May 2011 04:18:04 GMT
Совсем кратенький пост - полезняшка.

Антенна ФАП использует 16-проводную линию для питания и управления. Достаточно проблематично найти кабель, который бы имел достаточное сечение и количество линий. Отечественная промышленность выпускает кабели с достаточно экзотическом количеством линий даже для использования в отечественной технике.

И того, имеем антенну ФАП, которая "кушает" 16 линий и кабель МКЭШ 14х0.35. Его сечени (0.35) полне достаточно для питания анода и накала. Остается решить вопрос, как же подсоединить 14 линий без потери функциональности.

Детальное изучение схемы показало, что есть три вещи, которыми можно пренеборечь:
  • Наименьшая емкось в набивке. Етой линией вполне возможно пренибречь, если точность настройки в резонанс не стоит во главе угла. Дискретность этой настроки составляет где-то в районе 5 КГц, то есть несколько шире полосы SSB. Мне не очень хочется потерять такую точность.

  • Генератор шума. Наверное, это первое, о чем я подумал для исключения. Но если детально рассудить, получается, при выносе антенны за стены дома генератор шума является единственным способом ее диагностики. При его запуске помимо шума на резонансной частоте пульт управления показвает ток анода. В общем, не вариант.

  • Если детально изучить схему, две линии передают землю. Сделано это для удобства комутации "ручник/автомат". Вернее, для исключения единовременной работы двух схем управления - ручной и автоматической. Но так ли это критично?

Если хорошенько подумать, то все-таки объеденить раздельные цепи земли можно. Если это сделать, важно соблюдать только одно правило - на линиях автоматического управления не должно ничего передаваться при ручном управлении.
И того, теперь требуется 15 линий для управления антенной. 15 линию находим в виде добротной оплетки, которая имеется у кабелей МКЭШ.

RA6LBS K-98
Link - Wed, 18 May 2011 07:01:04 GMT
Попереписывался тут с Андреем RA6LBS по поводу его K-98.

Поговорили с ним о вариантах автоматизированного управления K-98 при помощи Station Master. Идея выглядит так:
У Station Master есть функция виртуальной поворотки, с помощью которой комманда, выдаваемая компьютером на установку угла поворота антенны, приводит к коммутации антенного переключателя на антенну, соответствующую направлению приема/передачи. Такая функция позволяет автоматически выбирать нужное направление работы прямо из логгера нажатием одной кнопки (предположим, что QTH корреспондента нам известен из его карточки на QRZ.com, которая "подтягивается" логгером автоматически).
В какой-то мере K-98 представляет собой набор таких антенн со всроеной функцией коммутации. Наша задача - этаким хаком без модификации оригинального блока управления антенны добиться автоматизированного управления. Изучение схемы блока управления подсказало решение.
И так, предположим, для управления антенной мы будем использовать порт B на Station Master. Этот порт разбит на две секции, физика второй секции (4 канала) ориентирована на работу в качстве секвенсора - имеет несколько раздельных парных выходов реле. Первые 6 каналов, в принципе, предназначены для BPF, но фактически любое реле из любой секции может иметь любое из трех (ANT, BPF, SEQ) назначений. Порт А так же не имеет жесткого назначения, тем не менее, общая линия у него на все каналы. Так что в нашей ситуации нам будет удобнее использовать порт B.
Сейчас в порт B у меня подключен самоизготовленный переходник на 4 RCA разъема для функции секверсера. Туда же имеет смысл припаять переходник для K-98.
Далее - про коммутацию.
Мне сейчас не очень хочется подробно расписывать что к чему. Приведу вариант настройки, из него все поймете сами.

Линия К-98Линия порта ВНастройка реле
K1 (2)B1 (20)ANT
K2 (3)B2 (21)ANT
K3 (4)B3 (22)ANT
K4 (5)B4 (23)ANT
K5 (6)COM (4)
PTT IN (T)B7 (10)SEQ
PTT IN (S)B7 COM (6)

Очень важно переключить джампер PORT B в самом Station Master в положение EXT, иначе попалите реле в K-98.

Настройки коммутации:


Для корректной работы со Station Master в автоматическом режиме необходимо (на Station Master включен режим Split и выбрана K-98 в качестве приемной антенны) необходимо переключить галлетник направлений приема на блоке питания K-98 в положение "S".

Вот такой вот хак.

RA6LBS
Link - Sun, 15 May 2011 11:46:15 GMT
Сегодня почитал про антенны нижних диаппазонов от RA6LBS, посмотрел схемки.
Знаете что? В принципе, три его RB2 с коммутатором K4/8 отлично вешаются на microHAM Station Master с настроенной виртуальной повороткой, так что для софта (логгеры с управлением повороткой) получается вообще все в шоколаде!
Но меня больше заинтересовал вариант с К-98. Я написал RA6LBS пиьмо по поводу "офицальной" возможности такого подключения. Ждем ответа.

Управляем повороткой с помощью microHAM Station Master под Mac OS X
Link - Wed, 11 May 2011 04:35:16 GMT
Продолжаем тему разработки полезняшек раскрывающих функции железок microHAM под Mac OS X. Ранее разработанный мной драйвер петли последовательных портов предоставляет для этого широкие возможности. :)
microHAM Station Master содержит в себе интерфейс поворотного устройства. Используя его убиваем кучу зайцев. Да не задача, он использует свой проприетарный протокол microHAM (который, напомню, мультиплексирует еще массу всего), так что напрямую основной массой софта, как обычно, не поддерживается.
Версия ПО для Windows эмулирует интерфес HyGain DCU-1. Пойдем под Mac OS X тем же путем. Разве что утилита опять консольная.

Еще один вялотекущий проект: автоматическое управление антенной ФАП
Link - Mon, 25 Apr 2011 05:03:14 GMT
Про магнитные антенны в сети можно прочитать хороших и плохих отзывов, все достаточно неоднозначно. Четко можно сказать следующее: они не работают на передачу, ловят кучу всякой "дряни", но в то же время прекрасно работают на низкочастотных диаппазонах имея размеры многократно меньше длинны волны.
Мне тоже захотелось попробовать такую штуку. Коммерческие образцы добротностью не отличаются, неудобны в настройке, а порой даже жестко заточены под конкретную полосу. Все это не добавляет энтузиазма. Но давайте посмотрим на советскую оборонную промышленность - за время "железного занавеса" было выпущена масса прекрасных решений на феритовых и рамочных антеннах. Первопроходец, ныне массово списываемый в войсках и изредка появляющийся у барыг - ФАП (ферритовая антенна приемная), которая шла на радиостанциях Р-140М и Р-161.

Антенна устанавливалась на крыше и использовалась для приема во время движения. На радиостанции Р-140М, поскольку антенна фактически была опцией, к ней прилагался вот такой пульт управления:

На станции Р-161 отдельного пульта уже не было, по этому этот пульт достаточно тяжело найти. Я вот уже три месяца как никак не найду (если кто может помочь - напишите).
Разрабатывая эту антенну инженеры удилили особое внимание широкому диаппазону приемных частот, антенна имеет достаточно слабые ферритовые стержни 200. Вся сила антенны в интегрированном ламповом двухкаскадном усилителе.
Дальнейшим продолжением ФАП стала антенна АЗП (антенна зенитного приёма), с большим диаппазоном настроки резонанса и усилителем на полевых транзисторах, применяется на "Арбалетах" (Р-165).

Кроме того, отечественная промышленность выпускала и другие няшечки, например "Фартук" (15Э1213) и "Битта" (15Э1037). Вот бы "Битту" достать, но ее вообще днем с огнем не сыскать...



И так, имеем ФАП (пульта пока нет) и современную радиостанцию. В отличие от "классической" инсталляции ФАП на кузове ЗИЛа у нас расстояние от радиостанции до антенны приличное. С таким расстоянием, если пульт ФАП тащить домой, напряжение накала упадет на столько, что настанет хана всем лампам в усилителе. Каждый решает эту проблему по своему. Например, RU6LM сделал дополнительный повышающий трансформатор. Но это не наш способ. Наш способ - поставить блок питания как можно ближе к антенне.
Пульт управления ФАП имеет дополнительных вход дистанционного управления, через которых радиостанция может переключать настройки антенны. Вход этот представляет собой 10 линий управления "Волна №..", идущий на матрицу коммутации "Память", на которой с помощью гвоздиков выставляются настройки для каждой из программ. Глядя на схему пульта несложно догадаться, что хитрым образом воткнув эти гвоздики можно добиться трансляции входящего двоичного сигнала в выходящий 1:1 (антенна имеет 2 линии для настройки индуктивности и 8 для настройки емкости LC-контура). Таким образом можно реализовать управление из шэка, разместив пульт около антенны. В случае, если пульт найти не удаться, это будет единственный доступный способ управления антенной, прийдется лишь изготовить блок притания.
Но Я был бы не Я, если бы на этом все закончилось. Я периодически забываю что-либо переключить - антенный переключатель или еще что-либо. Согласитесь, было бы совсем не удобно вращая энкодер частоты на радиостанции еще задумываться о переключении тумболеров управления антенной. Извращение какое-то. Текущая концепция выглядит так:

Помните, что я писал о причинах покупки microHAM microKEYER и Station Master? Эти интерфейсы могут совершенно прозрачно для софта считывать со станции частоту и раздовать ее (или ее производные) разным потребителям. На microKEYER для такой "раздачи" помимо проприетарного интерфейса для линка с Station Master есть еще стантартный ICOM-овский CI-V. CI-V - это интерфейс с открытым коллектором и TTL-уровнями, фактически общая шина, так что потребителей может быть несколько. Прототип, а скорее всего и конечное решение для удаленного автоматического управления делаем на Arduino Mega, попутно прицепив к нему Mega Sensor Shield для того, чтобы подключать все через удобные разъемы, а также DFRobot LCD Keypad Shield для вывода информации и ручной подстройки / настройки.
Схему согласования CI-V со входами AVR по хорошему нужно сделать с буферными регистрами 7407, как вот на этой схеме, а пока на первое время берем вариант из этой схемы:

Это хозяйство я собирал прямо на разъеме, по этому получилось следущее:

Для управления антенной я планирую использовать оптронную развязку с GIO на базе MCP23017, это позволит избежать тонны проводов к Arduino, а так же без проблем подключить оптроны без использования дополнительных ключей: у AVR2560, в отличие от MCP23017 весьма невысокая нагрузочная способность. Выводом я займусь немного попозже, хотя чипы уже давно приехали.
Прошивку я написал еще зимой, сейчас только исправляю ошибки да дорабатываю юзабилити. Изначально я думал реализовать все с помощью простой матрицы, да не тут-то было. Из расчета хотя бы 4 байт для каждой точки получаем уже 4 килобайта для всей матрицы (которых у нас попросту нет в EPROМ) и непозволительное время поиска. Хорошо, что формулу Томпсона пока никто не отменил, по этому пришлось реализовывать математическую модель. :)
С значениями емкостей все понятно из схемы - обычная двоичная набивка, даже очень веселая: 0-255 пФ. А вот с индуктивностями пришлось помучится. В схеме они не расписаны, на самих катушках на антенне для отечественного применения - тоже. Лишь на каком-то из польских форумов нашел снимки открытой антенны экспортного варианта, на которой были расписаны индуктивности. Там же были найдены эталонные настроечные таблицы. Вычисления в Excel показали, что разработчики также замечательно учли паразитную емкость цепи, о которой нигде не слово. По моим расчетам она составляет порядка 68 пФ. Возможно практика это значение скорректирует.
На выходных найдя свободное время приступил к натурным испытаниям без антенны.
С трудом нашел дефект в программной реализации CI-V у себя - "меньше" вместо "меньше или равно", из-за этого частота не декодировалась. Так же натурные испытания показали, что нужно слегка подкорректировать лимиты диаппазонов. Еще пару вещей пришлось доделать по юзабилити.
В общем, пока имеем вот такой вот прототип:


uH Router Serial Port Redirector for Mac OS X
Link - Fri, 22 Apr 2011 04:32:20 GMT
Фуф... Ну, вроде как все. Сделал консольную (GUI-ческую пока нет желания делать) утилитку, которая используя мой драйвер петлевого последовательного порта перекидывает все данные (CAT + PTT) на uH Router.

Картинка теперь выглядит так:


Стрелочка напрямую между драйвером LoopbackDriver и утилитой PushToPipe означает то, что утилита умеет "мапить" нужные модемные сигналы (DSR, RTS, RI) самостоятельно.

Нереально волшебная задница Mac OS X
Link - Wed, 20 Apr 2011 19:23:52 GMT

Меня умиляют решения с асинхронным вводом-выводом в современных операционных системах. Он вроде как есть, но его вроде как нет.
Задачка: делаю редиректор с последовательного порта в UNIX pipe. Нужно переложить данные из порта в один pipe, "модемные" биты - во второй, а из третьего - читать и писать эти данные в порт. Задачка несложная, даже весьма простая, вроде как.
Начинаем изучать проблемную область... Первое, что видим - "модемные" биты нельзя опрашивать асинхронно, за их опрос отвечает соответствующий системный вызов ioctl. Время опроса нам не столь критично, будем дролбиться каждые 100 миллисекунд. Получаем ситуацию, что нам нужно ожидать изменения пары дескрипторов (порт и входящий pipe) и некоторого таймаута. Для данного действа в POSIX у нас есть целых три способа - poll, select и kqueue, унаследованный от BSD.
select явно попахивает математиками из комитета по стандартизации C++ - поганее способа придумать нельзя было - каждый раз для метода нужно прогружать новую таблицу дескрипторов, чтобы после вызова получить в нем из всего списка только те, по которым нужно произвести изменения, Не забываем, что нам эту дурацкую операцию нужно проводить каждые 100 миллисекунд. Получается, что на создание этого списка и передачу его в kernel space тратиться больше ресурсов чем на всю последующую работу. Параметр таймаута, кстати, тоже нужно каждый раз перезаписывать.
Ну вроде как на замену select-у есть станларный poll и замечательно продуманый kqueue. Но... по не понятной для меня причине Mac OS X и все ее производные не поддерживают работу kqueue с устройствами TTY! На его дескриптор попросту получаем EINVAL.
Хорошо, у меня в рукаве есть третий замечательный и весьма стандартный метод - poll. Ну и с ним мы наступаем на те же самые грабли. Получается, что замены весьма неэффективному select-у в таких задачах нет! Ну что же, прийдется смириться.

Posted via LiveJournal app for iPhone.


WMR968 и Linux
Link - Thu, 14 Apr 2011 15:09:45 GMT
Давно хотел обзавестись такой погодной станцией, чтоб можно было подключить ее к компьютеру, писать журнал и отдавать данные в APRS.
Соответственно, станция искалась с уже давно расковырянным протоколом и открытым ПО. Выбор пал на недорогую Oregon Scientific WMR968. У нас в стране цены на такие станции дикие, да и большая часть датчиков ретейлового набота мне не нужна (датчик осадков, флюгер, датчики с подзарядкой на солнечных батареях). Решил покупать потихоньку в Штатах в виде компонентов на замену.
Так в прошлом году к уже имевшимся двум дареным станциям появилась более-менее нормальная. Но реально заняться руки дошли только сейчас.
Станция имеет однонаправленный интерфейс RS232, со стороны компьютера только сигнал готовности к приему DTR. Станция с неохотой "сплевывает" закешированные на ней данные датчиков, а в дальнейшем транслирует только дельту, если происходят изменения.
Имея такие особенности, самая приспособленная к таким станциям программка - wx200d имеет два основных компонента - консольного клиента и демона, осуществляющего журналирование и предоставление данных из своего кэша по запросу клиенту. Все бы хорошо, если бы не синдром unix-овых лоботрясов: программа выгружает данные в нативном формате более старой станции WR200, а для поддержки более свежих станций в ней имеется транслятор сообщений в более скудный старый формат. Однако.
Так вот, встроенная поддержка WMR9x8 адекватностью не отличается - пишет в журнал только при наличии всех датчиков, а имеющийся у меня THC268 вообще не понимает. Пришлось патчить.
Патч тут. Натягивать на самую последнюю версию из CVS - 1.3.2.

Virtual Serial Port loopback для Mac OS X
Link - Wed, 06 Apr 2011 03:53:02 GMT
Не могу не порадоваться за себя и порадовать своих редких читателей. На сей раз целью разработки стал драйвер для Mac OS X.

Немного предистории. Не так давно из вполне определенных концептуальных соображений я заменил на своей станционарной радиостанции компьютерный интерфейс. В контексте данной предметной области компьютерный интерфейс - это такая коробочка, которая имеет в себе звуковую карту, несколько специфичных последовательных портов и еще кое-какую дребедень. Все для того, чтоб было удобно работать с радиостанцией разным компьютерным программам.
Был интерфейс RigExpert (вернее, он есть, но теперь предназначен для "походной" станции), в котором, как и в большенстве других разработчики просто сделали обвязку поверх стандарных чипов - не требуется никаких специальных программ и драйверов, все стандартно.
В свою очередь, заменил я его на интерфейс от microHAM. Прекрасный качественный интерфес. Причиной замены стало наличие функции "прозрачного" от компьютерных программ декодирования частоты.
В любительском радио есть стандарт на протокол управления радиостанцией через последовательный порт - CAT (Computer Assister Transceiver), который, помимо всего прочего, позволяет "снимать" текущую настроеную частоту. Эта часотота нужна много где еще: в моем случае это декодер диаппазонов, автоматически переключающий антенны, или усилитель, которого у меня нет. Все они должны получать данные одновременно с программами, а при наличие всего одного CAT-интерфейса на радиостанции это непозволительная роскошь.
Так вот, все обычные интерфейсы не умеют так "прозрачно" делиться информацией о частоте, а microHAM умеет. И вроде бы все великолепно, если бы не одно "но". У него нестандарный интерфейс для программ. Да, торчит обычный последовательный USB-порт FTDI, но на нем передаются не "голые" комманды трансивера, а свой протокол. Ко всему прочему, компания microHAM не поддерживает официально операционных систем, отличных от Windows (для которой в стандартном ПО реализуются виртуальные последовательные порты), но они взаимодействуют со разработчиками для поддержки других ОС. Так для Mac OS X есть решение - uH Router, о котором я уже писал. Решение хорошее и открытое, но требующее поддержки своего API со стороны третих программ. В свою очередь, эти самые разработчики радиолюбительского софта, весьма редкие для Mac OS, зачастую не стремяться поддержать этот API. Ну да не проблема - API просто позволяет обратиться к нужному физическому порту устройства на отдельных named pipe. Есть скриптовые языки вроде PHP, которые позволяют реализовать обращение к этому API, и замечательная утилита socat, перенаправляющая какие угодно потоки куда угодно...
И тут выплывает проблема совершенно другого рода: на столько Mac OS X является *NIX системной, на столько же она ей не является. Вы не найдете привычных для себя /proc на файловой системе, а в /dev присутствуют только стандартные для BSD устройства вроде блочных, терминалов, последовательных портов и и.д. Доступ по всему остальному осуществляется через проприетарный IOKit Framework. Большенство программ для Cocoa использует его для перечисления устройств, в частности - последовательных портов. Так что ситуация выглядит так, что стандартное *NIX решение для реализации виртуальных петлевых устройств - PTY, хоть и имеется в OS X, но никак не работает с большинством программ. Я потратил уйму времени на поиски готового решения на различных форумах, но если PTY не прокатывало - дело не шло, только общие слова вроде "разработайте свой драйвер". Соответственно, пришлось заняться именно этим.
И вот, встречайте - драйвер готов. Сейчас провожу тестирование и рассматриваю вариант его распостранения через App Store. Никак не могу не направить луч поноса в сторону яблочной компании за крайне скудную и неактуальную документацию и даже ее отсутствие по большей части. Предположу, что большенство разработчиков, которые пытались сделать такой петлевой драйвер, бросали свои активности долбясь лбом об эту преграду. Домен IOSerialPortSync вообще не описан, 70% времени было посвещенно изучению исходных кодов уже имеющихся драйверов от Apple и исходных кодов самого kernel-овой части IOKit.
</p>


Собственно, дравер уже неделю как работает, а вчера я провел натурные испытания с трансивером. Чем спешу с вами поделиться.


Bluetooth-часы и Maemo (продолжение)
Link - Fri, 25 Mar 2011 11:15:15 GMT
Написал статью Bluetooth-часы и Maemo (продолжение) на Хабре по результатам очередного этапа разразботки программы.

Восстанавливаем зеркало RAID1 в Mac OS X
Link - Sat, 26 Feb 2011 11:09:40 GMT
Так случилось, что в середине этой недели в моем Маке сдох один из жестких дисков. Еще с конца 90-х наученный горьким опытом я всегда и на всех стационарных компьютерах резервирую данные: на PC-ках с помощью аппаратных RAID5, на Linux - с помощью RAID1 на mdrad под корневой файловой системе и аппаратных RAID5 для других разделов.
Под Мак, аппаратных решений практически нет. Резервирование корневой файловой системы произвожу TimeMachine. Уж больно не хотелось переливать ОС, да и в использовании TimeMachine есть преимущества - всегда можно откатить документы или состояние операционной системы. Например, после выхода 10.6 мне пришлось на какое-то время откатываться на 10.5.
Но разговор сейчас не об этом. Файловый "архив" и прочая ерунда у меня лежат на отдельном томе, реализованном на двух дисках в штатном софтверном зеркале AppleRAID. Один из этих дисков как раз издох.
Как оказалось, через GUI-ческий Disk Utility новый диск добавить в качестве резервного для пересборки массива нельзя! Все мои попытки привели к тому, что том вообще отвалился от AppleRAID и стал виден как обычный диск.
В итоге, как обычно, помог Google - проблема со сборкой и восстановлением зеркала решается в два вызова diskutil в командной строке.

uH Router
Link - Mon, 21 Feb 2011 19:53:16 GMT
Я уже слегка затрагивал тему устройств от microHAM. У меня присутствует связка из двух - microKeyer II и Station Master.
Изначально я задумывал обзавестись лишь Station Master: ввиду того что я постоянно забываю переключать ручной коммутатор антенн, хотелось автоматизировать это дело, заодно получить ряд профитов, вроде секвенсера, сопряжения с усилителем и поворотным устройством. Тогда со стационарной станцией я использовал копьютерный интерфейс RigExpert TI-5. Не вдаваясь в детали протокола CAT и зная то, что в TI-5 можно вывести на дополнительный выход линию RxD интерфейса CAT, мне казалось, что будет достаточно собрать механический переходних с одного разъема на другой, чтобы такая связка заработала.
Когда Station Master приехал, я понял, на сколько заблуждался... Как показала практика, для декодирования частоты через CAT слушать данные не достаточно - их надо запрашивать. При прямом подключении к радиостанции Station Master, конечно, это делать умеет. Но вот незадача - при таком подключении теряется функция звукового интерфейса, да и программ для работы с CAT на Station Master под Mac OS X нет... Но не все потеряно - Station Master умеет "прозрачно" для программ интегрироваться с интерфесами microHAM microKeyer II и MK2R/MK2R. При этом в том небольшом количестве программ для радиолюбителей под Mac OS X часто имеется поддержка microHAM-овских интерфесов, причем через еще один сторонний продукт - uH Router.
uH Router - свобоный продукт, разработанный Коком Ченом (W7AY), поддерживаемом "как есть". Но вот не задача - при запуске uH Router-а Station Mater напрочь перестает видеть microKeyer II! Я отписал Коку об этой проблеме, заодно обнаружил баг с чтением конфигурации в свежей версии программы. Кок очень нехотя ответил, что дефект с конфигурацией он исправит тогда, когда у него появится время, а заниматься разработкой под Station Master он не намерен.
Я взял у него исходный код, более-менее локализовал дефект с конфигурацией, отписал об этом Коку. Параллельно написал в техническую поддержку microHAM запрос на документацию. От службы поддержки до сих пор жду ответа, зато Кок заинтересовался таким ходом событий и прислал мне так необходимый документ. Помимо меня дефект с загрузкой конфигурации обнаружил еще один радиолюбитель, Кок принялся исправлять баг.
Тем временем я поизучал документацию и попробовал пару вариантов конфигурации microKeyer, используя свои готовые байндинги для uH Router, написанные на PHP. В итоге победное решение было найдено, код uH Router-а дописан, протестирован и отправлен W7AY.
Патч отправлен автору и сейчас ожидает публикации вместе с исправлением других дефектов.
Получается, что сам не сделаешь - никто не сделает, это реали open-source. Хотя, меня такой подход устраивает, позволяет контролировать сроки внесения изменений и требования к новому функционалу.
Хочется еще поддержку Station Master-а там реализовать... Тем более теперь и спецификации есть, да и по протоколу он такой-же.

Удаленное управление трансивером: часть 5
Link - Sat, 19 Feb 2011 21:48:45 GMT
Продолжаем извращаться с удаленным управлением радиостанцией под Mac OS X.
Недавно я сменил компьютерный интерфейс, теперь это microHAM.
microHAM-овские интерфесы используют свой протокол для передачи данных в компьютер, который инкапсулирует CAT, PTT и т.д. То есть без специальной программки не обойтись.
Под Mac это uH Router. Одно из приимуществ решения - оно мультиклиентное, т.е. позволяет свободно работать с интерфейсом и станцией сразу нескольким программам. Естественно, в нативной среде требует поддержки API uH Router-а со стороны программ.
Нашей задачей, как обычно, является форвард CAT-интерфейса станции по TCP, чобы на другой стороне можно было воспользоваться Windows и горяче любимым Ham Radio Deluxe (к примеру).
Честно скажу, реализовать API uH Router-а на шеле я не осилил. Ну а поскольку в Mac OS X есть PHP, пишем скрипт на PHP. Я не стал изобретать велосипеда, непосредственным форвардом занимается, как и в прошлый раз, socat.



#!/usr/bin/php -q
<?php

  // Constants form RouterCommands.h

  define("ROUTERFUNCTION", 0x80);
  define("KEYERFUNCTION",  0x40);
  define("CLOSEFUNCTION",  0x20);
  define("FUNCTIONMASK",   0x1f);
  define("WRITEONLY",      0x80);

  // Commands sent to the master port

  define("OPENMICROKEYER", ROUTERFUNCTION + 0x01);               //  get a port to the microKEYER router
  define("OPENCWKEYER",    ROUTERFUNCTION + 0x02);               //  get a port to the CW KEYER router
  define("OPENDIGIKEYER",  ROUTERFUNCTION + 0x03);               //  get a port to the DIGI KEYER router
  define("OPENKEYER",      ROUTERFUNCTION + 0x08);               //  get a port to keyer from following keyerID (char*)
  define("KEYERID",        ROUTERFUNCTION + 0x09);               //  get Keyer ID (null terminated string) of the nth keyer (next byte after command)
  define("QUITIFNOKEYER",  ROUTERFUNCTION + 0x1f);               //  quit if there are no keyers
  define("QUITIFNOTINUSE", ROUTERFUNCTION + 0x1e);               //  quit if not connected
  define("QUITALWAYS",     ROUTERFUNCTION + 0x1d);               //  quit
  define("ROUTERVERSION",  ROUTERFUNCTION + 0x1c);               //  router version <1><80> = v1.80
  define("WATCHDOG",       0x08);                                //  keep UDP port alive

  // Commands sent to the router ports (numbers are within FUNCTIONMASK)

  define("ROUTERPORT",     KEYERFUNCTION + 0x01);                //  (reserved for router internal use)
  define("OPENRADIO",      KEYERFUNCTION + 0x02);                //  get a RADIO port
  define("OPENCONTROL",    KEYERFUNCTION + 0x03);                //  get a CONTROL port
  define("OPENPTT",        KEYERFUNCTION + 0x04);                //  get a port to the PTT flag bit
  define("OPENCW",         KEYERFUNCTION + 0x05);                //  get a port to the serial CW flag bit
  define("OPENRTS",        KEYERFUNCTION + 0x06);                //  get a port to the RTS flag bit
  define("OPENFSK",        KEYERFUNCTION + 0x07);                //  get an FSK port
  define("OPENWINKEY",     KEYERFUNCTION + 0x08);                //  get the WinKey port
  define("OPENFLAGS",      KEYERFUNCTION + 0x09);                //  get the FLAGS port
  define("OPENEMULATOR",   KEYERFUNCTION + 0x0a);                //  get the WinKey Emulator port (only in µH Router; not in microHAM keyers
  define("WINDOWSIZE",     KEYERFUNCTION + 0x0b);                //  used by UDP to change window size

  define("CLOSERADIO",     CLOSEFUNCTION + OPENRADIO);           //  close a RADIO port
  define("CLOSECONTROL",   CLOSEFUNCTION + OPENCONTROL);         //  close a CONTROL port
  define("CLOSEPTT",       CLOSEFUNCTION + OPENPTT);             //  close a port to the PTT flag bit
  define("CLOSECW",        CLOSEFUNCTION + OPENCW);              //  close a port to the serial CW flag bit
  define("CLOSERTS",       CLOSEFUNCTION + OPENRTS);             //  close a port to the RTS flag bit
  define("CLOSEFSK",       CLOSEFUNCTION + OPENFSK);             //  close an FSK port
  define("CLOSEWINKEY",    CLOSEFUNCTION + OPENWINKEY);          //  close the WinKey port
  define("CLOSEFLAGS",     CLOSEFUNCTION + OPENFLAGS);           //  close the FLAGS port
  define("CLOSEEMULATOR",  CLOSEFUNCTION + OPENEMULATOR);        //  close the WinKey Emulator port

  define("CLOSEKEYER",     KEYERFUNCTION + FUNCTIONMASK);

  //

  define("LAUNCH_ROUTER",  "osascript -e 'tell application \"µH Router\"' -e 'tell microKEYER' -e 'retain' -e 'end tell' -e 'end tell'");
  define("KILL_ROUTER",    "osascript -e 'tell application \"µH Router\"' -e 'tell microKEYER' -e 'release' -e 'end tell' -e 'quitIfNotInUse' -e 'end tell'");

  define("ROUTER_PIPES",   "/tmp/microHamRouter");


  class uHRouterConnection
  {
    private $input;
    private $output;

    public function __construct($name = ROUTER_PIPES)
    {
      $this->input = @fopen($name."Read", "r");
      $this->output = @fopen($name."Write", "w");
    }

    public function __destruct()
    {
      @fclose($this->input);
      @fclose($this->output);
    }

    public function Connected()
    {
      return (($this->input !== FALSE) && ($this->output !== FALSE));
    }

    public function Execute($command, $read = TRUE)
    {
      if (is_numeric($command))
        $command = chr($command);
      @fwrite($this->output, $command);
      if ($read)
      {
        stream_set_timeout($this->input, 10);
        $value = @fread($this->input, 20);
        return trim($value);
      }
    }

  }
  
  //

  function Stop()
  {
    global $router, $keyer;
    if (isset($keyer) && $keyer->Connected())
      $keyer->Execute(CLOSEKEYER, FALSE);
    unset($keyer);
    unset($router);
    exec(KILL_ROUTER);
    exit();
  }
  
  // set_time_limit(0);
  
  print("Starting uH Router...\n");
  exec(LAUNCH_ROUTER);

  print("Openning uH Router connecion...\n");
  $router = new uHRouterConnection();
  if (!$router->Connected())
  {
    print("Can not open uH Router connection.\n");
    Stop();
  }

  print("Requesting Keyer conection...\n");
  $name = $router->Execute(OPENMICROKEYER);
  if (($name == FALSE) || (strlen($name) == 0))
  {
    print("Requested keyer not found.\n");
    Stop();
  }

  print("Openning Keyer conection ($name)...\n");
  $keyer = new uHRouterConnection($name);
  if (!$keyer->Connected())
  {
    print("Can not open connection for Keyer.\n");
    Stop();
  }

  print("Requesting radio connection...\n");
  $name = $keyer->Execute(OPENRADIO);
  if (($name !== FALSE) || (strlen($name) == 0))
  {
    print("Forwarding connection for radio ($name)...\n");
    print("Press Ctrl+C to stop forwarding.\n");
    $redirector = "sh -i -c 'socat -d TCP-LISTEN:7001,rcvbuf=1,sndbuf=1 PIPE:${name}Read!!PIPE:${name}Write'";
    system($redirector);
    print("\n");
    print("Stopping...\n");
  }

  Stop();
?>



Метрополитен имени Гаева
Link - Tue, 08 Feb 2011 18:30:15 GMT

Очумелые ручки: microHAM Station Master + военные высокочастотные реле РЭВ-14
Link - Sun, 16 Jan 2011 15:22:06 GMT
Собственно, ничего особенного в этом посте не будет.
Просто мысли и их воплощение по реализации коммутации антенн в своем радио-шеке.

Имеем несколько антенн: на крыше, на балконе, еще кое-что планируется. В принципе, хороший кабель для фидера - развлечение не дешевое, да и места, чтоб тянуть пучок шнуров по полтора сантиметра толщиной еще найти надо. Так же на чердак пропущен кабель управления, МКШ 10х0,75 (кабы еще один не пришлось тащить :)). Единственный выход в таком случае - коммутаторы антенн. Всякие зарубежные и отечественные поделки рассчитаны практически исключительно под КВ и, как правило, имеют не менее 6 реле. В нашем случае это расточительно, да и не покрывает требования в коммутации УКВ.
Выход из положения - отечественные военные реле семейства РЭВ-14. Отличные монолитные реле с ВЧ-разъемами СР-50. В сети достаточно можно найти информации по ним, а купить вполне реально на Митинском рынке. Реле на столько хороши, что их применяют даже на диапазонах 23 см и пропускают через них киловатты!
По эксплуатации этих реле могу посоветовать одну хорошую статейку - http://www.rk3awl.ru/techpart/rew.php,
Теперь о проблеме. Можно действительно пойти по пути радиолюбителей старой закалки - соорудить пульт с тумблерами и блоком питания. Учитывая то, что мы из ИТ и живем в век информационных технологий, для меня, периодически забывающего переключить ручной переключатель антенн рядом с трансивером, это не вариант.
В качестве центрального устройства для "умной" коммутации выбрано устройство microHAM Station Master. Оно самостоятельно и прозрачно для программного обеспечения "снимает" по CAT данные о текущей частоте трансивера, учитывает состояние PTT и управляет прочими устройствами в шэке - усилителями мощности, антенными коммутаторами, преселекторами и прочим железом, попутно выдавая PTT через секвенсер, правильно устанавливая адреса антенн и преобразуя данные CAT в CI-V и BCD. Кстати, это отчасти умеют делать и другие устройства от microHAM.
Приближаемся к проблеме. РЭВ-14 наиболее распространенных паспортов имеют напряжение питания в 27 вольт. Station Master же максимум коммутирует 24 и уходит в защиту при его превышении. Так же он может выдавать стандартные 13.8 на разъемы для коммутаторов.
С моими критериями к качеству изготовления, я пошел быстрым и практически промышленным путем. В магазине ПКФ Мегасервис есть проверенные временем промышленно-изготовленные умножители 12-28В, которые, собственно, я и купил. Сразу оговорюсь, под четыре канала я взял четыре умножителя (да, это совсем не дешево!) исходя из экономического расчета: для решения с четырьмя каналами коммутации затраты с использованием четырех умножителей практически аналогичные решению с одним умножителем и четырьмя оптореле при условии заказа изготовления печатной платы на заводе. При больщем количестве каналов, естественно, вариант с оптореле получается дешевле. Еще одним плюсом в пользу реализованного варианта стала скорость изготовления: в данном случае при почих равных - день на закупку, день на изготовление корпуса и день на пайку и конечную сборку.
На ходу в процессе изготовления даже улучшил некоторым образом задуманный дизайн, Кабель DB25-DB25 куплен готовый в Чип-Дип. Все элементы коммутации и корпус - тоже.
Вот что получилось:





Что касается самих реле, то, поскольку управляющие линии у них сделаны под пайку, я сделал им хвосты со стандартными 2-хпиновыми разъемами питания, на разъемах согласно рекомендациям RK3AWL поставил шунтирующие диоды 1N4007. Так же рекомендуемую им RC-цепь следует ставить на магистральную линию, так как ее номиналы должны учитывать сопротивление магистрали.

Пока все.

My last 20 QSO
Date Station Locator Band Mode RST R RST S
2012-05-07 06:46 UB3ABM RX3ACY LO06aa 2M FM 59 59
2012-05-07 06:44 UB3ABM RA3ARU LO06aa 2M FM 59 59
2012-05-07 06:14 UB3ABM RP67GK KO96bb 2M FM 59 59
2012-05-07 06:11 UB3ABM UA3CS KO86wb 2M FM 59 59
2012-05-07 06:11 UB3ABM UA3DAV LO06aa 2M FM 59 59
2012-05-07 06:07 UB3ABM RA3DKM KO96hk 2M FM 41 41
2012-04-22 18:34 UB3ABM RZ6HFR LN25cj 80M LSB 59 59
2012-04-22 18:29 UB3ABM RN3OY LO06aa 80M LSB 59 59
2012-04-22 18:10 UB3ABM R1AMB DB00aa 80M LSB 59 59
2012-04-22 18:10 UB3ABM R1ATK DB00aa 80M LSB 57 59
2012-04-12 16:08 UB3ABM RX3DHM LO06aa 40M LSB 59 58
2012-03-07 08:07 UB3ABM RK3ASQ LO06aa 40M LSB 59 59
2011-12-18 07:28 UB3ABM RA3VFF LO06aa 40M LSB 59 59
2011-11-25 17:35 UB3ABM UA3WDO LO06aa 80M LSB 59 59
2011-11-25 17:34 UB3ABM RA3WCQ LO06aa 80M LSB 59 59
2011-11-25 14:45 UB3ABM UR6IW KO50mm 80M LSB 49 56
2011-11-25 14:45 UB3ABM UT4QX KO50mm 80M LSB 59 59
2011-11-03 17:51 UB3ABM RD3ATR KO85qv 2M FM 59 59
2011-10-24 15:01 UB3ABM RU4PIA LO64jm 40M LSB 59 59
2011-10-24 15:00 UB3ABM RW4PIC LO64jm 40M LSB 59 59