Урок 16. Работа с энкодером в BASCOM-AVR

В этом уроке мы узнаем что такое энкодер, для чего он и как с ним работать в BASCOM-AVR. И так, что же такое энкодер? С виду энкодер очень похож на переменный резистор, но работает он по другому. Дело в том что энкодер можно вращать бесконечно, получая на выходе импульсы разной длинны, по которым можно определить в какую сторону его вращают. Это позволяет очень точно определить угол поворота энкодера, именно поэтому энкодеры нашли своё применение в серводвигателях. Также вы могли заметить энкодеры в бытовой технике, там где надо быстро и точно изменять какой либо параметр, например регулировка громкости в музыкальном центре. Как же работает энкодер? У энкодера есть три вывода A, B и общий, в принципе изнутри его можно представить как две кнопки которые последовательно подключены. При повороте энкодера в одну сторону, сначала возникает импульс на выводе A, потом с опозданием на выводе B и так далее. При повороте в другую сторону происходит всё на оборот. В общем, вот так:

Теперь разберёмся как работать с энкодером в BASCOM-AVR. В баскоме есть одна хорошая команда которая организует работу с энкодером, называется эта команда Encoder. Для её работы нужно указать промежуточную переменную в формате byte, пины микроконтроллера к которым подключён энкодер (в режиме входа), метки и задержку работы энкодера. Вот так:

Промежуточная переменная = Encoder(пин энкодера A или B,  пин энкодера A или B, метка к которой перейти при повороте энкодера , метка к которой перейти при повороте энкодера  , задержка)

Пример написания:

A = Encoder(pina.0 , Pina.1 , P , L , 1)  

Приведём практический пример, поставим перед собой задачу: нам нужно узнать в какую сторону вращают энкодер и выводить данные на ЖКИ. Соберём простую схему:

Схему рисовал в протеусе (прилагается проект), но там не было энкодера поэтому я его представил в виде 2-х кнопок подключённых к 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):


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

Добавить комментарий

Ваш адрес email не будет опубликован.