PDA

Просмотр полной версии : Многофункциональная USB клавиатура


Alex_St
11.10.2013, 13:53
Выложу и я свой вариант 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/alexstankov/200664967/large/210360165.jpg (http://photo.qip.ru/users/alexstankov/200664967/210360165/) http://photo.qip.ru/photo/alexstankov/200664967/large/210360167.jpg (http://photo.qip.ru/users/alexstankov/200664967/210360167/)

Скрины конфигуратора:
http://photo.qip.ru/photo/alexstankov/200664967/large/210949481.gif (http://photo.qip.ru/users/alexstankov/200664967/210949481/)
http://photo.qip.ru/photo/alexstankov/200664967/large/210949482.gif (http://photo.qip.ru/users/alexstankov/200664967/210949482/)

Alex_St
11.10.2013, 13:56
Фотки готового устройства:
http://photo.qip.ru/photo/alexstankov/200664967/large/211063235.jpg (http://photo.qip.ru/users/alexstankov/200664967/211063235/) http://photo.qip.ru/photo/alexstankov/200664967/large/211063307.jpg (http://photo.qip.ru/users/alexstankov/200664967/211063307/)

Alex_St
11.10.2013, 13:58
Первый экземпляр благополучно нашел себе применение в моей машине. Как ни странно - все работает, и не глючит... Странно...
Единственное - пока не реализовывал автоповтор (правда, и не уверен, что буду реализовывать - пока он не пригодился).

На данный момент девайс управляет двумя устройствами:
1. Комп (ЮСБ - клава)
2. Круиз-контроль (через аналоговый выход).
Теперь в планах подключить его еще к бортовичку.

Alex_St
11.10.2013, 14:02
Вот все необходимое для повторения девайса.
Архив содержит:
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. Подробное описание формата тут (http://www.wheelremote.ru/useful.shtml?ir_nec), системы команд - тут (http://www.wheelremote.ru/rc.shtml?clarion_rcb-176).
- PortData/PortInit/PortTrig - управление 8ю бинарными цифровыми выходами. PortInit задает начальное значение на выходах. Так же он задает полярность реакции на PortData. Иными словами - PortData показывает - на какие каналы действует данная кнопка. PortTrig - задает триггерную реакцию на кнопку вместо обычной.
Данный механизм временный, ищу лучшие решения.
Пока сделано так:
void controlPortKeyPressed( UInt8 portData, UInt8 portInit, UInt8 portTrig )
{
UInt8 port = getPortState();

portInit &= portData; // mask only necessary pins
portTrig &= portData; // mask only necessary pins

releasedPortValue = port ^ portTrig; // this value will be applied when the key will be released

UInt8 set = ( portData ^ portInit ) & ~portTrig;
UInt8 reset = ~( portData & portInit ) | portTrig;

port |= set;
port &= reset;
port ^= portTrig;

setOutputsState( port );
}

Если что-то не понятно - на вопросы постараюсь ответить ).

Alex_St
11.10.2013, 14:05
Совсем забыл добавить. Аналоговые выходы расчитаны на работу с устройствами, имеющими диапазон входных напряжений 0...5В. Для устройств с напряжениями на входе до 3.3В необходимо поставить на выходе диод шоттки катодом к выходу девайса, а анодом ко входу управляемого устройства. Таким образом напряжение 5В на выходе девайса никоим образом не сможет помешать управляемому устройству ).

Фузы:
33144

Для работы конфигуратора требуется .Net framework 4.0. Скачать его можно тут (http://go.microsoft.com/fwlink/?LinkId=181012).

Alex_St
29.11.2013, 12:54
1. Т.к. протокол NEC для ИК пультов я реализовал по описанию в интернете, а не по реальному сигналу - в софт затесалась досадная ошибка - сигнал на выходе получился инвертированным. Как ни странно, но магнитолы Clarion и Alpine принимают свободно и прямой и инвертированный сигнал, поэтому с ними все работало хорошо. А вот с другими устройствами пришлось доработать прошивку. Результат в аттаче.

2. Т.к. у меня в системе появился новый монитор с контроллером на чипе RTD2660 - меня заинтересовало - а какой там протокол ИК пульта. Оказался - все тот же NEC 16бит адрес + 8 бит команда. Ес-сно, мне стало интересно снять его команды и проверить на моем девайсе. Все заработало успешно )
Результат (http://pccar.ru/showpost.php?p=277987&postcount=27):
Адрес: 0x6B86

Клавиша код команды
Video Select: 1B
Menu: 05
Power: 12
Left: 04
Right: 06
Mode Select: 15

Alex_St
29.11.2013, 12:57
Так же пробовали подключить девайс к головному устройству Alpine INE-W977BT.
Как ни странно - заработала с полутыка. Коды отсюда (http://www.wheelremote.ru/rc.shtml#Alpine) подошли, и альп с удовольствием скушал наши команды.
Девайс управлялся от пульта Sony X4S без каких либо доработок.

Так же такая девайсина уже полгода работает в моей машине, передавая команды от двух штатных нарульных пультов в компьютер (эмуляция мультимедийной HID клавиатуры), и круиз-контролем (управление резистивными кнопками). Нареканий пока не замечено.
Как я уже говорил, все конфигурируется при помощи компьютера через интерфейс USB.

prts
29.11.2013, 15:22
Не совсем понял, за что прошу извинения.
Можно ли данный дивайс использовать для управления магнитолой и carPC используя только рулевые кнопки?

Alex_St
29.11.2013, 18:49
Признаться, и я не совсем понял вопрос...
Управлять магнитолой и компом одновременно - да, можно.
Можно ли обойтись без тач-скрина - зависит от цели. Если все что надо можно сделать ограниченным числом кнопок клавиатуры - то возможно.

doneAlexandro
02.12.2013, 19:28
Отличная идея, отличная подборка ссылок!
Разве что не пытались ли вы найти описания проводных протоколов для ГУ? Меня вот сильно интересует Clarion.. Или же вы сразу решили работать с ИК?

Alex_St
02.12.2013, 19:33
Спасибо!
Пытался. И нашел. И реализовал )
Тут реализован именно проводной протокол. Отличается от ИК он только тем, что нет заполнения импульсов частотой 36кГц.
Вот (http://www.wheelremote.ru/useful.shtml?w_alpine) описалово, по которому я реализовал его. Сначала проверил обычным ИК пультом и фотоприемником. Подал сигнал с фотоприемника на вход магнитолы, предварительно закрыв фотоприемник магнитолы. Заработало!
Потом реализовал протокол в своем устройстве. Сигнал с устройства подал на вход проводного пульта Клариона. Так же заработало )

doneAlexandro
02.12.2013, 19:40
Спасибо! Вы сильно облегчили мне жизнь! А то полдня убил на поиск протокола, а нашел все, как обычно, на pccar))

Alex_St
02.12.2013, 20:22
Да, я тоже долго искал, пока случайно не наткнулся на тот ресурс.

doneAlexandro
08.12.2013, 23:00
Так как исходников прошивки нет, то можно вам пару оптимизаторских предложений? :)
1) Обработка в ПО ИК-фотодиода. Чтобы можно было всем этим хозяйством управлять при помощи пульта (настраивать, соответственно, в конфигураторе). Таким образом, на выходе будет адаптер к магнитоле для работы с любым ИК-пультом.
2) Возможность выбора управляемого устройства (например, магнитола или планшет) при нажатии кнопки, на которую уже назначено действие. Просто было бы удобно: нажимаешь кнопку "Source" на руле, магнитола переключается, в режим радио, и проводной пульт управляет уже магнитолой. Повторное нажатие - переход в AUX и управление планшетом. Правда тут еще придется настраивать пропуски (ибо в магнитолах обычно несколько источников звука переключаются циклически - CD, Radio, USB, AUX). Из пункта 2 вытекает пункт 3
3) Возможность назначить некторые действия строго для определенного устройства (например, клавиши громкости должны управлять только магнитолой, клавиша "Source" тоже).
Если честно, я прогу вашу не ставил еще на комп, потому, возможно, пункт 3 реализован?

Для меня, конечно, не проблема написать ПО для контроллера по моим требованиям самому, но ваш проект подкупил именно возможностью конфигурирования без правки ПО и перепрошивки. Написать подобное мне слабо) Потому я и пристаю с вопросами))

doneAlexandro
10.12.2013, 20:08
В общем ладно, свои вопросы снимаю. Протокол Клариона сделал на Ардуинке) Тоже неплохой вариант, если надо переназначить клавиши. Остальное - дело техники)

Alex_St
11.12.2013, 15:09
Сорри за поздний ответ..
1. По поводу ИК фотодиода - тоже думаю. Но не уверен пока что буду делать.
2. Такое уже есть - можно назначить кнопку, которая будет переключать банки кнопок. В конфигураторе она зовется "switch key" в кнопках стандартной клавиатуры. В таблице конфигурации есть столбец - номер банка. И соответственно - на каждую кнопку можно задать несколько действий. Например - для кнопка с сопротивлением 1кОм для первого банка будет слать Play в магнитофон, а для другого банка - жать что-то на компе.
При старте устройство использует первый банк. При нажатии на switch - переключается на второй (если есть), затем третий (если есть). Если следующего нет - переключаемся обратно на первый.
Есть правда, нюанс - из-за малого объема еепром и неоптимального расхода этого объема - максимальное кол-во действий не может превышать 22.
3. Если надо чтобы какая-то кнопка делала одно и тоже действие во всех банках - то просто делаешь для нее по строчке для каждого банка. Сказано сумбурно, но думаю - должно быть понятно.

П.с. мне не нравится уже как сделано конфигурирование. В будущем думаю сделать его по-другому, проще, и экономичнее в плане памяти. Но когда это будет - сказать не могу...

doneAlexandro
11.12.2013, 17:31
Спасибо!) Я все понял. На самом деле ваша разработка тянет на серийное изделие:
-просто для конечного пользователя;
-сложно в реализации при, в общем-то, единоразовой настройке. Да и если даже нужно вам что-то изменить, то уж вы-то, как разработчик, сделали бы это быстро)

Так что задумайтесь)

Alex_St
11.12.2013, 17:45
Продавать можно. Только желающих приобрести такое изделие не много.
Так, у меня сейчас лежат две свободные платы )

doneAlexandro
11.12.2013, 21:29
Это ресурс для энтузиастов. Продавайте на авито. Готовые подрбные девайсы от 2-х с лишним тыщ.

NiMar
02.07.2014, 15:40
Купил! Огромное спасибо!
Подключил к субару Форестер рулевые кнопки на магнитолу Alpine UTE-72BT и Nexus7. Завел два банка. одну кнопку задействовал на переключения банков. после выключения зажигания адаптер возвращается к первому банку, все как надо - с самого начала управление только магнитолой. Единственный недостаток: если компа в машине нет то надо нести ноут чтоб настроить быстро.
За такую цену лучше адаптера не купить.

Alex_St
02.07.2014, 15:45
Спасибо за добрый отзыв!
Пусть служит тебе долго и комфортно!

Помнится, ты еще круиз хотел завести туда...

NiMar
14.07.2014, 08:47
пока даже не знаю к чему его прикрутить:) родных кнопок на руле оказалось достаточно.

bolwoi
30.07.2014, 15:44
Добрый день, Alex_St.
Можно немного подробнее про управление магнитолой, (спецпротокол)? Вы его сами сниферили, или где-то надыбали?

Alex_St
30.07.2014, 15:57
Процитирую сам себя:

- rcAddr, rcCmd - задает команду для цифрового выхода управления магнитолами Clarion/Alpine. Подробное описание формата тут (http://www.wheelremote.ru/useful.shtml?ir_nec), системы команд - тут (http://www.wheelremote.ru/rc.shtml?clarion_rcb-176).

Alex_St
24.08.2014, 00:09
В конфигуратор и прошивку закралась интересная недоработка ). Оказалось, что нет возможности использовать кнопку с нулевым сопротивлением...
Теперь такая возможность есть.
Исправленная версия конфигуратора и прошивки в аттаче ).

ZyaK
25.12.2014, 10:09
Штука конечно интересная, но мне такой огромный функционал не нужен...
В не далеком будущем планирую менять руль, на нем будет около 10 кнопок, шлейф подрулевой со свободными 2-мя проводами, не поможете сделать что-то подобное на какой нибудь Тини45-й?
в программировании не силен, грубо говоря могу мограть светодиодами :)

Alex_St
25.12.2014, 11:06
Зачем из тини? Мега стоит столько же, места занимает лишь чуть чуть больше.
Использовать все не обязательно. Например, можно не распаивать аналоговые выходы, выход на магнитолу. А остальное - и с тиней, и с мегой будет одинаковым. Только вот софт, связанный с USB в тиню может не влезть. Да и ног скорее всего не хватит, т.к. для USB обязательно нужен внешний кварц.

ZyaK
25.12.2014, 11:22
Какие пины из вашей схемы лучше взять для подключения к резистивным кнопкам?
Если я правильно понимаю, то она сама должна будет увидеть кнопки? тоесть прошивку ковырять не надо?

Alex_St
25.12.2014, 11:25
Лучше всего сделать так, как нарисовано на схеме. Там есть конкретный вход для резистивных кнопок, и только его анализирует прошивка.

ZyaK
25.12.2014, 11:31
Это который Pc0 23-й пин и на схеме он "input" ?

Alex_St
25.12.2014, 11:34
Да, это он.

ZyaK
25.12.2014, 11:46
Ок, буду собирать. Контроллер какой пойдет ATMEGA8-16AU, ATMEGA8A-AU, ATMEGA8L-8AU ?

Alex_St
25.12.2014, 11:49
Надо быть чуть внимательней. Кварц на 12МГц, значит, ATMEGA8L-8AU точно не пойдет. Выбирай нужный тебе корпус (не забудь, что у дипа другая цоколевка), и выбирай проц с частотой не менее 12МГц.

ZyaK
26.12.2014, 09:15
Подскажите, вычитал, что вы её подключали к авео, можно ли подключить к тойоте старенькой 95-го года протокол Toyota data stream
подключал через переходник Usb-> Com, схема подключения в файле.
Работало через программу MyEngine

Может получится сделать пока я плату не протравил :)

Alex_St
26.12.2014, 11:29
По этому варианту ничего не скажу. У меня нет тойоты )
Мою плату можно подключить только к резистивным кнопкам.

ZyaK
26.12.2014, 12:53
Собрал, работает как надо! очень понравилось! спасибо!

Alex_St
25.09.2015, 20:04
Появилась странная проблема - после апгрейда материнки с Intel GCLF2 (Atom 330) на ASRock Q1900 (проц J1900) устройство начало периодически отваливаться.. Как правило, после гибернейта, но может отвалиться и в процессе работы. Стек USB использован VUsb. После отваливания диспетчер задач пишет "неизвестное устройство". Работа восстанавливается, если устройство физически отключить и снова включить, или перегрузить комп. Но не восстанавливается после гибернейта.

У кого-то есть мысли что могло поменяться в новой плате? Кстати, поведение одинаково и в портах USB2, и в портах USB3.

И еще - у кого-то есть ломанный USBLyzer или что-то подобное? Поставил в машине и дома USBLyzer, думал - триала хватит для решения проблемы, собрал логи в машине, а посмотреть их дома не смог. Прога говорит, что 64битная версия не может открыть логи, снятые 32битной версией.. Так триал и закончился, а я логи не увидел )))

Прям хоть переделывай на stm32 )))

awtoap
25.09.2015, 20:12
стэк VUSB глючный, точнее вся реализация железо+софт. Бери камень с аппаратным стеком, головняка будет меньше.

Alex_St
25.09.2015, 20:22
Это резервный вариант (stm32), но он требует много времени на разводку платы со всеми необходимыми мне фичами и разбирательством с его стеком USB...
Хотелось бы обойтись малой кровью )

awtoap
25.09.2015, 20:55
Возьми PIC18F14K50 замечательная штукенция и скачай компиль от Mikroe. Там есть многие готовые библиотеки.

YAM1966
25.09.2015, 21:13
Возьми PIC18F14K50 замечательная штукенция и скачай компиль от Mikroe. Там есть многие готовые библиотеки.

При практически одинаковой цене PIC18F14K50 и STM32F103C8T6 последний выигрывает, это все-же 32 битный ARM.
Бонусами уже идет то, что памяти в 4 раза больше, ОЗУ больше в 26 раз :spiteful: и тактовая в 6.
Компилятор от IAR уже имеет все нужные примеры для HID устройств.
А разводить особо ничего и не требуется, все уже развели (http://ru.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-arduino/32478120209.html) и детальки напаяли, только пользуй.

Alex_St
26.09.2015, 13:42
Неее.. пик не хочу. Уж лучше stm32. Но вопрс был не в том как сделать новое устройство, а в том как оживить имеющееся...

awtoap
26.09.2015, 15:23
А зря, буквально пару строк и готовые либы...готовая железка. Но соглашусь, что лучше уже STM32 осваивать. Это перспективней, не говоря уже о периферии за те же деньги. ПИК и АВР унылое гафно. Сам все не соберусь перелезть на АРМ, бо лень и нужно кучу док слюнявить, что бы элементарные вещи сделать ибо докуя всяких регистров дернуть нужно, чтобы ногой тупо пошевелить.

YAM1966
26.09.2015, 15:45
А зря, буквально пару строк и готовые либы...готовая железка. Но соглашусь, что лучше уже STM32 осваивать. Это перспективней, не говоря уже о периферии за те же деньги. ПИК и АВР унылое гафно. Сам все не соберусь перелезть на АРМ, бо лень и нужно кучу док слюнявить, что бы элементарные вещи сделать ибо докуя всяких регистров дернуть нужно, чтобы ногой тупо пошевелить.

Неееее, AVR еще как! Особенно atmega8a вне конкуренции. Такого можно на ней еще накосячить! :derisive:

awtoap
26.09.2015, 15:53
Накосячить можно на всех МК независимо какого они роду племени, но будущего у них уже нет. ПИКи выигрывают своей номенклатурой, хотя раньше сам сидел на АВР и сегодня в изделии юзаю Mega48. XMega пролетает с ценой по сравнению с АРМ.

Alex_St
26.09.2015, 17:53
Кстати, главная проблема в переходе на stm32 не софтовая, а аппаратная. Плата на меге, которая делает все что надо, уже есть. А вот для stm32 разводить и изготавливать надо. Первое займет немало времени, если делать хорошо, а второе - в единичном количестве я даже не знаю где уже и сделать хорошую двусторонку хотя бы третьего класса точности... Только от 3х дм2, но зачем мне столько...

awtoap
26.09.2015, 18:54
По поводу печатки можеш СЮДА (http://www.ani-pcb.com.ua/index.php?id=4680&show=20371) заглянуть. Заказывал у них прототипы. Ну или в китай где делают по 10 плат за адекватную цену, например ВОТ (http://www.itead.cc/open-pcb/pcb-prototyping.html).

Alex_St
28.09.2015, 13:25
А разводить особо ничего и не требуется, все уже развели (http://ru.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-arduino/32478120209.html) и детальки напаяли, только пользуй.
Так то оно так, но на этой плате не разведены 5В цифровые выходы, надо допаивать детальки для входов с защитой, не разведен мощный выход ЦАП, который нужен для моих целей.. Эта плата больше годится как борда для отладки решений.
Так что разводить все равно надо...

YAM1966
28.09.2015, 13:41
Так то оно так, но на этой плате не разведены 5В цифровые выходы, надо допаивать детальки для входов с защитой, не разведен мощный выход ЦАП, который нужен для моих целей.. Эта плата больше годится как борда для отладки решений.
Так что разводить все равно надо...
Ну, все что перечислили очень просто на обычной макетке напаять и пристегнуть борду :yes4:.

Alex_St
28.09.2015, 14:10
Это правда. Но это ж не наши методы... Устройство должно быть не только функциональным, но и красивым )))

YAM1966
28.09.2015, 14:39
Это правда. Но это ж не наши методы... Устройство должно быть не только функциональным, но и красивым )))

Эх... были времена когда и такое считалось красивым :derisive:
41133

Alex EX
13.10.2015, 18:12
Добрый день
Хочу повторить устройство, есть пара вопросов... Нет ли ошибок в схеме ? На вход используется один порт ADC в Меге их 8 возможно ли использовать еще ? На руле в Одиссее две группы кнопок (4 и 5)... Конфигуратор узнает клавиатуру только после подключения ?
Спасибо

Alex_St
13.10.2015, 21:15
Привет!
В схеме ошибок быть не должно. По-крайней мере быть могут, но я их за время эксплуатации не выявил )
использовать еще можно. Только нужно ли? У меня на руле используются 10кнопок, все уживаются нормально. Для использования двух и более линий нужно менять софт модуля и конфигуратора. Стоит ли оно того? Не уверен.
В конфигураторе можно вводить сопротивления кнопок, напряжения на кнопках. Но увы, у резисторов есть погрешности, у ацп тоже. Можно поставить допуски побольше, но лучше прощелкать саму клаву и снять ее параметры устройством. ИМХО.

Alex EX
14.10.2015, 11:47
Спасибо за быстрый ответ. Вопрос по фьюзам, у меня как на рисунке, как нужно поставить правильно ? (Мегу первый раз держу в руках).
В еепром шьется что-то ?

http://pccar.ru/attachment.php?attachmentid=41281&stc=1&d=1444808735

Alex EX
14.10.2015, 13:57
Контроллер прошил. Фьюзы поставил вот так (не уверен что правильно...) пока не шил. Подскажите как правильно ?

http://pccar.ru/attachment.php?attachmentid=41284&stc=1&d=1444816604

Alex EX
15.10.2015, 17:44
Почему то не запустилось на win7x64 ? (Неизвестное устройство). Но опозналось на ХР 32. Завтра подстыкую кнопки...

Все заработало... Подхватились все девять кнопок, две линейки 4 и 5 пришлось слить в одну подтянуть к питанию.
Спасибо автору, хороший проект!

Alex_St
19.10.2015, 10:17
Сорри, что долго не выходил на связь..
Я рад, что все заработало! Я так понял, на вин7 тоже заработало? Если да - почему не работало?

Alex EX
19.10.2015, 11:20
Сорри, что долго не выходил на связь..
Я так понял, на вин7 тоже заработало? Если да - почему не работало?
Добрый день
Нет, под win7 говорит "устройство сообщило о проблемах и было отключено..."
Еще есть вопрос по функционалу - какой командой в конфигураторе выдать в порт 5 вольт или 0 ? Подскажите...
Забыл добавить, рабочее применение устройства - планшет на андроиде, управление без тача.

Alex_St
19.10.2015, 12:03
Цифровые выходы (8 штук) - это просто 8мибитный порт атмеги.
В конфигураторе есть три поля с неочевидными названиями и функционалом: Port Data, Port Init, Port Trig. В них записываются шестнадцатиричные значения. Каждый бит значения - это ножка порта.
Работают они следующим образом:
1. При старте в порт записывается значение из Port Init. В текущей реализации для всех кнопок должно быть установлено одинаковое значение.
2. Биты в PortData показывает какие каналы будут меняться при нажатии на кнопку.
3. Биты в PortTrig показывают какие каналы будут меняться обратно при отпускании кнопки (0), а какие не будут (1).

Пример: у нас на канал 1 подключены противотуманки. Изначальное состояние "выключено" соответствует 0 на выходе. Каждое нажатие кнопки должно менять состояние противотуманок. Иными словами - одно нажатие - включить, второе - выключить.
А на канал 2 у нас подключен насос форсунок омывателя фар. Причем по схемотехнике схемы управления выключенное состояние - это 1 на выходе порта. При этом нам надо сделать так, чтобы при нажатии на кнопку он включался, а при отпускании выключался.
Как такое сделать...
Биты в порту нумеруются так: 7 6 5 4 3 2 1 0. Нас интересуют биты 1 и 2 (второй и третий справа).
Т.к. начальное состояние бита 1 должно быть 0, а бита 2 - 1, то запишем регистр инит: х х х х х 1 0 х, где х - это любое состояние. Примем, что неиспользуемые порты будут изначально выключены (0), поэтому получим двоичное значение 00000101. В шестнадцатиричном виде это будет 0x05. Это значение запишем в PortInit для всех кнопок.

Далее - кнопка противотуманок влияет только на канал 1, а насоса - только на канал 2. Поэтому запишем для них значения регистра PortData:
ПТФ: 00000010 = 0x02
насос: 00000100 = 0x04

Ну и что делать при нажатии на кнопку: ПТФ управляется триггерно (опрокидывается при каждом нажатии), а насос - нет (включается при нажатии, выключается при отпускании). Поэтому запишем в PortTrig следующие значения:
ПТФ: 00000010 = 0x02
насос: 00000000 = 0x00.

Вот где-то так..
Понимаю, что сумбурно и не очевидно, но это было простейшим вариантом при реализации, и т.к. настраивается раз в жизни - уже в этом проекте так и останется )))

Alex EX
19.10.2015, 13:55
Понял, спасибо...
Просто пробовал шевелить PD5 (PORT5) 9pin не шевелится, а вот PC1 PC2 отзываются на 0х01 0х02. Завел лампочку на РС1 теперь при нажатии любой кнопки загорается, показывает нажатие ... (PD и PC вроде разные порты ?)

Мысль то простая, ронять планшет в ОТГ по нажатию любой клавиши...

Alex_St
19.10.2015, 14:16
Посмотрел исходники - у меня ошибка в работе порта D. Он инициализирован как вход. Моя лажа )))
Исправление - в аттаче. Но я его не проверял, уже не на чем. Поэтому напиши, плз, заработает или нет )

Alex EX
19.10.2015, 18:27
Да, пока у меня все на столе проверю...

DenisK
21.10.2015, 20:49
Покурил тему, буду собирать себе в Одика (RB1 Abs) тоже такое!
а кнопки подрулевые на разных шлейфах? (там где голосовая связь и телефонная книга)
и попутно еще вопрос - какая погрешность по сопротивлениям? из опыта?!

ОффТоп: первый мой пост на ПиСиКаре за 5 лет ))) только читателем был ,тут решил что пора выходить из сумрака чтивого)))

Alex_St
21.10.2015, 22:34
Насчет Одика ничего не скажу, а диапазон допустимых значений ты можешь задать таким, каким хочешь. Там в конфигураторе настраиваются среднее значение и максимальное отклонение.

Alex EX
22.10.2015, 08:28
Я увеличил защитный интервал до 15 , ложных срабатываний нет, все четко... У Одиссея два шлейфа уходят на руль, я соединил их в один. Вот схема http://pccar.ru/attachment.php?attachmentid=41356&stc=1&d=1445495008
http://pccar.ru/attachment.php?attachmentid=41357&stc=1&d=1445495107

Alex_St
22.10.2015, 10:28
Одно но - и там и там есть резистор на 470 Ом. Поэтому без перепайки не обойтись.

Alex EX
22.10.2015, 10:45
Схемы срисованы с реальных кнопок, разница в том что резисторы стоят последовательно и значения не повторяются! Вот мои значения напряжений при паралельном включении 4.63 4.29 4.06 3.19 2.97 2.18 1.6 0.88 0.45 и да я изменил схему подтянув все к 5В через 470 Ом и убрал оба 10кОм иначе больше 2.6Вольт при 5В питании получить с кнопок в таком включении нельзя (так они растянуты по 0-5В) Можно вообще не убирать 10кОм и подключить к 12В но питание в машине может плавать в больших пределах чем на шине USB планшета. Результат такой - ни одна кнопка не нажата на выходе 5В ровно, нажата любая напряжение меняется.
Сопротивления разные, в первом 100+270+470=840 Ом во втором шлейфе 47+180+470=697 Ом.

Alex_St
22.10.2015, 10:50
Да, ты прав! Чет я спросоння не подумал об этом )

Alex EX
31.10.2015, 11:40
Почему то периодически слетают данные в ЕЕПРОМ ? Меняются значения или пропадает одна из кнопок, при чтении иногда дает wrong version! с чем связано не пойму, системы нет. Переделал на отдельное питание не от хоста и все равно слетает, где можно посмотреть ? Может сбросовую цепь увеличить номиналы ? Поставил все в машину и второй день обкатываю. Был бы конфигуратор на андроиде можно было поправить, а так придется нотик с ХР тащить в машину что дико не удобно...

Alex_St
31.10.2015, 12:11
Попробуй включить brown-out detector в фузах. Может помочь.

Alex EX
31.10.2015, 19:39
Попробуй включить brown-out detector в фузах. Может помочь.
Попробую, какой уровень поставить 2.7В или 4.0В ?

Alex_St
31.10.2015, 23:34
Все равно. Но в пятивольтовой схеме, думаю, лучше 4.

Alex EX
02.11.2015, 10:08
Почему то не запустилось на win7x64 ? (Неизвестное устройство). Но опозналось на ХР 32.
Подключилось и к win7x64 но через хаб, видимо привередливо к УСБ портам или к длинне проводов и к питанию с них.

Alex EX
02.11.2015, 12:04
Вроде допилил, все причесал и поставил в машину... Пришлось добавить зарядку на планшет и ключи перехода в хост. Погоняю, потестирую...

zGW8m5rm9es

Alex_St
02.11.2015, 12:13
Активация браун-аут детектора помогла?

Alex EX
02.11.2015, 12:17
Активация браун-аут детектора помогла?
Пока не проверил... Отпишусь по факту. В машине прошить не получается, надо снимать и тащить на програматор. Дождусь сбоя и тогда сниму, буду разбираться...

Alex EX
13.11.2015, 19:03
Перешил сегодня, заметил что сбои происходит при заводке когда активен хост. За 10 дней работы два сбоя. Буду тестить дальше...

Alex_St
13.11.2015, 19:33
Любопытненько...
Давай подробнее - что происходит после сбоя? Теряется вся еепром или только кусок?
Расшифруй подробнее фразу "сбои происходит при заводке когда активен хост", плз.

Alex EX
13.11.2015, 21:16
Попробую... меняются данные в еепром, иногда частично, пропадает например назначенная кнопка или прописывается левый код на rcAdd rcCmd или левое значение напряжения на кнопку иногда не читается устройство вообще выдавая Wrong Version! У меня планшет с одним портом и через него еще и зарядка. Сейчас сделано так если АСС включен зарядка выключена и контакт 4(host) на земле идет управление с кнопок. Если АСС выключен 4 пин отключен и включена зарядка. Процесс перехода в хост около 3-4 сек и если за это время успел завести мотор все работает. Если заводишь когда хост активен может сбойнуть. Получается момент когда два УСБ устройства подключены паралельно к одним проводам.

P.S. За 4 дня тестов положить не удалось, видимо помогла активация... Планирую увеличить количество кнопок в два раза с чем и вопрос - банков всего два или все же три ?

Alex EX
18.11.2015, 10:42
Сегодня заметил странное, ставлю в конфигураторе банк 2 значение ADC 680 diff 30 записываю в устройство , считываю устройство банк 1 ADC 1023 diff 0... Сохраняю изменения в файл, читаю тоже самое банк 1 ADC 1023 diff 0.

Alex_St
18.11.2015, 12:49
В конфигураторе найден баг. Исправленный конфигуратор в первом сообщении темы.

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

Но подумаем! Может, что-то совместно и придумаем.

Alex_St
18.11.2015, 13:11
Планирую увеличить количество кнопок в два раза с чем и вопрос - банков всего два или все же три ?

Количество банков ограничено размером eeprom меги и неоптимальным расположением данных в нем. На данный момент может быть заведено не более 25 строк в конфигураторе. Дело усугубляется тем, что каждая кнопка должна быть описана в каждом банке, даже если ее функция одинакова во всех банках, включая кнопку переключения банков. Поэтому расход еепром очень неоптимален.
Я давно уже порывался переделать это все на более красивый и менее жрущий вариант, но в принципе, меня и так все устраивает, и тратить на это время желания нет. Да и возможности тоже...

Alex EX
18.11.2015, 13:35
ОК, похоже победа... за неделю испытаний положить не удалось. Отдал одну кнопку на переключение банков взамен получил еще три и того 11 для управления. Планшет ездит в машине но можно отключить и унести домой, т.е. используются только штатные разьемы и конструкция не нарушена. При выключеном зажигании заряжается, при зарядке 100% встроенный контроллер отключает заряд. Во время езды переключается в хост и работает управление с кнопок. Пока все работает как задуманно и мне нравится...
У меня 18 строк, кнопки play\stop track+\- vol+\- enter esc влево вправо вверх вниз позволяют выбрать любое приложение запустить свернуть выбрать музыку или клип запустить видеорегистратор или навигацию и не тянуться при этом к планшету.

Alex_St
18.11.2015, 13:49
Я рад, что все работает как надо. Если что - не стесняйся писать, будем разбираться, хоть и не факт, что быстро.

Можешь выложить фото получившихся платы и кнопок? Любопытно как это все выглядит )

Alex EX
18.11.2015, 14:38
Плата кнопок рядом управляеммая зарядка +5В
http://pccar.ru/attachment.php?attachmentid=41693&stc=1&d=1447842905
Кнопки на руле
http://pccar.ru/attachment.php?attachmentid=41694&stc=1&d=1447842870
Общий вид всего
http://pccar.ru/attachment.php?attachmentid=41695&stc=1&d=1447842870

Alex_St
18.11.2015, 15:03
Вижу потенциальную проблему. В меге ноги питалова расположены попарно - земля и питалово. Между ними обязательно должен стоять керамический кондер около 100nF для сглаживания питалова. Если его нет - то поведение меги может быть довольно нестабильным. На плате я вижу только два керамических кондера, и оба в цепи кварца, а не по питанию.
Рекомендую посмотреть как это сделано на моей плате, и добавить себе тоже. Это может быть причиной сбоев при запуске мотора.
Корпус кварца заземлен?

Вообще - разводка земли и питалова - это довольно таки нетривиальная тема, особенно в условиях помех, как в авто.

А что питает 78L08?

Alex EX
18.11.2015, 15:46
Две емкости под 78L05 их не видно, одна на ADC ref вторая на питании, эта плата отладочная, в машине вторая редакция на ней добавлен ключ на полевике для перевода планшета в хост и обвязка для выключения зарядки. В последней редакции все запитано: от бортовой сети - зарядка на LM2569, от АСС -78L08 потом 1к и стаб 5.1В на ноге АЦП в таком варианте не плавает напряжение на кнопках при включенном выключенном двигле и при просадке при заводке, после 78L08 питание 78L05 на АТМегу. Пробовал питать от планшета но там по мере зарядки меняется напряжение 4.92-5.1В для кнопок великоват разброс. Такой вариант мне показался более стабильным...

Alex_St
18.11.2015, 15:53
У меня плата питается через 78L05 напрямую от 12В. в доп стабе 78L08 смысла не вижу. Ес-сно, 7805 обязательна!
Но речь была о другом. Керамические кондеры обязательно ставить как можно ближе к ногам питания. Потому что импульсные токи от меги могут быть весьма немаленькие, и на дорожках возможны немалые просадки, связанные с сопротивлением и индуктивностью дорог, приводящие к глюкам.

Alex EX
18.11.2015, 15:58
Мысль понял , учту...
Емкость добавил прямо на ноги между 3 и 4.

max_64rus
15.02.2016, 11:39
Собрал данное устройство, собирал не всю схему а только под резистивные кнопки. Завелось с полпинка, все работает, проверено в windows xp, там же настроены мультимедийные кнопки. Потом опробовано на телефоне и планшете и тоже все функционирует, в боевых условиях в машине не проверял. Огромное спасибо создателю данного устройства Alex_St за его труды, и Alex EX за то что навел меня на эту тему.