Файл: Можно ли за один день научиться программировать микроконтроллеры (В.Н. Рубашка).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§ionid=7&id=79&Itemid=57 примеров – application notes.
P.S. Я, как и любой человек, могу ошибаться, за что заранее приношу извинения. Если у Вас есть замечания или предложения, прошу писать на info@ledeffects.net.
- 10 -