Логотип

Программирование AVR микроконтроллеров для начинающих

материалы в категории

Простые программы для микроконтроллеров самостоятельно. Светофор

часть 2

начало статьи Простые проекты на AVR микроконтроллерах

В первой части статьи мы сделали симулятор для нашего будущего проекта, теперь будем составлять прошивку. А для этого мы будем использовать программу Flowcode AVR v4.3.6.61 . Почему будем использовать устаревшую версию? Да потому что сама программа денег стоит, а на более старые версии можно спокойно и кейгены найти....

Ну, в общем, поехали...

Пишем управляющую программу при помощи Flowcode AVR v4.3.6.61

Запускаем Flowcode AVR v4.3.6.61. Выбираем “create a new flowcode flowchart”, в появившемся меню прокруткой выбираем тип микроконтроллера, нам нужен “Attiny13” (рис18,19,20). Далее появляется окно программы с панелями. В выпадающем меню «файл» выбираем «сохранить как», и указываем путь к созданной нами папке в корневом каталоге диска “myproject”, называем файл его именем на английской раскладке клавиатуры “svetofor”. И мы готовы к написанию алгоритма программы.

Описание Flowcode

Первая  инструментальная панель — это панель команд


Перечень представленных команд (с лева - на право на рис.21).Input (ввод), Output (вывод), Delay (пауза), Decision (ветвление), Connection Point (две точки соединения), Loop(цикл), Macro (макрос), Component Macro (макрос компонента, добавленного в программу), Calculation (вычисление),String Manipulation (строковые операции), Interrupt (прерывание), C Code (блок кода на языке Си), Comment(комментарий).

Ниже расположена вторая панель инструментов.


На ней расположено много всяких устройств, для подключения к портам микроконтроллера (рис.22).

Вообще я прилагаю к статье “help” на русском языке по работе с этой программой, если что, то заглядывайте туда, (правда перевод там смешной, но разобраться можно).

Далее давайте определимся с алгоритмом работы светофора и опишем его словами:
1.   Зажигается красный свет и горит, к примеру -  5 секунд (не смейтесь, у нас же всё - таки не настоящий светофор с перекрёстка);
2.   Зажигается желтый на 2 секунды (красный при этом не тухнет);
3.   Тухнет красный и желтый;
4.   Загорается зелёный на 5 секунд;
5.   Зелёный мигает 3 раза;
6.   Тухнет зелёный;
7.   Загорается желтый  на 2 секунды;
8.   Тухнет желтый;
9.   Повтор пункта 1 (или конец цикла).

Теперь этот алгоритм нужно нам запрограммировать в наш микроконтроллер.

Настроим выходы микроконтроллера, для этого на второй инструментальной панели выбираем «выходы» и «LED», на панели видим добавился наш светодиод (рис.23,24).


Кликнем на светодиоде правой кнопкой , выберем «расширенные свойства»(ext properties), выберем цвет, размер, и активный уровень (вспомним нашу модель в протеусе, светодиоды подключили с общим катодом, а значит активный уровень выбираем высокий) (рис.25,26) . Теперь ещё раз кликнем правой кнопкой на нём и выберем “connections” (вспомним модель в протеусе, у нас красный порт -  В0, желтый - В1, зелёный - В2.) (рис.27,28).

Таким образом подключаем все три наших светодиода (рис.29).

Теперь у нас есть чем управлять программно.

На клетчатом фоне видим два связанных элемента алгоритма, они неизменно присутствуют всегда. Без них никак нельзя это “BEGIN” и “END”, то есть начало и конец выполнения программы. Поскольку микроконтроллеры AVR  выполняют программу от начала и до конца, то выполнив «тело программы» он дойдёт до “END” и остановится. Нам этого не нужно, светофор ведь должен работать всё время, пока его не отключат.

Для этого установим бесконечный цикл выполнения нашей будущей программы. Для этого в первой панели инструментов находим значок “Loop”, что значит цикл, и перетягиваем этот значок на место, между “BEGIN” и “END” (рис.30) .

Теперь в теле этого цикла и будем осуществлять наш алгоритм. Первым пунктом у нас идёт - включить красный на 5 секунд. Перетягиваем значок “component macro” что значит макрос компонента, а компонент у нас это наш красный светодиод (кстати у него есть имя, он у нас LED0, это можно посмотреть если на нём кликнуть и посмотреть в панель свойств -  “property” (рис.31,32).


Далее, два раза кликнув по значку «макрос компонента» выбираем LED0  и ON, что значит – включить светодиод 0 (рис.33).

 

Можно ещё вставить комментарий, что бы было легче ориентироваться по своему алгоритму. Перетянем значок “comment”, два раза на нём кликнем, и пишем свой комментарий (рис.34).


Красный должен гореть 5 секунд, есть значок “DELAY”  что значит задержка (пауза), перетянем его и в его свойствах укажем единицу времени ( с ), и их количество ( 5 ) (рис.35).

 

Пунктом 2 у нас идёт включение желтого на 2 секунды, при этом красный не тухнет. Снова: макрос компонента LED1 (он у нас желтый), выбираем LED1, ON, далее DELAY , выставляем 2 и единицы измерения – секунды (рис.36).


Далее пункт 3, тухнет красный и желтый. И пункт 4, загорается зелёный на 5 секунд. Перетягиваем: макрос компонента , LED0, OFF (выключили красный), макрос компонента, LED1, OFF (выключили желтый), снова макрос компонента , LED2, ON (включили зелёный). Далее  перетянем DELAY, 5 sec. (рис.37) .

 

Пунктом 5, у нас зелёный мигает 3 раза, то есть тухнет затем пауза, загорается, пауза, и снова тухнет. Здесь немного подумаем, стоит ли переписывать одни и те же действия 3 раза? Конечно же, нет. Используем цикл, перетянем его и кликнем по нему два раза. Поставим галочку на LOOP COUNT (что значит количество циклов), поставим в поле нужное нам количество – это 3 цикла (рис.38). Для наглядности примем паузу между включением и выключением зелёного 0.5 секунды(или 500мс.). Перетягиваем теперь в тело нашего троекратного цикла: макрос компонента LED2, OFF, дальше DELAY, 500 ms, LED2, ON, и DELAY, 500ms. (рис.39).


Далее пункт 6, выключаем зелёный. Пункт 7 включаем желтый на 2 секунды. Пункт 8 – выключаем желтый.  (LED2, OFF; LED1, ON; DELAY, 2 sec.; LED1, OFF). Думаю, что такая запись Вам будет понятна, поскольку эти действия выполнялись уже неоднократно (рис.40).

Ну вот, и всё ! Мы написали алгоритм программы управления светофором. Давайте проверим, что у нас получилось. Для этого в выпадающем меню “view” выберем “project option”, откроется окно опций проекта. Установим тактовую частоту микроконтроллера 4800000 Гц. (это нужно для правильного расчёта пауз ), и скорость симуляции, в данном случае “fast as possible” (рис.41,42).

Теперь жмём «ОК», ищем и нажимаем синий треугольник вверху «RUN», (или нажимаем клавишу F5), и наслаждаемся симуляцией работы нашего светофора в Flowcode. Если не работает, или не так работает как надо, то ищем ошибки. Поскольку статья очень подробная то ошибок быть не должно.

Приступим теперь к компиляции проекта. В выпадающем меню “chip”, выбираем “compile to hex”. Появляется окно компилятора, и индикация его работы (рис.43).


Должно получится так как на картинке, если ”Return code=1”, проверяем путь к файлу проекта. Напомню что названия всех папок в пути от корневого каталога и файла должно состоять только из латинских символов. Иначе компилятор будет выдавать ошибку (рис.44).

 

Открываем папку с проектом, и смотрим на наш HEX файл прошивки (рис.45,46).



А вот и наш Си файл (рис.47,48).

 

А это алгоритм работы программы

Вот видео всего того что тут было написано:

Собственно полученная нами прошивка (код).


И программа на СИ (находится в архиве ниже).

Теперь возвращаемся к нашему проекту в Proteus professional. Нам нужно проверить, функционирует ли полученный нами код в модели созданного нами устройства, или нет. Для этого открываем наш файл svetofor.DSN (он у нас в папке myproject), делаем двойной клик на микроконтроллере, откроется окно его свойств (рис.50), так называемые фьюзы поставьте такие как на рисунке (WDTON=1; CLKDIV8=1; RSTDISBL=1; CKSEL=10; SUT=10).


Выберите путь к “Program file” нажав на кнопку с папкой (укажите путь к нашему HEX файлу) (рис.51).

 

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


Источник: http://cxem.net

Почта сайта