Файл: Можно ли за один день научиться программировать микроконтроллеры (В.Н. Рубашка).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 152

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

******************* ОСВОЙ МИКРОКОНТРОЛЛЕР ЗА ОДИН ДЕНЬ! (BASCOM AVR) **********************

$regfile = "m8def.dat"

'установка модели микроконтроллера

$crystal = 1000000

'частота генератора 1МГц

Config Portd.0 = Output

'настройка пина d0 на выход (LED1)

Config Portd.1 = Output

'настройка пина d1 на выход (LED2)

Config Portd.2 = Output

'настройка пина d2 на выход (LED3)

Config

Portd.3 = Output

'настройка пина d3 на выход (LED4)

Config

Portc.0 = Input

'настройка пина c0 на вход (S1)

Config

Portc.1 = Input

'настройка пина c1 на вход (S2)

Dim Effect As Byte

Dim Temp As

Byte

Temp =

300

'инициализация светодиодов

'@@@@'

Portd = 15

Waitms

Temp

'OOOO'

Portd = 0

Waitms

Temp

'-------------------------------------------------------------------------------

'начало цикла

Do

'опрос

кнопок и присвоение переменной Effect соответствующего значения

If Pinc.0 =

0 Then Effect = 1

If Pinc.1 =

0 Then Effect = 2

If Pinc.0 = 0 And Pinc.1 = 0 Then Effect = 3

'бегущий огонь вправо, если Effect = 1

If Effect = 1 Then

'@OOO'

Portd = 1

Waitms Temp

'O@OO'

Portd = 2

Waitms Temp

'OO@O'

Portd = 4

Waitms Temp

'OOO@'

Portd = 8

Waitms Temp

End If

'бегущий огонь влево, если Effect = 2

If Effect = 2 Then

'OOO@'

Portd = 8

Waitms Temp

'OO@O'

Portd = 4

Waitms Temp

'O@OO'

Portd = 2

Waitms Temp

'@OOO'

Portd = 1

Waitms Temp

End If

'мигание, если Effect = 3

If Effect = 3 Then

'OOOO'

Portd = 0

Waitms Temp

'@@@@'

Portd = 15

Waitms Temp

End If

'конец цикла

Loop

'-------------------------------------------------------------------------------

Вышеприведённый листинг необходимо скопировать и вставить в новый проект.

Это вполне работоспособная программа, но она не лишена недостатков. Самый главный – это неудачный и даже можно сказать неправильный опрос кнопок. Как известно, кнопкам свойственен дребезг контактов, и чтобы не было многократных непредсказуемых переключений, с этим приходится бороться. В нашем случае одна кнопка выполняет одно действие – выбор одного эффекта, поэтому дребезгом мы можем пренебречь. Если вы решите усовершенствовать программу, например, одной кнопкой переключать по кольцу программы, а второй регулировать скорость, без подавления дребезга контактов не обойтись. В BASCOM есть встроенная функция – DEBOUNCE, которая производит периодическую проверку состояния битового порта, и там уже программно устранён эффект дребезга.

Я настоятельно рекомендую пользоваться хэлпом к программе, в нём всё очень хорошо расписано и можно найти ответы на множество возникающих вопросов.

Второй нюанс с кнопками – их опрос происходит вначале цикла, поэтому время реакции на нажатие напрямую зависит от длины выбранного эффекта. Как это устранить, я предлагаю подумать Вам в качестве домашнего задания.

Пожалуй, пора от скучной теории переходить к практике. У нас есть листинг программы, который понятен (или не очень) нам, но совсем непонятен микроконтроллеру. Давайте сделаем всё наоборот (Compile program F7)! Исходники программы компилируются в машинные коды микроконтроллера. Теперь мы ничего не понимаем, глядя на абракадабру шестнадцатеричных цифр (немного забежав наперёд, можно посмотреть в окне программатора), зато их очень любит наш друг

- 8 -


******************* ОСВОЙ МИКРОКОНТРОЛЛЕР ЗА ОДИН ДЕНЬ! (BASCOM AVR) **********************

контроллер. При удачной компиляции на секунду выведется окно с сообщением о процентах используемой памяти, если же обнаружатся ошибки, внизу редактора появится нумерованный построчный список, где их следует искать.

Рисунок 10 – Компилируем программу.

Рисунок 11 – Компиляция успешна!

Наша программа занимает всего 5 процентов памяти, но она уже работает! 95 оставшихся процентов так и просят, чтобы их заполнили. Что можно предложить в нашем случае? Увеличение числа каналов за счёт использования дополнительных портов, увеличение количества эффектов, введение регулировки скорости, автоматический – ручной режим работы и т. д. Огромное поле деятельности, причём ничего не надо перепаивать, изменил или добавил код, перекомпилировал, запрограммировал и любуешься результатом.

Теперь необходимо выполнить последний, завершающий шаг – программирование контроллера. В меню настроек выберем программатор и порт, к которому он подключен(OptionsProgrammer), как на рисунке.

Запускаем программатор, и если нет ошибок, он должен автоматически определить тип вашего микроконтроллера и вывести в рабочее окно скомпилированные машинные коды. Нажимаем на заветную кнопочку (auto program chip – ПУСК) и через несколько секунд ваши светодиоды радостно мигнут, приветствуя с первой победой разума над железом! Понажимайте кнопочки на плате бегущих огней, проверьте работу схемы в разных режимах, подумайте, как её можно улучшить.

Теперь Вы наверняка сможете повторить эту конструкцию, усовершенствовать её, внести необходимые изменения и дополнения, а также разработать совершенно новую, уникальную, необходимую для Ваших собственных нужд.

- 9 -

******************* ОСВОЙ МИКРОКОНТРОЛЛЕР ЗА ОДИН ДЕНЬ! (BASCOM AVR) **********************

Рисунок 12 – Настройки программатора.

Рисунок 13 – Запускаем программатор.

Рисунок 14 – Программируем контроллер!

Я надеюсь, что у Вас всё получилось, а если нет – милости прошу в форум «Программирование ATMEL в BASCOM» - http://bascomavr.3bb.ru и на страничку сайта «Светодиодные динамические эффекты – BASCOM» - http://ledeffects.net/pages/?id=12. Много полезного Вы сможете почерпнуть из http://www.mcselec.com/index.php?option=com_content&task=category&sectionid=7&id=79&Itemid=57 примеров – application notes.

P.S. Я, как и любой человек, могу ошибаться, за что заранее приношу извинения. Если у Вас есть замечания или предложения, прошу писать на info@ledeffects.net.

- 10 -