Главная » Микроконтроллеры
Призовой фонд
на ноябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Тестер компонентов LCR-T4
Паяльник
4. 200 руб.
От пользователей

Урок 8. Ввод информации в МК. Подключение кнопки к МК BASCOM-AVR

В предыдущих уроках были проведены способы вывода информации из микроконтроллера: подключение светодиода и ЖК индикатора. Но как, же вводить информацию в микроконтроллер? Существует множество вариантов и устройств для этого. Но пока что рассмотрим самый простой вариант, это обычная кнопка. Кнопки бывают двух видов: тактовые и фиксирующие. Тактовые кнопки работают по такому принципу: нажал – контакты замкнулись, отпустил – контакты разомкнулись. Следует учесть, что существуют тактовые кнопки, которые изначально замкнуты, а при нажатии размыкаются. Фиксирующие кнопки (их иногда называют: тумблеры, выключатели, переключатели) в отличии от тактовых фиксируют своё положение при нажатии, то есть: нажал – контакты замкнулись, еще раз нажал – контакты разомкнулись. В общем, с кнопками разобрались, теперь будем разбираться, как подключить эти кнопки к микроконтроллеру. А подключить на самом деле очень даже просто! Смотрим схему:

Подключение кнопки к МК

Возможно, вы спросите: Зачем резистор R1? А затем, что без резистора R1, когда кнопка S1 будет разомкнута, микроконтроллер на порте, к которому всё это подключено, будет видеть то логическую 1, то логический 0 тем самым будут производиться ложные срабатывания кнопки. Чтобы этого не происходило необходимо этот порт “подтягивать” сопротивлением к плюсу питания. Сопротивление резистора R1 может быть в интервале от 4,7кОм до 10кОм. С резистором получается такая картина: кнопка S1 нажата – на порте МК возникает логический 0, кнопка S1 не нажата – на порте МК возникает логическая 1 за счёт сопротивления R1. Конечно, нужно знать, что в некоторых AVR микроконтроллерах есть встроенные подтягивающие резисторы сопротивление порядка 50кОм, по умолчанию они отключены. В BASCOM-AVR эти резисторы можно включить, записав в необходимый порт логическую 1. Но я крайне не рекомендую использовать эти встроенные, гораздо надёжнее использовать внешние, как показано на схеме выше. Ну что, со схематическим решением разобрались, теперь будем разбираться программно. Для работы с кнопкой сначала нужно сконфигурировать порт микроконтроллера на вход, в BASCOM-AVR это делается вот так:
Config (порт микроконтроллера) = input
Пример:
Config PINB.3 = input

Обратите внимание, что для работы порта на вход, имя порта должно начинаться с PIN, а не с PORT как для конфигурации порта на выход!

После конфигурации порта на вход мы можем считать с него значение 1 или 0, в нашем случае 0 – кнопка нажата, 1 – кнопка не нажата. А проверить, что кнопка нажата, мы можем так:
If (порт микроконтроллера) = 0 then
(если кнопка нажата, то выполняем, действия описанные здесь)
End if
Можно и наоборот, проверить, не нажата ли кнопка:
If (порт микроконтроллера) = 1 then
(если кнопка не нажата, то выполняем, действия описанные здесь)
End if
Пример:
If PINB.3 = 0 then
PORTB.2 = 1 "если кнопка нажата, то включаем светодиод подключенный к PB.2
End if

Просто, не правда ли? Итак, теперь попробуем реализовать подключение кнопки к микроконтроллеру в “железе”. За основу возьмём микроконтроллер Attiny13 и отладочную плату для него сделанную немного ранее. Для того кто не делал отладочную плату, вот схема:

Схема подключения кнопки к микроконтроллеру

Алгоритм работы программы такой: кнопка S1 нажата – светодиод не горит, кнопка S1 не нажата – светодиод горит. А вот и сама программа на BASCOM-AVR:

$regfile = "attiny13.dat"
$crystal = 8000000

Config Pinb.3 = Input
Config Portb.2 = Output

Do
If Pinb.3 = 0 Then Portb.2 = 0
If Pinb.3 = 1 Then Portb.2 = 1
Loop

End

Вот такая простая программа. Скомпилированная прошивка находится в архиве ниже. Фьюз биты можно не выставлять, так как в такой простой программе тактовая частота не особо важна. Для ленивых собирать в железе есть проект в нашем любимом симуляторе Proteus, скачать можно в архиве ниже. Работа в схемы в симуляторе Proteus:

Схема в Proteus

Скачать файлы для урока (проект в Proteus, исходник, прошивка) вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
IC1 МК AVR 8-бит
ATtiny13
1 Поиск в LCSCВ блокнот
R1, R2 Резистор
4.7 кОм
2 Поиск в LCSCВ блокнот
R3 Резистор
150 Ом
1 Поиск в LCSCВ блокнот
HL1 Светодиод1 Поиск в LCSCВ блокнот
Bat1 Элемент питания3 Вольт1 Поиск в LCSCВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Яковлев Александр Вячеславович Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Владик #
Меня удивила Ваша фраза "Обратите внимание, что для работы порта на вход, имя порта должно начинаться с PIN, а не с PORT как для конфигурации порта на вход!" , я в своей практике ни разу так не делал ) писал все время PORT на выход и на вход, и все работало. Подумал что я что-то когда-то упустил и начала искать в справке баскома (2.0.5.0), но и в ней нет такой команды config pin ... может это в старых версиях программы?
Ответить
0
Ренат #
Без PIN вы не сможете считать состояние входа
Ответить
0
Юрий #
После конфигурации порта на вход мы можем считать с него значение 1 или 0, в нашем случае 0 – кнопка нажата, 1 – кнопка не нажата
Стоит добавить, что МК способен считывать байт информации с кнопки, как по верхнему фону, так и по нижнему, т.е. как логический "1", так и логический "0", а не просто "нажата - не нажата". Это важно учитывать при разработке алгоритма программы, поскольку не всегда нужно, чтобы кнопка была нажата для запуска подпрограммы.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Мини гравер 125 Ватт Модуль измерения тока на ACS712 (30А)
вверх