AVR. 2. Первая программа

Ранее мы уже установили среду для разработки и научились создавать проект. В этом уроке мы напишем свою первую программу, в которой помигаем светодиодом, которая является своеобразным «Hello World» для микроконтроллеров.

Первая программа, первое устройство на atmeg’е

Первая программа, первое устройство на 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

Проект в proteus

Далее мы подробнее рассмотрим работу с портами ввода-вывода.

Скачать файлы к статье

9 комментариев »

Alex_EXE | 18.02.2013 | AVR |

9 комментариев на « AVR. 2. Первая программа»

  1. Bonio пишет 18.02.2013 в 19:06 #

    Какой интересный шнур программирования (фиолетовый). Можно про него поподробнее?

  2. Evgeny пишет 18.02.2013 в 21:42 #

    тоже хочу такой проводок))))))))

  3. Alex_EXE пишет 19.02.2013 в 22:53 #

    Это провод к идёт программатору, с одной стороны он подключен к последовательно идущим линиям у МК: MOSI, MISO, SCK, RESET, VCC, GND, с другой стороны к ISP разъему программатора USBasp.

  4. v_vovchek пишет 19.02.2014 в 03:00 #

    Хватит прикалываться (про проводок фиолетового цвета).
    Автору — спасибо!
    Ждем продолжения.

  5. Vl пишет 04.08.2014 в 19:55 #

    Программатор ISP заказанный с aliexpress или с ebay, я правильно понял? Как он в студии видится?

  6. Alex_EXE пишет 09.08.2014 в 04:51 #

    Почти, с hobbyking, особой разницы нет. Прошивал через Khazama AVR, напрямую из студии вроде не пробовал.

  7. ty пишет 02.11.2016 в 02:15 #

    какой светодиодик симпатичный , приятного зеленого цвета. Тоже хочу ..

  8. Alex99 пишет 25.12.2017 в 01:42 #

    Начинающий осваивать МК. С программой понятно. Хочется увидеть работу «в железе», а как залить прогу в МК непонятно, как там указать 8МГц встроенного генератора. Еще вроде надо JTAG отключать (или не надо?). Протеус — это потом, когда МК вживую заработает.

  9. Alex_EXE пишет 26.12.2017 в 10:04 #

    Настройка тактирования и доп. периферии выполняется фьюзами. Но в атмегах нужно быть остороным, т.к. неправильная комбинация приведет к окирпичиванию камня, для восстановления которого понадобится внешний источник тарирования 1-4 МГц.
    Так же в атмегах фьюзы инвертированы: 0 — это установлен, а 1 — не установлен.
    У меня готового материала на данные темы нет.

Комментарии RSS

Оставьте отзыв