// If button holds more than BW_LONG_PRESS cycles
// EVFIN - event "Indication finished"
// add additional flags here, like BW_EVBT3=0x04
// Main keyboard event indicator - must be cleared after handle
// Event bits when scan complete
// Work together with SCAN_FREQ to get orange color
// LED flashing frequency (in parrots, without small wing)
Если вдруг у вас оказалась одна лишняя нога, то вполне можно задействовать её pull-up вот в этом месте вместо резистора R1
// Define connections (PORTC only!)
А теперь собственно библиотека для работы с этой схемой. В данном конкретном случае в качестве платформы использовалась ATMega48, но я старался писать код максимально железонезависимо, и для перехода на другой кристалл достаточно поменять инициализацию порта и АЦП.
С индикацией разобрались, а теперь о кнопках. Предположим, что на Port2 мы подаем логический 0, а Port1 включаем как вход для встроенного АЦП. При этом благодаря резистору R1 мы получаем некоторый небольшой потенциал на светодиоде. Обратите внимание, что в прямом направлении включен именно зеленый светодиод. Как известно, зеленые (и желтые, кстати, тоже) светодиоды имеют ощутимо большее прямое падение напряжения, чем красные. В нашем случае этого напряжения вполне достаточно, чтобы надежно считывать состояние нажатых кнопок. При нажатии любой из них получается делитель напряжения, и теперь достаточно просто оцифровать полученный сигнал и перекодировать в нажатие кнопок. Кстати, даже если перепутать полярность включения проводов при правильном подборе делителей кнопки сохранят работоспособность, разве что индикация перепутается. Выбор резисторов R3 и R4 достаточно вольный, главное помнить два правила меньший резистор не должен мешать зажигать светодиоды, а больший резистор должен давать падение напряжения, достаточное для надежного детектирования. Указанные на схеме номиналы я просто поставил из тех, что под рукой валялись, а потом просто в программе прописал получившиеся напряжения. R2 токоограничивающий, подбираете исходя из используемых светодиодов и параметров ног микроконтроллера, иногда можно обойтись вообще без него.
Основную часть времени схема занимается индикацией. Подав на одну ногу 1, а на другую 0, мы зажигаем соответствующий светодиод. Одна комбинация дает зеленый цвет, вторая красный, а если быстро дергать туда-сюда получаем оранжевый.
А теперь для заинтересовавшихся вкратце принцип работы.
АЦП и вот такая простая схемка:
Настало время для укрощения этого кабельно-ножечного монстра путем усекновения лишних ног, и поможет нам в этом
Или другая ситуация плата с микроконтроллером запрятана с глаз долой, но жгут проводов до индикатора печальной змеей пронзает недра прибора.
Так, на эту ногу ШИМ, на эту кнопку, на эти светодиоды Оп-па А ноги-то закончились. Без светодиодов некрасиво, без кнопок нефункционально. Придется брать кристалл пожирнее :(
Подавляющее большинство работавших с микроконтроллерами однажды оказывались перед сложным выбором:
«Давайте отрежем Сусанину ногу?» (с)
«Давайте отрежем Сусанину ногу?» (с) / Хабрахабр
Комментариев нет:
Отправить комментарий