Что мне нужно сделать, чтобы прочитать цифровой вход (кнопку) на ATmega16 ? Нужно ли включать нагрузочные резисторы или я могу использовать 10 кОм? Каким будет какой-то простой код? Просто «включи светодиод, когда нажата вещь».
Есть ли урок для начинающих? Я пробовал гуглить и AVR Freaks , но там все превращается в драку, и я не получаю свой ответ. Я действительно не нашел учебников по этому поводу. Тонны конкретных вещей, но ничего простого в моем микроконтроллере AVR ...
Ответы:
Бразильские поздравления!
Прежде всего, спасибо Джоби за ваш пример. Во-вторых, в его примере есть небольшая ошибка. Число 0x20 не правильно. Это должно быть 0x04. Кроме того, как совет, я бы не использовал шестнадцатеричные числа, такие как 0xFB, 0x20 или 0x04 в коде. Я бы предложил использовать определения порта PIN, найденные в io.h, и другие, на которые ссылается заголовочный файл. Ниже я переписал пример Джоби с некоторыми комментариями для начинающих.
/ *
комментарии для начинающих
комментарий № 1: (1 << PD2) генерирует двоичный код 00000100. Операция «~» переворачивает все цифры, т. Е. Двоичный код теперь равен 11111011. Наконец, символ & = применяет логику «И» между DDRD и 11111011, и результат помещается снова в памяти DDRD. Примечание: оператор «И» выполняет для каждого бита в памяти DDRD, он сравнивается с двоичным числом, указанным выше. Если бит в DDRD равен 0 и бит в двоичном файле в той же позиции прикуса равен 1, то результирующий бит равен 0, если DDRD равен 1, а бит в двоичном файле равен 1, результирующий бит равен 1, и если бит в DDRD равен 1 или 0, а бит в двоичном файле равен 0, тогда результирующий бит всегда равен 0. Таким образом, команда DDRD & = ~ (1 << PD2) изменяет только бит PD2 на ноль и оставляет другие (нули или единицы) без изменений. Это кажется немного сложным, но после того, как вы к нему привыкнете, это лучший способ изменить бит за укус, не меняя другие биты.
Комментарий № 2 : (1 << PD2) генерирует двоичный код 00000100. Используя ту же логику «И», описанную в комментарии № 1, команда «PIND & 0000100» проверяет только, если PIND2 (наш входной контакт, к которому подключена кнопка) к) установлен на высокий или нет. Все остальные выводы будут FALSE, поскольку двоичные биты установлены в 0, а поскольку двоичный бит # 2 установлен в 1, оператор IF будет TRUE, только если для входа PD2 установлено высокое значение, или FALSE, если вход PD2 установить на низком уровне.
Комментарий № 3 : Следуя логике, объясненной в комментарии № 1, эта команда устанавливает высокое напряжение на выходном выводе PINB2 в порту PORTB. Если ваш светодиод правильно подключен к этому контактному порту с резистором ~ 300 Ом, и этот резистор подключен к земле, светодиод должен включиться.
Комментарий № 4 : светодиод должен погаснуть по тем же причинам, что и в предыдущих комментариях.
Заключительные соображения:
а) Во избежание колебаний напряжения на входном выводе PD2, когда кнопка не нажата (разомкнутая цепь), я настоятельно рекомендую установить понижающий резистор (1 кОм или выше), чтобы светодиод не загорелся случайно из-за к этому случайному колебанию напряжения.
б) Отказ от ответственности: идеи, описанные здесь, должны использоваться только в образовательных целях, и их НЕ следует использовать в какой-либо реальной системе до консультации со специалистом по электронике.
* /
источник
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/#digital-in
источник
Hackaday отлично написал для программирования AVR, в нем много полезной информации, которая может помочь вам
http://hackaday.com/2010/11/19/avr-programming-04-writing-code-etc/
http://hackaday.com/2010/11/05/avr-programming-03-reading-and-compiling-code/
http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/
http://hackaday.com/2010/10/23/avr-programming-introduction/
источник
Что ж, это для AT90Usb1287, ATMega, но основные функции кнопок должны быть более или менее одинаковыми. Просто измените имена IO.
источник
При работе с цифровым входом от механического переключателя следует учитывать еще и отскакивание контактов - изменение того, что должно быть нажатием одной кнопки, на несколько нажатий.
Что-то вроде включения светодиода, когда кнопка нажата, вам, вероятно, не придется беспокоиться о том, чтобы отменить действие. Для чего-то более сложного (например, переключение светодиода на нажатие кнопки), дебасинг является обязательным.
У Джека Гэнслла есть хорошее руководство по разоблачению
источник