Сегодня нас окружает огромное количество техники. Микроконтроллеры есть практически везде – от современного утюга до трактора, их применение ограничивается только фантазией разработчика. Хотите создать игрушку, или двери, открывающиеся по отпечатку пальца, или панель управления с кнопками, тумблерами и индикаторами, или реализовать умный дом – везде пригодятся микроконтроллеры. Конечно, вместо них можно использовать компьютер, но для большинства задач это будет нецелесообразно. Я не буду вдаваться в подробности архитектуры – расскажу как запустить контроллер AVR первый раз.

Начинать знакомиться с AVR лучше всего, конечно, через Arduino и его аналоги – вы наверняка уже слышали о нем. По Arduino очень много документации в сети, поэтому не стану на нем останавливаться. Скажу лишь, что это просто контроллер с отведенными портами для удобного создания макетов (и не только), плюс его проще программировать (прошивать). Но мы не будем искать легких путей, хотя arduino Тоже пригодится, но уже в качестве программатора. Достать микроконтроллер можно в радиомагазине, а можно варварски разодрать что то из завалявшегося хлама, или достать из ненужной бытовой техники. С техникой могут возникнуть проблемы – не редко используются SMD варианты контроллеров – с ними уже как с конструктором не поработаешь . Поэтому решать вам – купить новый контроллер, PinBoard, или же разобраться, куда ведут дорожки на плате от б/у техники, подпаять к нужным точкам провода и выломать всё ненужное. Всё зависит от умения работать с паяльником и желания.
Чтобы контроллер работал, нужно для него написать программу и прошить, понятно что нужна среда разработки и программатор. Практически у любого микроконтроллера есть интерфейс ISP (расшифровывается как «Внутрисхемное программирование»). То есть программу можно записывать на контроллер уже в собранном устройстве. Существует множество схем и готовых решений. Проще всего прошивать через LPT– порт компьютера. Если не жалко пару у.е., можно достать простенький программатор в китайских магазинах. Я прошиваю контроллеры через Arduino. Arduino подключается к USB, в системе появляется COM-порт, в среде разработки Arduino необходимо выбрать File -> Examples -> Arduino ISP (Если на русском то Файл-> Примеры-> ArduinoISP). В меню «Сервис» указываем нужный порт (если не сделали этого ранее) и жмем кнопку «Загрузить». Ждем несколько секунд… Всё! Теперь наш Arduino – ISP программатор, осталось повтыкать шнурки и светодиоды согласно схеме ниже:
1. Между Reset и корпусом ставим конденсатор (не перепутайте полярность)
2. От +5V запитываем микроконтроллер; соединяем GND Arduinoи GND контроллера.
3. Соединяем порты Arduino и контроллера в следующем порядке:
|
№ пина Arduino |
Название вывода AVR |
|
10 |
Reset |
|
11 |
MOSI |
|
12 |
MISO |
|
13 |
SCK |
В разных моделях МК AVRномера выводов отличаются, поэтому я привел только их названия. Редко вместо MOSI и MISO используются TXD и RXD. В бытовых устройствах под все эти выходы обычно выделен отдельный разъем, поэтому прежде чем что то паять, прозвоните выходы, которые на первый взгляд никуда не подключены – скорее всего найдете то что нужно.
4. Подключаем светодиоды через резисторы (не меньше 200 Ом) к выходам Arduino:

|
№ порта Arduino |
Описание светодиода |
|
8 |
Красный. Загорается при возникновении ошибок. |
|
7 |
Синий. Загорается когда происходит обмен данными между МК и программатором. |
|
9 |
Зеленый. Плавно мерцает. Сигнализирует о готовности программатора к работе. |
Вообще светодиоды – по желанию. Зеленый должен плавно мигать (значит программатор готов к работе). Если горит красный – значит ошибка. Синий мигает в процессе обмена данными с МК. В общем красивая новогодняя гирлянда вышла :).
5. Конечно же нужно подключить к +5V и GND микроконтроллера, иначе кина не будет загорится красный светодиод и ничего не прошьется.
Если всё сделали правильно, после включения Arduino мигнет всеми светодиодами и начнет плавно мерцать зеленый.
Аппаратная часть готова, теперь настраиваем среду разработки. Здесь возможны варианты, мне лично больше нравится компилятор в комплекте с WinAVR. Скачать его последнюю версию можно тут: http://sourceforge.net/projects/winavr/files/WinAVR/. Если у вас Linux – справитесь сами, а в варианте для windows очень простой установщик. В качестве IDE рекомендую использовать Eclipse – для новичка не совсем прост в настройке, но избавит от многих проблем в будущем. В Eclipse можно разрабатывать программы под разные устройства и на разных языках. Для программирования MK AVR на C/C++ нужен плагин. Краткая инструкция имеется на сайте разработчика, как и сам плагин для связи Eclipse с WinAVR: http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download.
После установки плагина создаем новый проект, затем в свойствах проекта на вкладке AVR->AVRDude необходимо указать программатор. Жмем New.. Eсли у вас ArduinoISP программатор, то настроить необходимо приблизительно так:

В других IDE обычно подходит выбор программатора STK500.
Вместо COM3 необходимо указать COM-порт, который появляется при подключении Arduino. Boudrateжелательно выставить в 19200. При больших значениях могут возникать ошибки при прошивке (по крайней мере ATMEGA128 при больших битрейтах не работал). Как-нибудь обзываем конфигурацию и жмем OK. На вкладке «Target Hardware» указываем тип микроконтроллера и его тактовую частоту (если тактовая частота будет указана неверно, возможно будут некорректно работать некоторые команды (например, пауза в миллисекундах)). Других настроек не требуется. Если у вас ещё нет файлов в проекте – создайте «main.cpp» или «main.c». Скопируем в созданный файл стандартный пример:
#include<avr/io.h>
#include<util/delay.h>
void init_io(void)
{
DDRB = 0b11111111; // пины PB0..PB7 будут выходами.
}
int main(void)
{
init_io();
while(1) //создаем бесконечный цикл
{
PORTB= 0b11111111; // устанавливаем высокий уровень на пинах PB0..PB7
_delay_ms(500);
PORTB = 0; // Устанавливаем низкий уровень на пинах PB0..PB7
_delay_ms(500);
}
}
Жмем Project->Build, затем AVR->Upload. Если всё подключили правильно, программатор мигнет светодиодами и запишет программу на микроконтроллер. Отключите от программатора всё кроме питания и корпуса. Подключите к любому выводу порта B(PB0..PB7) , или ко всем сразу, светодиод через 200-600 Ом резистор (можно и больше). Светодиод будет загораться на пол секунды, затем гаснуть на такое же время. Конечно, напрямую нельзя включать и отключать приводы – для этого понадобятся дополнительные компоненты в схемах (здесь поможет proteus). Для подключения LCD дисплеев, пинпадов, датчиков и т. д. можно использовать готовые программные модули. В общем, при создании программы для микроконтроллера всё сводится к одному – прочитать содержимое порта и вывести данные в порт при каких-то условиях. Часть задачи может решать программа, а часть аппаратная логика вокруг микроконтроллера.А куда перенести решение задачи – на программную часть, или аппаратную решать разработчику. При переносе части задач на программную часть, придется задействовать большее количество портов ввода-вывода микроконтроллера.