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

 
 
 

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

📆13.10.11 🙋galrad 👀30 920 💬9

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

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

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


файлы проекта:
attiny2313_led_2.rar 🕗 12/10/11 ⚖️ 26,22 Kb ⇣ 109

Программа:
Исключён фрагмент. Наш журнал существует на пожертвования читателей. Полный вариант этой статьи доступен только меценатам и полноправным членам сообщества. Читай условия доступа!


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

Должно выглядеть примерно так:
“бегущий огонек”: beg_og1.wmv 🕗 12/10/11 ⚖️ 1,01 Mb ⇣ 74


“бегущая тень”: beg_ten1.wmv 🕗 12/10/11 ⚖️ 878,09 Kb ⇣ 69


“бегущая полоска”: beg_polos1.wmv 🕗 12/10/11 ⚖️ 831,7 Kb ⇣ 62


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


В программе появились новые команды и строчки. Мы изучим их в процессе отладки.
А сейчас вернемся в 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 лет. Приоритетные направления - микроконтроллеры, цифровая электроника, измерения, ремонт компьютеров и сотовых телефонов, и т.п. Второе высшее образование - инженер-электроник.
 

Читательское голосование

Нравится

Статью одобрили 6 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

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

 

 

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

 

Схема на Датагоре. Новая статья Использование МК ATMega163, ATMega163L, ATMega16 в Arduino IDE... Популярная среда разработки Arduino IDE привлекает большим количеством готовых библиотек и...
Схема на Датагоре. Новая статья Модуль ИК дистанционного управления ПК на микроконтроллере ATTiny26 для перелистывания презентаций. ИК-клавиатура на 2 кнопки... Привет всем датагорцам! Возникла у меня в рабочем порядке проблемка. Есть неплохой проектор на...
Схема на Датагоре. Новая статья Программирование точных часов с применением алгоритма Брезенхама (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.... Предлагаю продолжить изучение микроконтроллеров… Второй урок будет посвящен по большей части...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega - 3. Прерывания.... Итак, наши светодиоды мигают, но мы не можем никак повлиять на программу, давайте добавим в схему...
 

Общаемся по статье 💬

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

Комментарии, вопросы, ответы, дополнения, отзывы

 

<

FlintOFF

Виталий Читатель Датагора
  • Гражданин
Комментарий # 1 от 14-10-11, 2:13.
Ответить
  • С нами с 14.02.2010
  • 5 комментариев
  • 1 публикация
 
Спасибо, давно хочу овладеть микроконтроллерами.

<

vadeg

Вадим Читатель Датагора
  • Кандидат
Комментарий # 2 от 14-10-11, 9:25.
Ответить
  • С нами с 14.01.2012
  • 27 комментариев
  • 0 публикаций
 
Очень доступно объяснено про стек и счетчик программ. На самом деле иногда удобно не плодить метки, а воспользоваться методом PC+/- в качестве аргумента в условных br** и относительных переходах.
Стек у меня почему-то ассоциируется с походным рюкзаком, особенно когда с ним едешь в поезде и наши доблестные органы начинают тебя проверять, заставляя выкладывать весь рюкзак на сиденье. Вот тут-то и проявляется принцип первым вошел - последним вышел. smile
Опробовал я эту 5 студию, в общем честно кодил там несколько дней. Но не осилил, первое что взбесило - шрифты замыленные в редакторе, второе, это то что, стрелка при симуляции как бы и не прыгает по командам. Поковырял немного настройки - по быстрому не вышло это устранить. Дальше сижу на 4-ке. Т.к. шрифты для меня больная тема.

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 3 от 14-10-11, 20:38.
Ответить
  • С нами с 26.02.2006
  • 2 244 комментария
  • 273 публикации
 
Цитата: vadeg
  первое что взбесило - шрифты замыленные в редакторе
Да... претензия серьезная. Правда, можно установить любой шрифт, любой размер и любое начертание. Но это было бы слишком просто. wink

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

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

<

zud

Алексей Читатель Датагора
  • Гражданин
Комментарий # 4 от 16-10-11, 7:17.
Ответить
  • С нами с 25.03.2009
  • 77 комментариев
  • 0 публикаций
 
Мужики!!!, хелп,хелп,хелп!!!!!
Помогите особо одарённому скачать AVR 5ый.
Зашёл на официал - а поанглийски-то ни курлычу и не вдыхаю!
Куда тыкаться?
Скачал с неофициала и систему снести пришлось!
Помогитеееееее!!!!!!, Плииииззззззз?

<

Datagor

Игорь Котов Читатель Датагора
  • Главный редактор
Комментарий # 5 от 16-10-11, 9:57.
Ответить
  • С нами с 26.02.2006
  • 2 244 комментария
  • 273 публикации
 
Прямая ссылка на as5installer-5.0.1163-full.exe (602Mb)
Будет работать, пока не смениться билд.

<

zud

Алексей Читатель Датагора
  • Гражданин
Комментарий # 6 от 16-10-11, 10:31.
Ответить
  • С нами с 25.03.2009
  • 77 комментариев
  • 0 публикаций
 
Спасибо!
Ща попробую оттуда....

<

VIDIMEC

Владимир Читатель Датагора
  • Кандидат
Комментарий # 7 от 24-11-11, 7:51.
Ответить
  • С нами с 22.11.2011
  • 1 комментарий
  • 0 публикаций
 
Спасибо за уроки!Будем грызть!

<

lexus-83

Читатель Датагора
  • Прохожий
Комментарий # 8 от 22-03-12, 20:52.
Ответить
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
Всем доброго времени! Объясните плиз, с чего вдруг студия ругается при компиляции на строку: ldi temp,Ramend в программе (написанной несколько иначе) ? Вот ошибка,которую пишет: Operand(s) out of range in 'ldi r16,0x45f'

<

lexus-83

Читатель Датагора
  • Прохожий
Комментарий # 9 от 23-03-12, 1:14.
Ответить
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
Разобрался. Может кому поможет ;) Данную программу я гоняю на atmega16, а не на tiny.Соответственно инициализация стека должна быть записана по другому.В формулировках я не силен, ибо только начал изучать сие волшебство...короче вот:

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

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

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте корректны и вежливы, соблюдайте правила!


Налетай! Паяльники, станции, жала с доставкой

Офигенная миниатюрная рация на литии BaoFeng UV-5R, 5W, 5-15 км!

Тестер универсальный LCR-TC1 для транзисторов, конденсаторов, ESR, MOSFET и т.д.
  • smilelolhellowinkscepticthumbupbored
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashpartyhandshake
    musicnegativenowordspardonshoksleepunknown
    wackoyawnsainthelmethashsmokingwhew


Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.