Микроконтроллеры | Ликбез по программированию AVR |
|
---|---|---|
Ликбез по порграммированию PIC у нас уже есть , теперь поработаем с AVR. Предпосылки к созданию этой темы здесь. Техзадание (учебное): На первом этапе нам предстоит выбрать конкретный МК и среду для программирования и отладки, где и будем работать. Для PIC это был MPLAB, а в дальнейшем связка MPLAB + CCS PICC + PROTEUS. Нечто подобное созреет и здесь. |
|
|
Непло было бы для начала пару ссылочек с коментариями чтобы, так сказать, теорию чайнику освоить. Ну, на подобе самоучителя Карабейника для ПИКов, он мне очень понравился. К сожалению для АВРор такого не нашел. Может кто знает? |
|
|
Для написания проги на асме достаточно будет AVRStudio,имхо.НЕобходимый инструментарий она содержит. |
|
|
А для отладки? Полезная литература |
|
|
в качестве среды для написания кода предлогаю для начала вин авр для отладки протеус самое то в дальнейшем можно уже будет использовать связку гцц и студию или вмлаб в качестве мк надо брать мега8 и для начала надо не асм, а си |
|
|
Господа, пусть каждый описывает то, что считает нужным. Начинаю: Блиц-введение в инструментарий. Представим, что у нас на компе установлен AVRStudio 4 1. Начинаем работу, т.е. запускаем AVRStudio. Обычно при запуске он спрашивает, будем ли мы работать с новым проектом, либо загрузим ранее созданный. В окне, которое он вываливает на экран, нажимаем кнопку "New project". Если при запуске такого окна не появилось, заходим в меню Project->New project. 2. Выбираем в появившемся окне тип проекта. В данном случае "ATMEL AVR Assembler". После выбора становятся доступными поля "Project name" и "initial file". Задаем имя проекта, например "example1" (это имя автоматически дублируется в поле Initial file). После этого обязательно нажимаем кнопку с тремя точками "..." и указываем в появившемся окне папку, где будет храниться проект. Как это сделать, думаю, разобраться несложно, единственный совет - ни сама папка, ни папки, в которые она вложена, не должны содержать в названиях русских букв (если не хотите получить геморрой на этапе компиляции). 3. После описанных действий нажимаем кнопку "Next>>", при этом на экране появляется список отладчиков, с помощью которых можно вести отладку программы. Выберем для определенности AVR Simulator, поскольку он не требует никакого дополнительного железа, при этом во второй половине окна появится список моделей микроконтроллеров, с которыми он работает. В данном случае выбираем в списке "ATMega16" (как просили), после чего нажимаем кнопку "Finish". 4. С этого момента на левой половине экрана у нас появляется окно-навигатор в обычном для Windows стиле, а на правой - окно с открытым файлом "example1.asm". В нем и будем писать нашу программу. Для начала напишем следующее: .include "m16def.inc" В смысловом плане код абсолютно бессмысленный, но нам нужно просто пройти все этапы работы. 5. Компиляция написанной программы выполняется клавишей F7 или через меню Build->Build. Будем надеяться, что она прошла успешно. 6. Запуск программы в режиме отладки выполняется комбинацией клавиш Сtrl+Shift+Alt+F5 (во как!) либо через меню Debug->Start Debugging. при успешном запуске на левой половине экрана вместо навигатора появится дерево аппаратных компонент ATMega16 (регистры, стек, порты ввода-вывода). Обычно этого вполне достатно для отладки, но, если какой-то информации будет не хватать, через меню "View" можно открыть дополнительные окна отладчика. Я обычно открываю окно с регистрами (View->Register). 7. Откроем в дереве метку "registers 16-31" и нажмем клавишу F10 (выполнение одной инструкции). Регистр r16 должен подсветиться красным(изменилось содержимое) и стать равным 0x0F. То же самой произойдет и в окне с регистрами, если оно открыто. 8. Откроем в дереве метку I/O ATMEGA16->PORTB. В ней содержатся три строки, соответствущие трем регистрам порта B. Нажимаем клавишу F10. Регистр DDRB (регистр направления передачи) должен подсветиться красным и в нем должно появиться 0x0F. 9. Дальнейшая отладка производится в том же ключе. Для завершения отладки нажимаем комбинацию Ctrl+Shift+F5. 10. Для завершения работы с AvrStudio4 вначале нажимаем кнопку с кучей дискет (сохранение всех файлов), затем Alt+F4. Работа с инструментом очень несложная. Попробуйте проделать все вышеописанное. Потом будем двигаться дальше. ЗЫ. Спорить о том, что лучше, а что хуже, смысла не вижу. Не критикуйте мой выбор, а описывайте работу в другой среде. |
|
|
описываю работу в картинках в двух средах там пдф и 2 папки с примерами уроков |
|
|
Итак, начинаем писать программу. Понятно, что программа будет состоять из двух этапов - первоначальной инициализации контроллера, и, собственно, алгоритма обработки. Выберем для определенности, что кнопки подключены к линиям порта С[0]..C[3], а светодиоды - к линиям порта C[4]..C[7] соответственно (так будет интереснее работать со вводом/выводом ). Одна из наиболее простых реализаций данной задачи - табличный способ программирования. Он - наименее экономен по памяти, но наиболее быстрый по скорости работы. Лично я всегда стараюсь применять при работе с AVR именно его - на мой взгляд, все без исключения AVR-ки сильно несбалансированы по соотношению объемов памяти программ/памяти данных: ОЗУ и регистры в них заканчиваются заведомо быстрее, чем память программ (это, разумеется, IMHO), так что ее можно особо не экономить. Вот как, в данном случае, выглядит табличный способ: Поскольку кнопки подсоединены между общим проводом и линями порта, при всех отпущенных кнопках на младших линиях порта С будет код 0x0F, при нажатии первой кнопки - код 0x0E, при нажатии второй кнопки - код 0x0D, при нажатии третьей кнопки - код 0x0B, четвертой - 0x07. Поскольку светодиоды подсоединены между шиной питания и линиями порта, при выводе в порт С кода 0xFF все они будут погашены. Для зажигания одного светодиода надо вывести в порт код 0xEF, для зажигания двух светодиодов - код 0xCF, для зажигания трех светодиодов - код 0x8F, для зажигания четырех светодиодов - код 0x0F. Вот как будет выглядеть наша таблица соответствия комбинаций кнопок и комбинаций светодиодов: 0x0F - 0xFF Теперь осталась самая малость - подготовить к работе порт C, считывать с него в цикле комбинацию состояний кнопок, найти им соответствие комбинаций светодиодов в таблице, и вывести их на порт. Дребезг кнопок пока не обрабатываем - полагаю, это будет второй частью задания Текст программы с комментариями - в прикрепленном файле. Создаем проект с именем example2, копируем через буфер обмена в окно с файлом example2.asm то, что прикреплено к топику, компилируем (клавиша F7) и запускаем в режиме отладки (Ctrl+Shift+Alt+F5) программу. Нажимая F10, доходим до команды "in", открываем в навигаторе слева ветку I/O ATMega16-->PORTC, щелкая мышкой, устанавливаем в регистре PINC все "кубики" черным (это соответствует всем отпущенным кнопкам), и, нажимая F10, проходим один цикл работы программы. Перед следующим выполнением команды "in" изменяем мышкой "младшие" кубики в регистре PINC (это будет соответствовать нажатию тех или иных кнопок) и убеждаемся, что программа реагирует на это в соответствии с заданием. Теперь - немного дифирамбов табличному методу. Какие бы хитрые комбинации условий на кнопки ни были заданы, они будут однозначно соответствовать одному из элементов таблицы. При изменении в задании комбинаций кнопок (например, при нажатии первой и второй кнопки одновременно должен загореться первый и четвертый светодиод) я просто исправлю соответствующий элемент в таблице table, не трогая саму программу. Для программы это - серьезный плюс, поскольку не требуется изменять логику ее работы. Кстати, и размер ее при этом не изменится! |
|
|
Неплохо бы нам нарисовать схему девайса с применением AVR, а также сделать "шапку" - начальную часть кода, как было сделано нами тут. |
|
|
|
||
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |