AVR. 2. Первая программа
Ранее мы уже установили среду для разработки и научились создавать проект. В этом уроке мы напишем свою первую программу, в которой помигаем светодиодом, которая является своеобразным «Hello World» для микроконтроллеров.
Первая программа, первое устройство на atmeg’е
Задача: собрать простейшею схему из микроконтроллера и светодиода, и заставить светодиод мигать.
Создадим новый проект и называем его «flash led».
Схема
Возьмем наш подопытный Atmega16A, подключим выводы питания: +5В к VCC (10 нога) и землю к GND (11 нога). Светодиод с токоограничивающим резистором на 270-510Ом анодом подключим к выводу контроллера PC0 (22 вывод) и катодом через резистор к земле, как показано на схеме ниже.
Схема
Если использовать мекетку без пайки – то собранная схема будет выглядеть следующим образом.
Собранная схема
Я буду использовать внутрисхемный ISP программатор USBasp, от него же и питаю схему – это фиолетовый проводок на фотографии.
Прошивка
Повторюсь: для самого начала была выбрана самая простая задача – помигать диодом. Т.к.это наша первая программа на Си под Atmeg’у то не будем лезть в дебри, а воспользуемся всеми настройками по умолчанию.
#ifndef F_CPU #define F_CPU 8000000UL // рабочая частота МК (8МГц) #endif #include <avr /io.h> #include <util /delay.h> // для _delay_ms() int main(void) { DDRC = 0b00000001; // инициализация порта C while(1) { // LED on PORTC = 0b00000001; // PC0 = 1 = Vcc _delay_ms(500); // задержка 500мс //LED off PORTC = 0b00000000; // PC0 = 0 = GND _delay_ms(500); // задержка 500мс } }
Пояснение:
В самом начале указываем, на какой частоте работает наш камешек (по умолчанию используем внутренний генератор, настроенный на 8МГц), что и прописываем в первых трёх строчках. Если этого не сделать, то используемые в коде задержки могут работать неточно или даже очень сильно врать.
Далее подключаем используемые библиотеки:
avr/io.h – библиотека для работы с портами ввода вывода и
util/delay.h – библиотека, которая отвечает за задержки — это такие функции, как _delay_ms(), _delay_us(); для этой библиотеке, как раз в самом начале, и указывали частоту используемого генератора.
Весь основной код, как обычно для языка Си, выполняется в функции main.
Сначала инициализируем используемый порт C
DDRC = 0b00000001;
где говорим, что первый вывод порта C (PC0), у нас как раз к нему подключен светодиод, работает на вывод, когда остальные 7, которые сейчас нас не интересуют, на ввод.
Далее в бесконечном цикле wail(1) будет постоянно выполнять наше действие:
PORTC = 0b00000001;
включать диод, подавая логическую единицу (которая соответствует VCC – 5В) и выключать его, выставляя на первом выводе порта C – логический ноль (GND).
PORTC = 0b00000000;
А между включениями и выключениями будем ожидать пол секунды
_delay_ms(500);
После успешной компиляции можем полюбоваться правильной работой в proteus и на железе. В протеусе не забываем указать, что работаем от встроенного 8МГц генератора.
Проект в proteus
Далее мы подробнее рассмотрим работу с портами ввода-вывода.
Alex_EXE | 18.02.2013 | AVR |
Bonio пишет 18.02.2013 в 19:06 #
Какой интересный шнур программирования (фиолетовый). Можно про него поподробнее?
Evgeny пишет 18.02.2013 в 21:42 #
тоже хочу такой проводок))))))))
Alex_EXE пишет 19.02.2013 в 22:53 #
Это провод к идёт программатору, с одной стороны он подключен к последовательно идущим линиям у МК: MOSI, MISO, SCK, RESET, VCC, GND, с другой стороны к ISP разъему программатора USBasp.
v_vovchek пишет 19.02.2014 в 03:00 #
Хватит прикалываться (про проводок фиолетового цвета).
Автору — спасибо!
Ждем продолжения.
Vl пишет 04.08.2014 в 19:55 #
Программатор ISP заказанный с aliexpress или с ebay, я правильно понял? Как он в студии видится?
Alex_EXE пишет 09.08.2014 в 04:51 #
Почти, с hobbyking, особой разницы нет. Прошивал через Khazama AVR, напрямую из студии вроде не пробовал.
ty пишет 02.11.2016 в 02:15 #
какой светодиодик симпатичный , приятного зеленого цвета. Тоже хочу ..
Alex99 пишет 25.12.2017 в 01:42 #
Начинающий осваивать МК. С программой понятно. Хочется увидеть работу «в железе», а как залить прогу в МК непонятно, как там указать 8МГц встроенного генератора. Еще вроде надо JTAG отключать (или не надо?). Протеус — это потом, когда МК вживую заработает.
Alex_EXE пишет 26.12.2017 в 10:04 #
Настройка тактирования и доп. периферии выполняется фьюзами. Но в атмегах нужно быть остороным, т.к. неправильная комбинация приведет к окирпичиванию камня, для восстановления которого понадобится внешний источник тарирования 1-4 МГц.
Так же в атмегах фьюзы инвертированы: 0 — это установлен, а 1 — не установлен.
У меня готового материала на данные темы нет.