В этом уроке мы узнаем что такое энкодер, для чего он и как с ним работать в BASCOM-AVR. И так, что же такое энкодер? С виду энкодер очень похож на переменный резистор, но работает он по другому. Дело в том что энкодер можно вращать бесконечно, получая на выходе импульсы разной длинны, по которым можно определить в какую сторону его вращают. Это позволяет очень точно определить угол поворота энкодера, именно поэтому энкодеры нашли своё применение в серводвигателях. Также вы могли заметить энкодеры в бытовой технике, там где надо быстро и точно изменять какой либо параметр, например регулировка громкости в музыкальном центре. Как же работает энкодер? У энкодера есть три вывода A, B и общий, в принципе изнутри его можно представить как две кнопки которые последовательно подключены. При повороте энкодера в одну сторону, сначала возникает импульс на выводе A, потом с опозданием на выводе B и так далее. При повороте в другую сторону происходит всё на оборот. В общем, вот так:
Теперь разберёмся как работать с энкодером в BASCOM-AVR. В баскоме есть одна хорошая команда которая организует работу с энкодером, называется эта команда Encoder. Для её работы нужно указать промежуточную переменную в формате byte, пины микроконтроллера к которым подключён энкодер (в режиме входа), метки и задержку работы энкодера. Вот так:
Промежуточная переменная = Encoder(пин энкодера A или B, пин энкодера A или B, метка к которой перейти при повороте энкодера , метка к которой перейти при повороте энкодера , задержка)
Пример написания:
A = Encoder(pina.0 , Pina.1 , P , L , 1)
Приведём практический пример, поставим перед собой задачу: нам нужно узнать в какую сторону вращают энкодер и выводить данные на ЖКИ. Соберём простую схему:
Схему рисовал в протеусе (прилагается проект), но там не было энкодера поэтому я его представил в виде двух кнопок подключённых к PA.0 и PA.1 соответственно. Для демонстрации я собрал схему на макетной плате с механическими контактами, вот что получилось:
Теперь напишем программу для микроконтроллера в BASCOM-AVR, она будет выглядеть вот так:
$regfile = "m32def.dat" $crystal = 1000000 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 4 Dim A As Byte Initlcd Cls Porta.0 = 1 Porta.1 = 1 Do A = Encoder(pina.0 , Pina.1 , P , L , 1) Waitms 10 Loop End L: Cls Lcd "BpaжeЅёe і»eіo" Return P: Cls Lcd "BpaжeЅёe іѕpaіo" Return
Ну тут всё просто. Сначало конфигурируем пины к которым подключён ЖК индикатор, потом заводим переменную A, включаем подтягивающие резисторы на PA.0 и PA.1,инициализируем ЖКИ и очещаем его. Дальше уходим в бесконечный цикл где через каждые 10 миллисекунд проверяем положение энкодера, если в это время энкодер поворачевают в лево то переходим на метку L, если в право то на метку P. И уже перейдя на метку L или P выводим на ЖКИ сторону в которую вращаем.
Компилируем, прошиваем микроконтроллер и прошиваем следующие фьюз биты (для программы SinaProg):
Урок 17. Использование бутлоадера в BASCOM-AVR
Прикрепленные файлы:
- EncBas.rar (59 Кб)
Комментарии (6) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Как реализован русский язык на мониторе?
[Автор]
[Автор]
Увидите, что команда баскома Encoder работает криво. Дисплей более инертен, вы не видите ошибки.