Как написать код для AVR, программирование микроконтроллеров Atmel AVR на Си

Пишем программу для МК(МикроКонтроллера) Атмега.

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

Что такое микроконтроллер? Микроконтроллер это по сути микрокомпьютер с процессором, оперативной и постоянной памятью, портами ввода-вывода, во многих микроконтроллерах имеется аналого цифровой преобразователь.

Прежде всего для написания программ под Atmel AVR нужно установить программу Atmel Studio, скачать ее можно с официального сайта Atmel сайта Microchip (Microchip выкупил Atmel), программа полностью бесплатна:

http://www.microchip.com/mplab/avr-support/atmel-studio-7

Для того, чтобы проверить написанную программу и постоянно не собирать на настоящих физических компонентах  для проверки – понадобится также программа, эмулирующая работу железа, и эта программа – это Proteus, но вот она уже не бесплатна.

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


Итак,

Atmel Studio установлена.

(если при запуске или установке возникает ошибка “Cannot find one or more components.Please reinstall the application” (Не найден один или несколько компонентов.Пожалуйста, переустановите приложение.)- необходимо удалить программу, переименовать папку C:\ProgramData\Package Cache (не следует ее удалять, так как в случае чего, можно ее снова переименовать в исходное имя, если некоторые приложения после этого перестали работать), тогда программа установится и запустится нормально).

Запустили.

В левом верхнем углу выбираем:

File => New => Project

Дальше:

Выбираем GCC C Executable Project(на изображении под цифрой 1), В низу, в поле Name(2) указываем имя нашего проекта, в поле Location(3) можем выбрать местоположение проекта или оставить путь по умолчанию, нажимаем OK.


Затем выбираем модель нашего микроконтроллера из списка, в нашем случае это ATMEGA8:


В окне появится среда разработки написания кода, где уже будет стандартный код на Си и несколько закомментированных строк с указанием авторства и даты:

Под цифрой 1 находится окно написания кода, под цифрой 2 файлы с исходным кодом, библиотеки и все файлы, связанные с исходным кодом, в файле main.c находится текст нашего кода.

Что же делает этот код?

строка #include <avr/io.h> подключает стандартную библиотеку  портов ввода, вывода микроконтроллеров AVR,

ее можно найти по пути(если вы не поменяли путь при установке) “C:\Program Files\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr”

Функция main – стандартная входная функция Си, с который программа и начинает работу.

Внутри функции main находится цикл while, который длится бесконечно.

А в теле цикла ничего нет т.е. программа ничего не делает , просто идет бесконечный цикл, и выхода из функции  main не происходит , поэтому  там нет ключевого слова return, которое возвращает указанное значение.

Для того, чтобы скомпилировать написанный код, необходимо выбрать вверху Build => Build “Имя_Вашего_Проекта”.

Если код без ошибок, то программа скомпилируется и внизу будет написано Build succeeded.

В итоге скомпилированная прошивка будет в формате .HEX и будет лежать по адресу(опять же, если вы не изменили стандартное месторасположение):

C:\Users\Имя Пользователя\Documents\Atmel Studio\7.0\ИмяПроекта\ИмяПроекта\Debug\ИмяПроекта.hex

Примечание.Если выбрать вариант сборки Release, то прошивка будет лежать в соответствующей папке т.е. не в папке Debug, а в папке Release.


Код , который ничего не делает это не очень интересно, напишем программу, которая мигает 2 раза в секунду светодиодом:

#define F_CPU 1000000UL // 1 MHz Здесь задаем частоту микроконтроллера
#include <avr/io.h> //библиотека ввода\вывода
#include <util/delay.h> //библиотека задержки
 
int main(void) // начало основой программы
{
 
DDRD = 0xff; // установить все порты D(смотрите распиновку мк) как выводы
 
while (1) { // бесконечный цикл
 
PORTD = 0xff; // установить "1"(вкл) на всех линиях порта D
 
_delay_ms(250); // ждем 250 миллисекуд
 
PORTD = 0x00; // установить "0"(выкл) на всех линиях порта D
 
_delay_ms(250); // ждем 250 миллисекунд
 
} //закрывающая скобка бесконечного цикла
 
} //скобка входной  функции main

Компилируем код, получаем готовую прошивку.

Прошиваем этой прошивкой микроконтроллер, собираем схему на железе.

Если не знаете как прошивать, узнать можно здесь:

Как прошить микроконтроллер ATmega, AVR

В следующей статье узнаем как проверить написанный код в Proteus т.е. будем эмулировать работу железа.