Показать сообщение отдельно
Старый 11.10.2013, 14:02   #4
Alex_St
Старший Пользователь
 
Аватар для Alex_St
 
Регистрация: 09.04.2008
Возраст: 44
Город: Одесса
Регион: Украина
Машина: Chevrolet Aveo-II LS 2008
Сообщений: 896
Alex_St is a name known to allAlex_St is a name known to allAlex_St is a name known to allAlex_St is a name known to allAlex_St is a name known to allAlex_St is a name known to all
По умолчанию

Вот все необходимое для повторения девайса.
Архив содержит:
1. Прошивка девайса в виде hex файла
2. Схема и плата в формате PCad2006
3. Приложение для конфигурирования
4. Моя текущая конфигурация как пример использования

Нажмите на изображение для увеличения
Название: HidKeysAnalog.jpg
Просмотров: 1531
Размер:	72.4 Кб
ID:	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 )
{
   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 );
}
Если что-то не понятно - на вопросы постараюсь ответить ).
Вложения
Тип файла: rar HID_Keys_Analog_v1.0.rar (184.2 Кб, 789 просмотров)
__________________
Мой журнал: http://www.pccar.ru/showthread.php?p=79335
Alex_St вне форума   Ответить с цитированием