» » Програмирование в AVR Studio 5 с самого начала. Часть 4

 
 
 
9

Програмирование в AVR Studio 5 с самого начала. Часть 4

Разместил galrad 13 октября 2011. Просмотров: 27 875


Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно найти почти в любой обучающей литературе. Чтобы получить “бегущие огни” на выходах порта, нужно последовательно переключать один бит

“Бегущая тень” получается при инверсии “бегущих огней”. В принципе сложностей никаких нет – и вам под силу сделать это самостоятельно.

Мы же попробуем усложнить задачу и объединить в одной программе “бегущие огни” и “бегущие тени”, сделать их непрерывными т.е. рисунок светящихся огоньков будет переходить из конца в начало, а еще включим функцию реверса огней т.е нажав на кнопку сможем “двигать” огоньки в обратном направлении.
Проект в Proteus будет выглядеть так:


файлы проекта:
attiny2313_led_2.rar | Файл 26,22 Kb загружен 102 раз.

Программа:
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


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

Должно выглядеть примерно так:
“бегущий огонек”: beg_og1.wmv | Файл 1,01 Mb загружен 69 раз.


“бегущая тень”: beg_ten1.wmv | Файл 878,09 Kb загружен 64 раз.


“бегущая полоска”: beg_polos1.wmv | Файл 831,7 Kb загружен 57 раз.


Программа “бегущих огней” написанная несколько иначе:
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


В программе появились новые команды и строчки. Мы изучим их в процессе отладки.
А сейчас вернемся в IDE AVR Studio 5 и рассмотрим более подробно некоторые функции. Сначала копируем или пишем программу в редактор. Компилируем программу нажимая F7 или кликаем по среднему значку панели сборки проекта:

Назначения клавиш слева - направо:
Сборка проекта (Build)
Сборка решения (Build Solution) F7
Отмена (Cancel)

По результатам сборки в окне Output, будет предоставлен отчет о процессе компиляции, а в Solution Explorer будут показаны файлы полученные в результате сборки. Программа создает несколько файлов .hex, .lss, .map, .obj. Файл .hex для программирования микроконтроллера, .lss содержит подробный листинг программы и отчет о компиляции, который можно изучить, если дважды кликнуть по этому файлу, .map файл показывает карту оперативной памяти и задействованные в программе регистры.


Как правило, написание программы занимает меньшее время. Чем сам процесс ее отладки. Поэтому сегодня более подробно рассмотрим функции разных клавиш в AVR Studio 5.
Отладка Debug, начинается с компиляции программы, и если обнаружены явные ошибки, в нижнем окне появляется предупреждения, которые указывают на ее место расположения.

Отладка программы может выполняться в режимах симуляции и эмуляции.
Симуляция не требует специальных отладочных средств и проводится непосредственно в самой программе. Эмуляция предполагает подключение отладочных плат или программаторов, и позволяет наблюдать процесс отладки наглядно сразу в “железе”. Повторюсь, что для AVR Studio 5 можно самому собрать аналог STK500, весьма мощный и функциональный программатор-отладчик.
Мы будем выполнять отладку в режиме симуляции. Для управления процессом симуляции существует панель отладки (Debug Toolbar)

Назначение кнопок панели отладки указаны в таблице

В процессе отладки можно наблюдать за изменениями значений переменных в окне Locals

Контролируя значения переменных, можно понять логику программы.
Для трассировки программы (пошаговой отладки) предназначена (AVR Debug Toolbar) – панель отладки AVR.

Назначение кнопок панели указаны в таблице

Мы уже пользовались опцией просмотра состояния процессора, еще раз посмотрим функции этого окна.

Параметры состояния процессора перечислены ниже

В этом окне, а так же отдельно можно посмотреть текущее состояние регистров общего назначения и 16-битные регистры X,Y,Z.

Окно просмотра памяти позволяет наблюдать, а при необходимости и модифицировать все виды памяти.

Окно дезассемблирования показывает программу на языке ассемблера. Это окно актуально для языков высокого уровня, когда нужно посмотреть, как составлена та или иная команда в кодах ассемблера.

Для контроля и управления регистрами ввода-вывода существует окно просмотра периферии IO View

В этом окне можно включать или выключать конкретные биты регистров ввода-вывода, имитируя нажатие на кнопку или активируя встроенное устройство микроконтроллера. Единичка записанная в бит обозначена темным квадратиком, светлый (пустой) квадрат означает ноль. Мы можем произвольно включать и отключать биты регистров.
Теперь вернемся к нашим бегущим огонькам.
Начало в принципе знакомое и повторяется с предыдущих программ, появилась новая строчка:
Инициализация стека.

Что такое стек? Зачем он нужен?

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

Входим в режим трассировки F11, смотрим в параметрах состояния процессора строчку Stack Pointer, красной строчкой выделен адрес 0х00DF, кликнем по F11, два раза. Адрес верхушки стека стал равен 0х0074, т.е. мы инициализировали стековую память по адресу 0х0074. В режиме отладки, мы можем инициализировать любой участок ОЗУ, просто 2 раза кликнув по строчке Stack Pointer и вручную набрав нужный нам адрес.

У стековой памяти есть еще оно полезное свойство, мы можем произвольно записать значение регистра общего назначения в стек c помощью команды push. И наоборот записать значение из стека в регистр общего назначения командой pop.
команда push – записывает значение РОН в стековую память по адресу, установленному в указателе стека, и вычитает из этого адреса единицу.
команда pop – записывает в РОН значение стековой памяти по адресу, установленному в указателе стека, и добавляет к этому адресу единицу.

Обратите внимание, что первая строка (Program Counter) стала равна 2 – это адрес программной строки, которая сейчас будет выполнена. (Program Counter) сокращенно PC – счетчик команд, это регистр в котором значение в процессе выполнения линейной программы инкрементируется, но при выполнении команд перехода значение PC может резко меняется. Для того, чтобы выполнение программы продолжить с нужной нам стоки, можно вместо метки записать выражение PC+/-N.
где, N - число строк перехода;
знаки, +/- обозначают переход вверх или в низ.
Например программу задержки можно записать без меток, таким образом:

dec temp1
brne PC-1

dec temp2
brne PC-3

dec temp3
brne PC-5
ret


Попробуйте переписать и убедиться, что программа работает. Можно легко перейти на любую строку программы, набрав ее в строчке Program Counter.

Итак, мы рассмотрели основные функциональные окна AVR Studio 5 и написали несколько программ. Как вы убедились программа достаточно проста по структуре и интуитивно понятна.
Для программирования микросхем рекомендую собрать аналог STK5000, который незаменим в случаях, когда неправильно прошиты фьюзы (биты конфигурации).
В последующих статьях рассмотрим внутреннюю структуру контроллеров AVR, и особенности программного управления. Акцент будет перенесен на особенности написания програм в ассемблере, уже выходя за рамки контроллера ATTINY2313, что даст вам болше возможностей для самостоятельного творчества.
Радик (galrad)
РФ. Республика Башкортостан. г.Уфа
Профиль galrad
1964г.р. Специальность - врач. Должность - доцент кафедры. Ученая степень - кандидат медицинских наук. Радиоэлектроника - увлечение с детства (с 15 лет). Приоритетные направления - микроконтроллеры, цифровая электроника, измерения, ремонт компьютеров и сотовых телефонов, и т.п. Второе высшее образование - инженер-электроник.
 

Понравилось? Палец вверх!

  • всего лайков: 12

Поделись с друзьями!

Связанные материалы:


Схема на Датагоре. Новая статья Программирование точных часов с применением алгоритма Брезенхама (Bresenham's Algorithm)... В свое время меня заинтересовала возможность реализации точного хода часов программно. Алгоритмы...
Схема на Датагоре. Новая статья Программирование микроконтроллеров в AtmelStudio 6. Часть 2. Одна программа на разных языках.... Для радиолюбителей, которые до определенного времени не использовали микроконтроллеры в своих...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 8... Перейдем к изучению встроенных таймеров. Изучение прерываний и особенно таймеров в...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 6... Продолжим разбор теоретических основ, без которых невозможно полноценное создание программ....
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 5... Для того чтобы писать более сложные программы, нужно хорошо представлять структуру и взаимодействие...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 3... Мы научились включать и выключать светодиоды, а как сделать, чтобы они сами заморгали? Понятно, что...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 2... Пишем первую программу!Большинство начинают с мигания светодиодов, и мы не исключение. Если...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 1... Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще...
Схема на Датагоре. Новая статья Грызем микроконтроллеры. Урок 2.... Предлагаю продолжить изучение микроконтроллеров… Второй урок будет посвящен по большей части...
Схема на Датагоре. Новая статья Программа «Filter for acoustic system 3.0.0.0»... Программа «Filter for acoustic system 3.0.0.0» Перед Вами русская версия программы «Фильтр для...
Схема на Датагоре. Новая статья WinDjView v.2.0.2... Доступна обновленная версия v.2.0.2., есть поддержка всех распространённых версий Windows (8, 7,...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega - 3. Прерывания.... Итак, наши светодиоды мигают, но мы не можем никак повлиять на программу, давайте добавим в схему...
<
  • Гражданин
14 октября 2011 02:13

Виталий / FlintOFF

Цитата
  • С нами с 14.02.2010
  • Ушёл в реал Пользователь offline
  • 5 комментариев
  • 1 публикация
 
  • 0
Спасибо, давно хочу овладеть микроконтроллерами.

<
  • Кандидат
14 октября 2011 09:25

Вадим / vadeg

Цитата
  • С нами с 14.01.2012
  • Ушёл в реал Пользователь offline
  • 28 комментариев
  • 0 публикаций
 
  • 0
Очень доступно объяснено про стек и счетчик программ. На самом деле иногда удобно не плодить метки, а воспользоваться методом PC+/- в качестве аргумента в условных br** и относительных переходах.
Стек у меня почему-то ассоциируется с походным рюкзаком, особенно когда с ним едешь в поезде и наши доблестные органы начинают тебя проверять, заставляя выкладывать весь рюкзак на сиденье. Вот тут-то и проявляется принцип первым вошел - последним вышел. smile
Опробовал я эту 5 студию, в общем честно кодил там несколько дней. Но не осилил, первое что взбесило - шрифты замыленные в редакторе, второе, это то что, стрелка при симуляции как бы и не прыгает по командам. Поковырял немного настройки - по быстрому не вышло это устранить. Дальше сижу на 4-ке. Т.к. шрифты для меня больная тема.

<
  • Главный редактор
14 октября 2011 20:38

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 650 комментариев
  • 261 публикация
 
  • 0
Цитата: vadeg
первое что взбесило - шрифты замыленные в редакторе
Да... претензия серьезная. Правда, можно установить любой шрифт, любой размер и любое начертание. Но это было бы слишком просто. wink

По умолчанию установлен 10 кегль шрифта - ставьте например 14, да еще и шрифтик подберите попривычнее, если штатный не катит. А мне этот Сonsolas очень приглянулся.

Цитата: vadeg
второе, это то что, стрелка при симуляции как бы и не прыгает
а вот это не понял

<
  • Гражданин
16 октября 2011 07:17

Алексей / zud

Цитата
  • С нами с 25.03.2009
  • Ушёл в реал Пользователь offline
  • 72 комментария
  • 0 публикаций
 
  • 0
Мужики!!!, хелп,хелп,хелп!!!!!
Помогите особо одарённому скачать AVR 5ый.
Зашёл на официал - а поанглийски-то ни курлычу и не вдыхаю!
Куда тыкаться?
Скачал с неофициала и систему снести пришлось!
Помогитеееееее!!!!!!, Плииииззззззз?

<
  • Главный редактор
16 октября 2011 09:57

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 650 комментариев
  • 261 публикация
 
  • 0
Прямая ссылка на as5installer-5.0.1163-full.exe (602Mb)
Будет работать, пока не смениться билд.

<
  • Гражданин
16 октября 2011 10:31

Алексей / zud

Цитата
  • С нами с 25.03.2009
  • Ушёл в реал Пользователь offline
  • 72 комментария
  • 0 публикаций
 
  • 0
Спасибо!
Ща попробую оттуда....

<
  • Кандидат
24 ноября 2011 07:51

Владимир / VIDIMEC

Цитата
  • С нами с 22.11.2011
  • Ушёл в реал Пользователь offline
  • 1 комментарий
  • 0 публикаций
 
  • 0
Спасибо за уроки!Будем грызть!

<
  • Прохожий
22 марта 2012 20:52

/ lexus-83

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
Всем доброго времени! Объясните плиз, с чего вдруг студия ругается при компиляции на строку: ldi temp,Ramend в программе (написанной несколько иначе) ? Вот ошибка,которую пишет: Operand(s) out of range in 'ldi r16,0x45f'

<
  • Прохожий
23 марта 2012 01:14

/ lexus-83

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
Разобрался. Может кому поможет ;) Данную программу я гоняю на atmega16, а не на tiny.Соответственно инициализация стека должна быть записана по другому.В формулировках я не силен, ибо только начал изучать сие волшебство...короче вот:

вместо этого:
ldi temp,Ramend
out SPL, temp

нужно вот так:
ldi temp,low(Ramend)
out SPL,Temp
ldi temp,high(Ramend)
out SPH,Temp

Добавление комментария


Налетай! Паяльники, станции, жала с доставкой
  • smilelolbyewinkyahoocoollaughing
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashguitar-manhandshake
    musicnegativenopardonshoksleepunknown
    wackoyawnblushbullyhashsmokingwhew
Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.