Макетирование и программирование ATmega328P и ATtiny45 в Atmel Studio 7
В данной статье мы соберем схемы для программирования двух разных микроконтроллеров Atmel и обсудим необходимые настройки программного обеспечения.
В данной статье будет описано построение двух очень похожих схем: одна для программирования ATmega328P, другая для программирования ATtiny45. В статье приведены полные схемы программирования, а также подробные фотографии макетов на беспаечных макетных платах. Кроме того, также приведено введение в интегрированную среду разработки Atmel Studio 7.
Во-первых, аппаратное обеспечение
ATmega328P – это 28-контактный микроконтроллер от Atmel, один из линейки AVR. Вероятно, он наиболее известен, как наиболее часто используемый микроконтроллер в отладочных платах Arduino, но AT328P способен на гораздо большее, чем то, насколько он используется в Arduino. Если вы хотите увидеть некоторые доказательства этого утверждения, посмотрите на 660-страничное техническое описание.
ATtiny45 – 8-выводный микроконтроллер, который может считаться «младшим братом» ATmega328P. Он обладает многими из тех же функций, но у него не так много контактов ввода/вывода.
Для программирования ATmega328P и ATtiny45 используется последовательный периферийный интерфейс SPI; это трехпроводная (плюс общий провод) шина, состоящая из сигналов «Выход ведущего, вход ведомого» (Master Out, Slave In – MOSI), «Вход ведущего, выход ведомого» (Master In, Slave Out – MISO) и «Тактовый сигнал» (Serial Clock – SCK). Тактовый сигнал генерируется ведущим устройством (мастером) и используется для обеспечения синхронной связи между ведущим и ведомым (или ведомыми); поэтому SPI является «синхронной» шиной связи.
Схемы программирования
Схемы программирования показаны ниже. Обратите внимание, что резистор R2 и LED1 не требуются для программирования, но включены в схемы для тестирования, что будет описано ниже.
Выбор программатора
Доступно несколько программаторов, работающих с ATmega328P и ATtiny45; Atmel-ICE находится в верхней части списка, является прекрасным программатором и будет рассмотрен в следующей статье. Пока что у нас есть менее дорогостоящие варианты, и скупым автором статьи использовался программатор Sparkfun AVR Pocket Programmer. Если вы предпочитаете что-то другое, не стесняйтесь выбирать тот, который соответствует вашим предпочтениям и вашему кошельку. Просто убедитесь, что он использует SPI интерфейс, как описано выше, и будьте готовы внести соответствующие изменения в информацию в этой статье.
ВНИМАНИЕ! Обязательно загрузите и установите на компьютер соответствующий драйвер для AVR Pocket Programmer, прежде чем подключать программатор в первый раз. Если Windows будет разрешено установить неправильный драйвер, то это будет сложно исправить. Инструкции для получения драйвера AVR Pocket Programmer приведены ниже.
AVR Pocket Programmer поставляется с шлейфовым кабелем, который должен быть подключен к микроконтроллеру Atmel. Он оснащен тремя разъемами: разъем 2x5 (мама), который вставляется в штырьковый разъем на AVR Pocket Programmer, еще один разъем 2x5 (мама) ниже на кабеле примерно через 23 см (в данной статье не используется), плюс разъем 2x3 (мама) на другом конце кабеля. Распиновка разъемов показана ниже.
Сборки схем программирования на макетных платах
На следующих фотографиях показаны сборки схем программирования ATmega328P и ATtiny45 на беспаечных макетных платах. Шесть коротких перемычек используются для подключения необходимых проводов от разъема 2x3 (мама) к соответствующим контактам микроконтроллера на макете. Обратите внимание, что цвета проводов на фотографиях соответствуют обозначениям на схемах.
Список комплектующих
Кроме нескольких перемычек, для сборки схемы программирования понадобятся следующие комплектующие.
Обозначение элемента | Описание |
---|---|
U1 | Микросхема, ATmega328P-PU, флеш 32 КБ, DIP-28, 1,8–5,5 В |
U1 | Микросхема, ATtiny45-PU, флеш 4 КБ, DIP-8, 2,7–5,5 В |
R1 | Резистор, 10 кОм, 0,25 Вт |
R2 | Резистор, 470 Ом, 0,25 Вт |
LED1 | Светодиод, T1 3/4, желтый |
C1 | Конденсатор керамический, 0,1 мкФ, 50 В |
нет | Программатор, AVR Pocket, PGM-09825 |
нет | Макетная плата, беспаечная, 400 контактов |
А теперь программное обеспечение
Драйвер программатора AVR Pocket
Драйвер Windows для программатора AVR Pocket – тот же, что используется программатором Adafruit USBTiny. Перейдите на страницу Adafruit и нажмите на ссылку для подписанного драйвера USBtinyISP, созданного с помощью libusb v1.12. Это позволит вам загрузить zip-файл, содержащий два файла installer.exe: один для 32-разрядных систем, второй для 64-разрядных. Дважды кликните по тому, что подходит для вашего компьютера с ОС Windows, и драйвер будет установлен.
Только после установки правильного драйвера Windows вы можете в первый раз подключить программатор AVR Pocket к компьютеру. Вам понадобится кабель USB-A на miniUSB-B. Когда вы подключитесь, загорится синий светодиод PWR и красный светодиод Stat1; два синих светодиода могут также загореться и/или замигать. Windows попытается найти драйвер, при необходимости, вы должны указать Windows расположение правильного драйвера. После правильной установки программатор AVR Pocket появится в диспетчере устройств в устройствах libusb-winXX как "USBtiny"; он не будет перечисляться как COM-порт. Смотрите скриншот ниже:
Atmel Studio 7
Как и многие фирмы-разработчики микроконтроллеров, Atmel имеет собственную интегрированную среду разработки (IDE), которая работает с их аппаратными предложениями: Atmel Studio 7. Хотя это не единственный способ программирования микроконтроллеров Atmel, но это наиболее полнофункциональный способ для Windows 7, 8 и 10 (и для 32-х, и для 64-х разрядных вервий); к сожалению, она не может использоваться с операционными системами Linux и Mac.
Количество опций в Atmel Studio 7 может показаться для нового пользователя огромным. Таким образом, поэтапный подход, представленный в данной статье, значительно упростит процесс знакомства. Начните с загрузки и установки IDE на ваш компьютер. Руководство пользователя Studio 7 и большое количество дополнительной информации также доступны для загрузки.
В Studio 7 включена поддержка нескольких аппаратных программаторов, но точный выбор зависит от того, какой микроконтроллер Atmel вы собираетесь использовать. На скриншоте ниже справа перечислены программаторы, поддерживающие ATmega328P.
Как вы можете видеть, программатор AVR Pocket отсутствует в списке. Однако его всё еще можно использовать с Studio 7 с помощью программного обеспечения под названием AVRDude.
AVRDude
AVRDude – это утилита командной строки, которая используется для скачивания и загрузки данных с микроконтроллеров Atmel. Существуют версии, доступные и на Linux, и на Windows. На момент написания статьи последняя доступная версия – 6.3; ее можно скачать здесь. Пользователи Windows должны скачать avrdude-6.3-mingw32-zip (нажатие на ссылку запустит скачивание zip-файла!), распаковать файлы и установить AVRDude. Обратите внимание, что установка программы в корневой каталог диска необязательна, но упростит ее использование с Atmel Studio 7. Если доступна версия, более новая, чем 6.3, то вы можете установить ее по своему усмотрению. Руководство пользователя AVRDude доступно здесь.
Чтобы проверить правильность установки и работы AVRDude, выполните следующие действия:
- нажмите кнопку "Пуск" Windows;
- в поле поиска введите cmd и нажмите Enter. Откроется окно командной строки DOS;
- в командной строке перейдите в каталог, в котором установили AVRDude;
- введите
avrdude -c USBtiny
и нажмите Enter. Если всё хорошо, AVRDude вернет список поддерживаемых устройств Atmel.
Смотрите скриншот ниже для примера процедуры. Обратите внимание, что скриншот был усечен и отображает только часть списка поддерживаемых устройств Atmel.
Собираем всё вместе
Предположим, что программатор подключен к AVR на вашей макетной плате, как было описано выше, и вы почти готовы запрограммировать ваш AVR микроконтроллер. Для примера воспользуемся простым примером мигания светодиодом.
//New Blink.c
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
DDRB |= 0b00000001;
while (1) {
PORTB = 0b00000001;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(500);
}
return 0;
}
Теперь следуйте следующим инструкциям:
- Запустите Atmel Studio 7.
- В стартовом окне слева нажмите New Project. Откроется окно нового проекта.
- В окне нового проекта нажмите GCC C Executable Project, назовите проект New Blink, как показано выше, и нажмите OK. Откроется окно выбора устройства Device Selection.
- В окне выбора устройства выберите AVR устройство, которое вы используете: ATmega328P или ATtiny45, как показано ниже. Нажмите OK. Будет создан новый проект, и будет открыто окно проекта New Blink.
- Нажмите на меню Tools, выберите External Tools..., и нажмите кнопку Add.
- В поле Title введите название инструмента, которой создаете; хорошо, если название описывает устройство. Например, вы можете ввести комбинацию названия программатора и названия устройства.
- В поле Comand введите путь к месту, куда установили AVRDude, плюс команду для запуска AVRDude.
- В поле Arguments введите одну из двух следующих строк, в зависимости от AVR контроллера, который используете.
Для ATmega328P введите:
Для ATtiny45 введите:-c usbtiny -p m328p -v -U flash:w:$(TargetDir)$(TargetName).hex:i
-c usbtiny -p t45 -v -U flash:w:$(TargetDir)$(TargetName).hex:i
- В поле Initial directory введите путь к месту, куда установили AVRDude.
- Убедитесь, что поставлена галочка Use Output window, а в двух других чекбоксах галочки не стоят. Состояние окна должно быть похоже на скриншот ниже, но с учетом AVR контроллера, который вы используете.
- Нажмите Apply, а затем OK. Окно внешних инструментов должно закрыться.
- Скопируйте код программы, приведенный выше.
- Перейдите к окну New Blink.c в окне Atmel Studio 7 и вставьте в него код, приведенный выше.
- Если в правом верхнем углу Atmel Studio 7 не открыто окно менеджера проекта Solution Explorer, нажмите на выпадающее меню View и нажмите Solution Explorer. В правом верхнем углу должно появиться окно Solution Explorer.
- Кликните правой кнопкой на main.c и выберите "переименовать". Переименуйте файл main.c в New Blink.c.
- Нажмите на меню File и нажмите Save All.
- Нажмите на меню Build и нажмите Build Solution (собрать проект).
- Нажмите на меню Tools (инструменты) и нажмите на название инструмента, созданного в шагах с 5 по 11. Скомпилированный код New Blink должен будет быть загруже в AVR контроллер на вашей макетной плате, а светодиод LED1 должен начать мигать: ½ секунды включен, ½ секунды выключен, 60 раз в минуту.
Начало
По общему мнению, это был долгий процесс для простого мигания светодиода, но на самом деле вы успешно устранили четыре основных препятствия: создание аппаратной платформы для программирования микроконтроллеров AVR, установка интегрированной среды разработки Atmel Studio 7, интеграция внешней программы AVRDude и определение инструмента программирования для AVR микроконтроллера по вашему выбору. Будьте уверены, что в будущих проектах на AVR микроконтроллерах вам станет легче, что намного веселее.