В этом уроке мы узнаем что такое энкодер, для чего он и как с ним работать в 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):
Урок 17. Использование бутлоадера в BASCOM-AVR
Прикрепленные файлы:
- EncBas.rar (59 Кб)