Урок 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)  

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

Схема с применением энкодера

Схему рисовал в протеусе (прилагается проект), но там не было энкодера поэтому я его представил в виде двух кнопок подключённых к PA.0 и PA.1 соответственно. Для демонстрации я собрал схему на макетной плате с механическими контактами, вот что получилось:

mc195-3.jpg

Теперь напишем программу для микроконтроллера в 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