Логотип

Если Вы хотите обучаться программированию микроконтроллеров, но попали, сюда не прочитав предыдущих уроков, то советую начать изучение материала с самого начала.

Программирование микроконтроллеров. Урок 3
(Установка CV_AVR и написание первой программы)

Урок 3 (Установка CV_AVR и написание первой программы)

На предыдущем уроке мы с вами подключили МК к компьютеру и научились загружать в него программу, а также читать и стирать память контроллера. Может случится так, что этого будет вполне достаточно т.к. в интернете полно реализованных проектов, для сборки которых только и надо смонтировать устройство и прошить прилагаемую к нему программу. Но я-то знаю, что мало кто хочет быть «обезьяной», таскающей билетики счастья, каждый видит себя «шарманщиком».

И поэтому продолжим. Для этого урока нам понадобится скачать дистрибутив CodeVisionAVR V3.32a Evaluation и установить его на компьютер. Никаких подводных камней при инсталляции быть не должно, но если вдруг что-то стало не понятно, то процесс установки хорошо описал М.Б. Лебедев в книге «CodeVisionAVR пособие для начинающих» на страницах с 10 по 17. Также в этой книге на страницах с 18 по 82 описана вся среда разработки. Перед началом работы я бы рекомендовал в вкратце пробежаться по этим главам что бы не тыкаться в первую попавшуюся кнопку.

Перед тем как написать программу нам необходимо подключить светодиод к контроллеру чтобы потом его торжественно зажечь. Подключаем светодиод согласно схеме

Схема подключения светодиода Собраная схема подключения на макетной плате

Схема подключения светодиода

Собраная схема подключения на макетной плате

Что бы не перепутать плюс (анод) с минусом (катод) на светодиоде, надо помнить два простых правила. Для выводных круглых светодиодов анод всегда длиннее катода, а если выводы уже обкушены, то на корпусе светодиода должна быть небольшая лыска со стороны катода.

Я надеюсь, что вы не седели сложа руки и прочитали всё, что я просил. Если так, то о портах ввода/вывода вы уже знаете почти всё. Но не лишним будет повторить о том, что разные модели AVR микроконтроллеров имеют от одного до семи портов. В Mege 8 таких портов три (B, C, D) при этом, в зависимости от количества выводов, МК порты могут быть полные, восьми разрядные, и не полные. Каждый вывод порта может быть сконфигурирован как на передачу данных, так и на прием. При этом выводы порта могут находится в трех состояниях: первое состояние, когда на выходе микроконтроллера низкий потенциал (замкнут на общий); второе состояние, когда на выходе высокий потенциал (напряжение питания); третье состояние, когда вывод сконфигурирован как вход. За конфигурацию портов отвечают регистры DDRx (где х буква обозначающая порт – например DDRB) если порт не полный, то старшие разряды этого порта доступны только для чтения и при обращении к ним возвращают (0). Повторюсь. Регистры DDRx определяют в каком режиме будет работать тот или иной вывод МК. Если разряд вывода установлен в (1), то вывод будет работать как выходной, а если в (0), то вывод будет работать на прием данных. При запуске МК все выводы портов сконфигурированы на прием данных, то есть находятся в третьем состоянии. Принимаемые контроллером данные могут быть как аналоговые, так и цифровые. Аналоговые данные обычно обрабатываются либо АЦП (аналогово цифровым преобразователем), либо компаратором, а вот снимать цифровые данные поступающие на выводы МК можно как многочисленной периферией, с которой мы познакомимся позднее, так и непосредственно с регистра PINx. В CV_AVR читать входящие данные можно как со всего регистра целиком, так и с конкретного вывода обращаясь непосредственно к его разряду. Достаточно указать номер разряда, к которому мы обращаемся. Например, PINB.2 говорит о том, что мы хотим посмотреть какой потенциал (низкий – 0 или высокий – 1) установлен на выводе контроллера, которому соответствует этот разряд (16 вывод Mega_8 в DIP корпусе). Надо отметить тот факт, что регистр PINx предназначен только для чтения. Бесполезно пытаться записать в него какие-либо данные.

А вот чтобы зажечь светодиод нам необходимо будет сконфигурировать вывод МК как выходной записав в необходимый разряд регистра DDRx единицу (1) (например, DDRB.0 = 1;). И как только мы это сделаем то на выводе контроллера появится либо низкий, либо высокий потенциал. Это будет зависеть от данных находящихся в регистре PORTx. Поэтому при инициализации МК в начале его работы принято в первую очередь устанавливать начальные значения разрядов в PORTx, а уже затем конфигурировать порт. Регистры PORTx отвечают за выходные состояния выводов контроллера. Эти порты содержат данные о текущим состоянии выводов МК. Если в разряд порта записана единица (1), то на выводе порта будет высокий потенциал, а если ноль (0) – низкий. Для всех выводов, которые будут сконфигурированы на прием данных в PORTx необходимо записать нули, а вот для выводов, которые сконфигурированы на выход, записывают данные в зависимости от их проектного первоначального состояния. В дальнейшем по ходу программы эти состояния могут неоднократно меняться.

Хочу обратить внимание на вывод RESET. Хоть у Mega_8 он и является таким же выводом, как и все остальные, но пока вы не набрались достаточно опыта в работе с контроллерами, не советую конфигурировать этот вход как линию выхода. Потому как могут возникнуть проблемы с дальнейшим программированием контроллера.

В общем это пока всё, что надо знать о том, что и как работает в микроконтроллере на ближайшие занятия. Теперь только Си в чистом виде. Но поверьте скучно не будет.

Итак, вернемся к нашей среде разработки. Открытие нового проекта в CV_AVR на мой взгляд немного мутное занятие. Начнем с того что в меню File/New/ нажимаем меню Project и в выпавшем меню нажмем «Yes». Затем в меню выбора типа чипа оставляем точку в строке с надписью «ATmega». Про автоматический генератор программ в CV_AVR написано в М.Б. Лебедев «CodeVisionAVR пособие для начинающих» 2008г. Страницы 372…353. На данном этапе вдумчиво читать это не требуется, но знать, где посмотреть информацию в случае необходимости, надо обязательно.

Открытие проекта в CV_AVR Открытие проекта в CV_AVR

Открытие проекта в CV_AVR

Открытие проекта в CV_AVR

Затем выбираем наш контроллер в меню «Chip». Затем во вкладке «Program» выбираем пункт «Generate, Save and Exit» (генерировать, записать и выйти). Необходимо сказать о том, что частота работы Mega_8 по умолчанию 1МГц. О том, как ее изменить мы поговорим позже.

Открытие проекта в CV_AVR Открытие проекта в CV_AVR

Открытие проекта в CV_AVR

Открытие проекта в CV_AVR

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

Открытие проекта в CV_AVR

ЭОткрытие проекта в CV_AVR

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

Открытие проекта в CV_AVR

Открытие проекта в CV_AVR

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

Минимальный программный код со строкой включения светодиода

Минимальный программный код со строкой включения светодиода

Теперь необходимо скомпилировать нашу программу и прошить ее в контроллер. Для этого необходимо нажать на кнопку «собрать всё». Если компиляця прошла успешно, то на экране появится справка, в которой указаны параметры компиляции.

Компиляция Справка р компиляции

Компиляция

Справка р компиляции

Теперь запускаем PoniProg, открываем наш скомпилированный файл, который по умолчанию находиться по адресу – папка проекта/Debug/Exe/имя файла.hex и программируем МК. Наслаждаемся горящим светодиодом.

Горящий светодиод

Горящий светодиод

Для проверки работы программы вы можете нажать на кнопку RESET. Светодиод должен моргнуть и снова загореться. Это укажет на то, что все работает как и до′лжно.

Насладившись практической частью можно переходить к теории.

Начнем с того, что рассмотрим блок схему нашей программы. Не думайте, что блок схемами пользовались только в компьютерной «древности». Существует действующий ГОСТ 19.701-90 Единой Системе Программной Документации. Так вот наша программа, изображенная с помощью блок-схемы будет выглядеть вот так.

блок-схема

На этой блок-схеме нумерация блоков соответствует нумерации строк программы. Блок (Начало) является первой строкой программы, в которой обычно находится описательная часть, из которой можно понять назначение данной программы, ее версию, имя разработчика и т.д. В строке 7 присваиваем регистрам собственные псевдонимы, а также указываем псевдонимы для других элементов внутренней организации МК. Описание присваивания можно посмотреть, открыв файлы «mega8.h» и «mega8_bits.h» в колонке проекта. В строке 12 производим конфигурацию вывода порта «B», а так как при запуске МК данные всех портов равны «0», то стоило нам сконфигурировать вывод порта (В) на выход, цепь резистор диод замкнулась на общий контакт, и пошедший по ней ток заставил светиться наш светодиод. В строке 14 - 19 программа входит в бесконечный цикл «while (1)» (W) выхода из которого нет. Поэтому блок (Конец) у меня стоит особняком. Но не кто не запрещает нам нажать кнопку RESET и перезагрузить контроллер начав программу сначала.


Для следующего занятия нам понадобится помимо уже собранной нами схемы еще и:
   Резистор 10 кОм – 1шт.;
   Кнопка, нормально разомкнутая без фиксации – 1 шт.


К следующему уроку необходимо почитать::
   М.Б. Лебедев «CodeVisionAVR пособие для начинающих» 2008г. Страницы 83…155 . О работе в среде CV_AVR можно прочитать бегло просто чтобы знать где искать нужную информацию если вдруг возникнет вопрос по работе в среде разработки.
   М.Б. Лебедев «CodeVisionAVR пособие для начинающих» 2008г. Страницы 156…175 .
   Ю.А. Шпак «Программирование на языке С для AVR и PIC микроконтроллеров» 2006. Страницы 107…110.
   Майк МакГрат «Программирование на С для начинающих» 2016. Страницы 10, 14…15, 18…19.


Ах да… чуть не забыл. При запуске CV_AVR будет автоматически загружаться последний рабочий проект. Для того, чтобы загрузить другой проект необходимо запустить файл, находящийся в папке проекта с расширением (*.prj).


На сегодня всё. Удачи.


16.05.18


Если вдруг найдете в статье неточности или заблуждения. Напишите мне об этом. Я подправлю.




Приложение:
Схема подключения, блок-схема, проект CV_AVR