3.16M
Категория: ЭлектроникаЭлектроника

Программирование микроконтроллеров ATmega8 «Бегущие огни»

1.

Программирование
микроконтроллеров
ATmega8
«Бегущие огни»
Делал(а) учащееся 9Б класса-Лихнякевич Юлия

2.

Микроконтроллер ATmega8 «Бегущие огни»
Проект по программированию микроконтроллеров ATmega8 на тему «Бегущие огни»
имеет несколько ключевых целей и задач, нацеленных на развитие навыков в области
электроники и программирования.
Основные цели:
o
o
Изучение архитектуры микроконтроллера ATmega8 – понимание его
структуры и возможностей, программирования ввода-вывода.
Внедрение основных понятий схемотехники – создание простейших
электрических схем для управления светодиодами.
Задачи проекта:
o
o
o
Разработка схемы подключения – составление схемы, в которой будет
использоваться несколько светодиодов, подключенных к GPIO-портам.
Программирование функции бегущих огней – написание кода для
управления последовательным включением и выключением светодиодов, с
заданным интервалом.
Отладка программы – тестирование кода на реальном микроконтроллере,
выявление и исправление ошибок.

3.

Актуальность проекта:
#1
#2
#3
Данный проект
способствует развитию
навыков проектирования,
отладки и тестирования
Наглядно демонстрирует
принципы работы с
временными задержками
и цикл. алгоритмами
Сп. Изучение базовой
концепции упр. яркостью
и последовательностью
вкл. СД
#4
#5
Дает понимание основ
программирования
микроконтроллера
Получение важных
навыков для работы в
области цифровой
электроники и
робототехники
и

4.

Теория 1
Мой выбор пал на 8-битный микроконтроллеры AVR, семейства ATMEGA
8. Выбор определился, доступностью, наличием множества
любительских разработок, огромным количеством учебного материала.
Наличием разнообразных встроенных компонентов
и функциональностью этого семейства. Для AVR созданы разные
интегрированные среды разработки.
IDE – это система программных средств, используемая программистами
для разработки ПО, в состав которой входят:
• текстовый редактор,
• компилятор и/или интерпретатор,
• средства автоматизации сборки,
• отладчик.
Для написания программы, я воспользуюсь бесплатной
-
IDE ATmelStudio версии 7.0 Она позволяет создавать проекты,
и писать программы как в ассемблере, так и на СИ.

5.

Теория 2
DDRC = 0b0000001;
Здесь префикс 0b идентифицирует следующее за ним
число как двоичное, а порядковый номер бита
отвечает номеру бита внутри порта. То есть
последний (крайний правый) разряд этого числа
соответствует PC0, предпоследний – PC1 и т. д. Как
итог: PC0 настроен как выход, все остальные разряды
(PC1...PC6) – как высокоимпедансные входы.
Поскольку порт С в Atmega8 содержит не 8 разрядов,
а 7, то и количество битов в двоичном коде равно 7.
Часто функциональное назначение отдельно взятого
вывода удобнее задавать побитовой настройкой. Для
того, чтобы нам настроить PC0 как выход, в этом
случае следует записать следующую команду:
DDRC |= ( 1 << 0 );
Эта запись означает, что для нулевого разряда порта
С (номер разряда указывает последняя цифра), т. е.
для вывода PC0 мы прописали в DDR единицу и тем
самым настроили его как выход.
А вот, если бы нам туда понадобилось прописать
ноль, т. е. настроить PC0 как вход, то команда
выглядела бы так:
DDRC &= ~( 1 << 0 );

6.

Теория 3
Регистр выходных
данных порта PORT
Служит для управления состоянием
вывода. Если вывод (контакт)
сконфигурирован как выход, то единица
в соответствующем бите регистра
PORTx формирует на выводе сигнал
высокого уровня, а ноль – формирует
сигнал низкого уровня.
Если вывод (контакт) сконфигурирован
как вход, то единица в бите регистра
PORTx подключает к выводу внутренний
подтягивающий pull-up резистор,
который обеспечивает высокий уровень
на входе при отсутствии внешнего
сигнала.
Воспользуемся предыдущими примером, в
котором мы установили вывод PC0 как выход, т.
е. использовали команду:
DDRC = 0b0000001;
Тогда, чтобы установить на этом выходе
высокий логический уровень -
PORTС = 0b0000001; – в двоичном коде
А для того, чтобы установить низкий уровень –
PORTС = 0b0000000; – в двоичном коде

7.

Теория 4
Для начала запускаем программу Atmel
Studio:
o Кликаем по вкладке New и далее Project.
o В открывшемся окне выбираем язык
программирования C++.
o В строке для ввода Name – название проекта,
например, Svetodiod.
o В графе Location – место желаемого расположения
папки с файлами проекта.
o В качестве типа проекта выбираем – GCC C
Executable Project.
o Жмём – ОК.
o В новом окне находим и выделяем микроконтроллер
ATmega8 и опять нажимаем кнопку OK.
o После проделанных манипуляций Atmel Studio нам
автоматически сформировала
заготовку
(шаблон)
CREDITS:
This
presentation template was created by
программы:
Slidesgo,
includingцветом,
icons byявляется
Flaticon,
and infographicsкоторые
Текст, в нашем случае выделенный
зелёным
комментариями,
&
images
by
Freepik
полностью игнорируются компилятором.
Комментарии могут быть многострочными (как в приведённом шаблоне), где текст
помещается между /* и */, а могут быть однострочными.
Однострочный комментарий обозначается двумя косыми линиями перед текстом и действует
в пределах одной строки, например: // Здесь написан однострочный комментарий.

8.

Теория 5
Переходим к собственно
программе прошивки.
Знак # в начале строки означает,
что данная команда является
директивой препроцессора, т. е.
содержит в себе некоторые
инструкции, которые выполняются
в первую очередь и работают,
невзирая на весь остальной код.
Далее заготовка из Atmel Studio
выдаёт нам следующую строку:
int main(void)
В данной строке объявляется
функция main, с которой
начинается выполнение
программы.
1.
#include <avr/io.h>
В данной строке подключается библиотека
микроконтроллера, в которой находятся определения
констант, имён регистров и всего прочего, что может
понадобиться для выполнения базового ввода-вывода
информации. Для корректного выполнения
микроконтроллером некоторых функций, в настройках
проекта необходимо прописать директиву, указывающую – с
какой тактовой частотой будет работать микроконтроллер.
Такой директивой является:
2. #define F_CPU 1000000UL
Так как частота по умолчанию для ATmega8 (при работе со
встроенным генератором) равна 1 000 000 Гц, то это
значение мы и объявим в виде числа 1000000.
3. #include <util/delay.h>
При написании кода на языке Си в Atmel Studio имеется
очень удобная функция задержки выполнения программы
_delay_ms(). Для включения данной функции её необходимо
предварительно прописать директивой.

9.

Теория 6
Далее в нашей заготовке прописана функция:
while (1) {}
Данная функция обозначает бесконечный цикл. Это говорит о том, что код
программы, находящийся в теле данной функции, будет повторяться
бесконечное число раз, т. е. программа будет зациклена. Теперь внутри
цикла можно записывать команды управления светодиодом.
Для того, чтобы управлять уровнем напряжения на любом выходе служит
регистр PORTх Если бит установлен в единицу, то на выходе будет
уровень близкий к напряжению питания микроконтроллера, если бит
установлен в ноль, то на выводе будет напряжение близкое к нулю.
Установим логическую 1 на выходе PC0, заставим светодиод светиться:
PORTC |= (1 << PC0); / PORTС = 0b0000001;
После того как светодиод зажжётся, поставим задержку. Для этого
существует команда _delay_ms(). Эта функция осуществляет задержку
выполнения последующей команды на время, выраженное в
миллисекундах и численно равное числовому значению, находящемуся
внутри круглых скобок.
_delay_ms(500);
будет поддерживать высокий уровень на PC0 в течении 500 мс.
Сбросим его в ноль сразу по прошествии 0,5 сек посредством команды:
PORTC &= ~(1 << PC0);
_delay_ms(500);

10.

Написание программы
1
o Заходим в Atmel Studio
o Кликаем по вкладке New и далее Project.
o В открывшемся окне выбираем язык
программирования C++
o В строке для ввода Name – название проекта
o В графе Location – место желаемого
расположения папки с файлами проекта.
o В качестве типа проекта выбираем –
GCC C Executable Project
o В новом окне находим и выделяем
микроконтроллер ATmega8.
o После проделанных манипуляций Atmel Studio
нам автоматически сформировала заготовку
(шаблон) программы
o Далее подключаем нужные библиотеки
то есть: #include <avr/io.h>, #include <util/delay.h>, #include <avr/interrupt.h>. Так же можно
присвоить переменные некоторым значениям по типу #define S 50, #define HH 500, #define Sh 400,
#define R 50 и т.п.
o Следующим шагом мы создаем необходимые массивы для удобства написания кода
o Устанавливаем вектор прерывания INT0

11.

Написание программы
2
o Переходи к телу функции
o настраиваем порты входа и выхода, а
также порты прерывания
o Переходим к While (пока), туда мы
пишем условия для работы
программы микроконтроллера, то
есть if-если
Вид у программы будет
следующим:
English     Русский Правила