Показать сообщение отдельно
Старый 19.10.2015, 12:03   #59
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
По умолчанию

Цифровые выходы (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.

Вот где-то так..
Понимаю, что сумбурно и не очевидно, но это было простейшим вариантом при реализации, и т.к. настраивается раз в жизни - уже в этом проекте так и останется )))
__________________
Мой журнал: http://www.pccar.ru/showthread.php?p=79335
Alex_St вне форума   Ответить с цитированием