![]() |
Многофункциональная USB клавиатура
Вложений: 1
Выложу и я свой вариант USB клавиатуры с расширенной функциональностью )
Дело было вечером. Заняться было чем, но в результате установки круиз-контроля в мою машину оказалось, что у меня есть два свободных провода из недр руля наружу через специализированную контактную группу в виде спирали. А у меня в руле уже давно сидят два ИК пульта управления компьютером и магнитолой. Плюс еще проводной пульт управления Круиз-Контролем. Так получается, что в силу ИК принципа передачи сигнала на фотоприемники компа и магнитолы - при незначительном повороте руля (больше 20градусов) - сигнал перестает достигать цели. А тут еще Костя740 поделился информацией о либе V-USB. В общем - было принято решение начать работы по передаче команд с руля по проводам. В качестве системы кодирования были выбраны резистивные кнопки. Т.е. нажатая кнопка определяется по сопротивлению между двумя проводами. Подключать к компьютеру было решено по USB, эмулируя стандартную и мультимедийную клавиатуры. Но тут полет мысли опередил разум, и понеслось.... Захотелось управлять не только компьютером, но и прочими устройствами - магнитолой (спец протокол), бортовичком (аналог), круизом (аналог), прочими девайсами. Девайс умеет следующее: 1. Принимает команды с резистивного пульта (до 15 кнопок). Измеряет напряжение и считает сопротивление цепи. На любую из кнопок можно повесить любую комбинацию из следующих функций: 2. Определяется компьютером как USB клавиатура. Может посылать в комп любые нажатия на кнопки. При этом можно задействовать alt, ctrl, shift левые и правые в любых комбинациях. На данный момент можно посылать только одну стандартную кнопку в один момент(+ alt/shift/ctrl). Или одну мультимедийную кнопку. 3. Позволяет управлять до 8ми внешними линиями. При этом можно задавать режим работы выхода - либо просто при нажатии кнопки подать +5В или 0В на выход, либо триггерный выход (нажал один раз - появилось напряжение, нажал второй - пропало). 4. Управлять двумя аналоговыми устройствами - магнитола, бортовик, круиз контроль. Т.е. всем, что управляется такими же аналоговыми кнопками. 5. Управлять одним устройством (магнитолой), работающим по проводам и использующим стандартным протоколом проводного ДУ от Clarion/Alpine. 6. Использовать два банка кнопок для эмуляции управления разными устройствами при помощи одних и тех же кнопок. Кнопку переключения между банками можно задавать программно. 7. Все вышеперечисленные функции можно конфигурировать на лету при помощи програмки-конфигуратора для PC через тот же USB интерфейс. 8. Девайс может работать и без компьютера, если надо управлять, скажем, магнитолой. 9. Так же конфигуратор позволяет показывать на лету сопротивление, напряжение, и код нажатой кнопки, что удобно для конфигурирования. 10. Питание устройства - от USB или от борт сети автомобиля. Фото макета: http://photo.qip.ru/photo/alexstanko.../210360165.jpg http://photo.qip.ru/photo/alexstanko.../210360167.jpg Скрины конфигуратора: http://photo.qip.ru/photo/alexstanko.../210949481.gif http://photo.qip.ru/photo/alexstanko.../210949482.gif |
Фотки готового устройства:
http://photo.qip.ru/photo/alexstanko.../211063235.jpg http://photo.qip.ru/photo/alexstanko.../211063307.jpg |
Первый экземпляр благополучно нашел себе применение в моей машине. Как ни странно - все работает, и не глючит... Странно...
Единственное - пока не реализовывал автоповтор (правда, и не уверен, что буду реализовывать - пока он не пригодился). На данный момент девайс управляет двумя устройствами: 1. Комп (ЮСБ - клава) 2. Круиз-контроль (через аналоговый выход). Теперь в планах подключить его еще к бортовичку. |
Вложений: 2
Вот все необходимое для повторения девайса.
Архив содержит: 1. Прошивка девайса в виде hex файла 2. Схема и плата в формате PCad2006 3. Приложение для конфигурирования 4. Моя текущая конфигурация как пример использования Вложение 33142 Назначение элементов интерфейса программы: 1. Кнопки прочитать/сохранить/сравнить в описании не нуждаются ) 2. Слева снизу три радиокнопки - ADC, Voltage, Resistance. Они переключают варианты отображения данных в таблице. Рядом с ними три текущих значения, которые раппортует нам устройство. 3. Кнопка "Установить значение" записывает текущее значение из одного из значений слева от нее в активную строку. Записывает только в случае если вся строка выделена. Таким образом можно быстро записать сопротивления всех подключенных кнопок в таблицу. 4. Таблица содержит значения сопротивлений кнопок, и реакцию на нажатие каждой кнопки. Одна строка - одна аналоговая кнопка. Все варианты реакций независимы и могут работать параллельно. Исключение - параллельно не могут работать клавиши стандартной и мультимедийной клавиатур. Поля таблицы: - Bank - номер банка кнопок. Есть возможность записывать до трех банков кнопок в устройство. Всего не более 22х кнопок. Переключение между банками - при помощи кнопки, которая назначена как Standard: Switch. Переключение происходит по кольцу. - ADC_Val/Voltage/Resistance - один из вариантов отображения значения сопротивления кнопки. - ADC_Diff/Volt Diff/Res_Diff - размер корридора значений. Кнопка считается нажатой, если значение укладывается в диапазон (Resistence - Res_Diff)...(Resistence + Res_Diff). - Left Ctrl/Left Shift/Left Alt/Left Win/Right Ctrl/Right Shift/Right Alt/Right Win - Данные события будут посланы в комп при нажатии на кнопку. - Key - Клавиша стандартной клавиатуры, которая будет нажата при нажатии соответствующую аналоговую кнопку. - mmKey - клавиша мультимедийной клавиатуры, которая будет нажата при нажатии на соответствующую аналоговую кнопку. - MM Key Repeat - пока не реализовано. В будущем возможно будет автоповтор для мультимедийных клавиш. - Dac Out1/Dac Volt1/Dac Res1 - управляют первым аналоговым выходом. Принцип такой: по-умолчанию на выходе максимальное напряжение. При нажатии на кнопку на выходе будет выставлено напряжение соответственно таблице. Пересчет в сопротивление идет из расчета, что на приемном конце сопротивление на плюс 4.7к. Рекомендую смотреть на напряжение, а не на сопротивление. Примечание: т.к. устройство питается от USB через диод шоттки - то максимальное напряжение на выходе будет меньше 5В (примерно 4.85В). Остальные напряжения уменьшатся так же пропорционально. Если не предусматривается питание от внешнего источника питания - рекомендую диод шоттки на входе закоротить. - Dac Out2/Dac Volt2/Dac Res2 - то же самое, только для второго аналогового канала. - rcAddr, rcCmd - задает команду для цифрового выхода управления магнитолами Clarion/Alpine. Подробное описание формата тут, системы команд - тут. - PortData/PortInit/PortTrig - управление 8ю бинарными цифровыми выходами. PortInit задает начальное значение на выходах. Так же он задает полярность реакции на PortData. Иными словами - PortData показывает - на какие каналы действует данная кнопка. PortTrig - задает триггерную реакцию на кнопку вместо обычной. Данный механизм временный, ищу лучшие решения. Пока сделано так: Код:
void controlPortKeyPressed( UInt8 portData, UInt8 portInit, UInt8 portTrig ) |
Вложений: 1
Совсем забыл добавить. Аналоговые выходы расчитаны на работу с устройствами, имеющими диапазон входных напряжений 0...5В. Для устройств с напряжениями на входе до 3.3В необходимо поставить на выходе диод шоттки катодом к выходу девайса, а анодом ко входу управляемого устройства. Таким образом напряжение 5В на выходе девайса никоим образом не сможет помешать управляемому устройству ).
Фузы: Вложение 33144 Для работы конфигуратора требуется .Net framework 4.0. Скачать его можно тут. |
Вложений: 1
1. Т.к. протокол NEC для ИК пультов я реализовал по описанию в интернете, а не по реальному сигналу - в софт затесалась досадная ошибка - сигнал на выходе получился инвертированным. Как ни странно, но магнитолы Clarion и Alpine принимают свободно и прямой и инвертированный сигнал, поэтому с ними все работало хорошо. А вот с другими устройствами пришлось доработать прошивку. Результат в аттаче.
2. Т.к. у меня в системе появился новый монитор с контроллером на чипе RTD2660 - меня заинтересовало - а какой там протокол ИК пульта. Оказался - все тот же NEC 16бит адрес + 8 бит команда. Ес-сно, мне стало интересно снять его команды и проверить на моем девайсе. Все заработало успешно ) Результат: Код:
Адрес: 0x6B86 |
Так же пробовали подключить девайс к головному устройству Alpine INE-W977BT.
Как ни странно - заработала с полутыка. Коды отсюда подошли, и альп с удовольствием скушал наши команды. Девайс управлялся от пульта Sony X4S без каких либо доработок. Так же такая девайсина уже полгода работает в моей машине, передавая команды от двух штатных нарульных пультов в компьютер (эмуляция мультимедийной HID клавиатуры), и круиз-контролем (управление резистивными кнопками). Нареканий пока не замечено. Как я уже говорил, все конфигурируется при помощи компьютера через интерфейс USB. |
Не совсем понял, за что прошу извинения.
Можно ли данный дивайс использовать для управления магнитолой и carPC используя только рулевые кнопки? |
Признаться, и я не совсем понял вопрос...
Управлять магнитолой и компом одновременно - да, можно. Можно ли обойтись без тач-скрина - зависит от цели. Если все что надо можно сделать ограниченным числом кнопок клавиатуры - то возможно. |
Отличная идея, отличная подборка ссылок!
Разве что не пытались ли вы найти описания проводных протоколов для ГУ? Меня вот сильно интересует Clarion.. Или же вы сразу решили работать с ИК? |
Спасибо!
Пытался. И нашел. И реализовал ) Тут реализован именно проводной протокол. Отличается от ИК он только тем, что нет заполнения импульсов частотой 36кГц. Вот описалово, по которому я реализовал его. Сначала проверил обычным ИК пультом и фотоприемником. Подал сигнал с фотоприемника на вход магнитолы, предварительно закрыв фотоприемник магнитолы. Заработало! Потом реализовал протокол в своем устройстве. Сигнал с устройства подал на вход проводного пульта Клариона. Так же заработало ) |
Спасибо! Вы сильно облегчили мне жизнь! А то полдня убил на поиск протокола, а нашел все, как обычно, на pccar))
|
Да, я тоже долго искал, пока случайно не наткнулся на тот ресурс.
|
Так как исходников прошивки нет, то можно вам пару оптимизаторских предложений? :)
1) Обработка в ПО ИК-фотодиода. Чтобы можно было всем этим хозяйством управлять при помощи пульта (настраивать, соответственно, в конфигураторе). Таким образом, на выходе будет адаптер к магнитоле для работы с любым ИК-пультом. 2) Возможность выбора управляемого устройства (например, магнитола или планшет) при нажатии кнопки, на которую уже назначено действие. Просто было бы удобно: нажимаешь кнопку "Source" на руле, магнитола переключается, в режим радио, и проводной пульт управляет уже магнитолой. Повторное нажатие - переход в AUX и управление планшетом. Правда тут еще придется настраивать пропуски (ибо в магнитолах обычно несколько источников звука переключаются циклически - CD, Radio, USB, AUX). Из пункта 2 вытекает пункт 3 3) Возможность назначить некторые действия строго для определенного устройства (например, клавиши громкости должны управлять только магнитолой, клавиша "Source" тоже). Если честно, я прогу вашу не ставил еще на комп, потому, возможно, пункт 3 реализован? Для меня, конечно, не проблема написать ПО для контроллера по моим требованиям самому, но ваш проект подкупил именно возможностью конфигурирования без правки ПО и перепрошивки. Написать подобное мне слабо) Потому я и пристаю с вопросами)) |
В общем ладно, свои вопросы снимаю. Протокол Клариона сделал на Ардуинке) Тоже неплохой вариант, если надо переназначить клавиши. Остальное - дело техники)
|
Сорри за поздний ответ..
1. По поводу ИК фотодиода - тоже думаю. Но не уверен пока что буду делать. 2. Такое уже есть - можно назначить кнопку, которая будет переключать банки кнопок. В конфигураторе она зовется "switch key" в кнопках стандартной клавиатуры. В таблице конфигурации есть столбец - номер банка. И соответственно - на каждую кнопку можно задать несколько действий. Например - для кнопка с сопротивлением 1кОм для первого банка будет слать Play в магнитофон, а для другого банка - жать что-то на компе. При старте устройство использует первый банк. При нажатии на switch - переключается на второй (если есть), затем третий (если есть). Если следующего нет - переключаемся обратно на первый. Есть правда, нюанс - из-за малого объема еепром и неоптимального расхода этого объема - максимальное кол-во действий не может превышать 22. 3. Если надо чтобы какая-то кнопка делала одно и тоже действие во всех банках - то просто делаешь для нее по строчке для каждого банка. Сказано сумбурно, но думаю - должно быть понятно. П.с. мне не нравится уже как сделано конфигурирование. В будущем думаю сделать его по-другому, проще, и экономичнее в плане памяти. Но когда это будет - сказать не могу... |
Спасибо!) Я все понял. На самом деле ваша разработка тянет на серийное изделие:
-просто для конечного пользователя; -сложно в реализации при, в общем-то, единоразовой настройке. Да и если даже нужно вам что-то изменить, то уж вы-то, как разработчик, сделали бы это быстро) Так что задумайтесь) |
Продавать можно. Только желающих приобрести такое изделие не много.
Так, у меня сейчас лежат две свободные платы ) |
Это ресурс для энтузиастов. Продавайте на авито. Готовые подрбные девайсы от 2-х с лишним тыщ.
|
Купил! Огромное спасибо!
Подключил к субару Форестер рулевые кнопки на магнитолу Alpine UTE-72BT и Nexus7. Завел два банка. одну кнопку задействовал на переключения банков. после выключения зажигания адаптер возвращается к первому банку, все как надо - с самого начала управление только магнитолой. Единственный недостаток: если компа в машине нет то надо нести ноут чтоб настроить быстро. За такую цену лучше адаптера не купить. |
Спасибо за добрый отзыв!
Пусть служит тебе долго и комфортно! Помнится, ты еще круиз хотел завести туда... |
пока даже не знаю к чему его прикрутить:) родных кнопок на руле оказалось достаточно.
|
Добрый день, Alex_St.
Можно немного подробнее про управление магнитолой, (спецпротокол)? Вы его сами сниферили, или где-то надыбали? |
|
Вложений: 1
В конфигуратор и прошивку закралась интересная недоработка ). Оказалось, что нет возможности использовать кнопку с нулевым сопротивлением...
Теперь такая возможность есть. Исправленная версия конфигуратора и прошивки в аттаче ). |
Штука конечно интересная, но мне такой огромный функционал не нужен...
В не далеком будущем планирую менять руль, на нем будет около 10 кнопок, шлейф подрулевой со свободными 2-мя проводами, не поможете сделать что-то подобное на какой нибудь Тини45-й? в программировании не силен, грубо говоря могу мограть светодиодами :) |
Зачем из тини? Мега стоит столько же, места занимает лишь чуть чуть больше.
Использовать все не обязательно. Например, можно не распаивать аналоговые выходы, выход на магнитолу. А остальное - и с тиней, и с мегой будет одинаковым. Только вот софт, связанный с USB в тиню может не влезть. Да и ног скорее всего не хватит, т.к. для USB обязательно нужен внешний кварц. |
Какие пины из вашей схемы лучше взять для подключения к резистивным кнопкам?
Если я правильно понимаю, то она сама должна будет увидеть кнопки? тоесть прошивку ковырять не надо? |
Лучше всего сделать так, как нарисовано на схеме. Там есть конкретный вход для резистивных кнопок, и только его анализирует прошивка.
|
Это который Pc0 23-й пин и на схеме он "input" ?
|
Да, это он.
|
Ок, буду собирать. Контроллер какой пойдет ATMEGA8-16AU, ATMEGA8A-AU, ATMEGA8L-8AU ?
|
Надо быть чуть внимательней. Кварц на 12МГц, значит, ATMEGA8L-8AU точно не пойдет. Выбирай нужный тебе корпус (не забудь, что у дипа другая цоколевка), и выбирай проц с частотой не менее 12МГц.
|
Вложений: 2
Подскажите, вычитал, что вы её подключали к авео, можно ли подключить к тойоте старенькой 95-го года протокол Toyota data stream
подключал через переходник Usb-> Com, схема подключения в файле. Работало через программу MyEngine Может получится сделать пока я плату не протравил :) |
По этому варианту ничего не скажу. У меня нет тойоты )
Мою плату можно подключить только к резистивным кнопкам. |
Собрал, работает как надо! очень понравилось! спасибо!
|
Появилась странная проблема - после апгрейда материнки с Intel GCLF2 (Atom 330) на ASRock Q1900 (проц J1900) устройство начало периодически отваливаться.. Как правило, после гибернейта, но может отвалиться и в процессе работы. Стек USB использован VUsb. После отваливания диспетчер задач пишет "неизвестное устройство". Работа восстанавливается, если устройство физически отключить и снова включить, или перегрузить комп. Но не восстанавливается после гибернейта.
У кого-то есть мысли что могло поменяться в новой плате? Кстати, поведение одинаково и в портах USB2, и в портах USB3. И еще - у кого-то есть ломанный USBLyzer или что-то подобное? Поставил в машине и дома USBLyzer, думал - триала хватит для решения проблемы, собрал логи в машине, а посмотреть их дома не смог. Прога говорит, что 64битная версия не может открыть логи, снятые 32битной версией.. Так триал и закончился, а я логи не увидел ))) Прям хоть переделывай на stm32 ))) |
стэк VUSB глючный, точнее вся реализация железо+софт. Бери камень с аппаратным стеком, головняка будет меньше.
|
Это резервный вариант (stm32), но он требует много времени на разводку платы со всеми необходимыми мне фичами и разбирательством с его стеком USB...
Хотелось бы обойтись малой кровью ) |
Возьми PIC18F14K50 замечательная штукенция и скачай компиль от Mikroe. Там есть многие готовые библиотеки.
|
Часовой пояс GMT +4, время: 09:54. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot