Микроконтроллеры ATmega328P / ATtiny45 программирование

Микроконтроллеры AVR ATmega328P и ATtiny45 – программирование

Фирмой «Atmel», наряду с огромным ассортиментом чипов, выпускаются микроконтроллеры двух видов, снискавшие особое признание в обществе электронщиков. Микроконтроллер ATmega328P и другой продукт компании «Atmel» – чип ATtiny45. Обе популярных микросхемы несколько отличаются одна от другой. Тем не менее, чтобы запрограммировать микроконтроллер  ATmega328P либо прошить чип ATtiny45 программным кодом, применяется практически одинаковый схематичный и программный подход. Рассмотрим подробнее технические способы: программирование ATmega328P и ATtiny45, а также необходимое для прошивки указанных микроконтроллеров программное обеспечение.

Микроконтроллеры ATmega328P и ATtiny45 семейства AVR

Программируемый чип ATmega328P представлен 28-контактным микроконтроллером, входящим в семейство AVR. Микроконтроллер хорошо знаком обладателям конструктора «Ардуино», где используется в качестве основного компонента электронного набора.

Однако микроконтроллер ATmega328P способен делать куда больше, чем выжимает из этого чипа популярный электронный конструктор «Arduino». Доказательств тому масса, стоит лишь посмотреть фирменный даташит (datasheet) микроконтроллера ATmega328P.

Микроконтроллеры семейства AVR
Микроконтроллеры семейства AVR нашли широчайшее применение в практике конструирования электронных устройств различной сложности. Серия ATMega и ATiny часто выбираются для аппаратного программирования

В тесной связке с «братом по крови» выступает другая микросхема — ATtiny45. Но здесь налицо явная отличительная черта: микроконтроллер ATtiny45 имеет 8-контктный форм-фактор.

Микросхема ATtiny45 обладает многими функциями, присущими AT328P. Однако функциональность ATtiny45 несколько ограничена по причине малого числа контактов ввода-вывода.

Традиционно программирование ATmega328P и ATtiny45 осуществляется через последовательный периферийный интерфейс (SPI). Контактная шина на 3 проводника, плюс «земля». По шине данных следуют сигналы:

  1. Вход приёма данных (MOSI)
  2. Выход передачи данных (MISO)
  3. Вход синхронизации приёма(SCK)

Сигнал SCK (SCLK) генерирует ведущее устройство (программатор). Этим сигналом обеспечивается синхронная приём/передача между ведущим и ведомым устройствами. По сути, интерфейс SPI следует рассматривать «синхронной» коммуникационной шиной.

Выбор физических программаторов под AVR микроконтроллеры

Существует масса программаторов, которыми доступно программировать ATmega328P и ATtiny45. Например, профессиональная разработка «Atmel-ICE» от родной чипам компании «Atmel».

Фирменный программатор считается лучшим из всех, пригодных прошивать AVR и другие микросхемы. На китайском AliExpress можно найти по цене от 5000 руб. и выше.

Программатор AVR Pocket Programmer
AVR Pocket Programmer: 1 — входной интерфейс USB; 2 — ISP коллектор; 3 — выходной интерфейс ISP; 4 — буферные элементы 74АС125; 5 — переключатель режима питания; 6 — основной чип ATtiny 2313

Для любителей-электронщиков этот вариант финансово обременительный. Поэтому логичным видится более простой выбор – USB программатор «AVR Pocket Programmer». Нечто подобное доступно купить, к примеру, здесь. В продаже есть другие, более дешёвые программаторы (от 200 руб.), но не проверенные на практике.

На крайний случай несложно собрать программатор «AVR Pocket Programmer» своими руками. Принципиальная схема устройства построена на чипе ATtiny2313. Внешние элементы – лишь несколько резисторов, стабилитронов, светодиодов.

Принципиальная схема программатора AVR Pocket Programmer
Принципиальная схема программатора AVR Pocket Programmer — достаточно простая, вполне доступная для сборки устройства программирования своими руками

Сигнальные линии (MICO, MOSI, SCK) желательно (но не обязательно) буферизировать. Поэтому следует дополнить схему буфером, к примеру, использовать микросхему 74AC125.

Такой буфер, кстати, применяется на фирменной сборке. Не исключается и транзисторный вариант буфера.

Для работы схемы программатора потребуется драйвер под USB. Возможно, потребуется также программный продукт Zadig, универсальный инсталлятор под Windows для установки общих драйверов USB (версия под Windows 7 и выше):

  • WinUSB
  • Libusb-Win32
  • Libusb0
  • LibusbK

Прошивка и утилиты для «AVR Pocket Programmer» находятся здесь. Драйвер программатора предпочтительно ставить в систему Windows до подключения физической схемы к ПК.

Подключение микроконтроллера и программирование

Микроконтроллеры AVR программируются через интерфейс SPI посредством маршрутизации сигналов через шесть линий:

  • VCC (напряжение питания),
  • GND (сигнальная земля),
  • RST (программный сброс),
  • MOSI (приём данных),
  • MISO (передача данных),
  • SCK (сигнал синхронизации).

Для маршрутизации всех отмеченных сигналов между устройствами, как правило, используется один из двух стандартизированных разъемов:

  1. 6-контактный разъем (2×3).
  2. 10-контактный разъём (2×5).

Разъёмы соединяются с платой программатора и программируемым устройством через шлейф-кабель. Фирменная плата программатора «AVR Pocket Programmer» комплектуется всеми необходимыми аксессуарами.

Контактные разъёмы интерфейса ISP
Два типа контактных разъёмов интерфейса ISP применимы к использованию при работе совместно с инструментом программирования

На фирменной плате программатора присутствует переключатель режима питания. Если переключатель находится в положении «Power Target», плата запитана напряжением 5В от USB.

Иначе, в положении переключателя «No Power», питание на контакте 5В отсутствует. Этот вариант — «No Power», используется для программирования чипов с малым питающим напряжением (3,3В или 1,8В).

Микроконтроллеры: программирование утилитой AVRDUDE

Утилита AVRDUDE — это инструмент для командной строки Windows. Чтобы применить этот инструмент, нужно запустить «командную строку» Windows (Пуск -> Выполнить). Затем рекомендуется проверить готовность утилиты вводом команды:

avrdude -c usbtiny -p atmega328p

Команда предполагает наличие подключенного к системному разъёму программатора микроконтроллера ATmega328P. Для чипа другой серии команда, соответственно, несколько изменится.

Так, для микроконтроллера ATtiny45 строка будет выглядеть следующим набором:

avrdude -c usbtiny -p t45

Если схематично подключения программатора и программируемой микросхемы в норме, утилита выдаст примерно следующий терминальный текст:

Инициализация чипа утилитой avr dude
Стандарты изготовления микроконтроллеров предполагают внедрение идентификаторов. При первом запуске утилита определяет этот идентификатор

Эта базовая команда утилиты позволяет идентифицировать подключенный микроконтроллер AVR. Инструмент AVRDUDE в процессе проверки читает идентификатор чипа.

Идентификаторы программируемых микросхем отличаются в зависимости от типа AVR. Тот же микроконтроллер ATmega328P идентифицируется как 0x1E950F, что и отмечено в окне выдачи.

Следующим шагом, когда проверено рабочее состояние схемы, можно следовать далее — читать и записывать программный код с помощью утилиты AVRDUDE.

Часть памяти чипа, которая обычно прошивается данными, это Flash — энергонезависимая область, где хранятся программы.

Прошивку Flash-памяти выполнит команда:

avrdude c usbtiny p atmega328p U flash:w:test.hex

или для варианта с ATtiny45:

avrdude c usbtiny p t45 U flash:w:test.hex

Примечание: имя файла «test.hex» только в качестве примера.

Процедура записи Flash-памяти требует некоторого времени. Несколько больше, чем при чтении данных. При этом строка состояния командного терминала всегда изменяется при чтении, записи, проверке устройства.

Чтение и запись чипа утилитой avrdude
Примерно такой выглядит последовательность чтения записи памяти микроконтроллера утилитой в терминальном окне программного инструмента

Опция «U» команды AVRDUDE управляет чтением и записью памяти микропроцессора. Этой опцией пользователь указывает на работу с флеш-памятью.

Дополнительно символом «w» указывается функция записи и следом через двоеточие указывается имя (и расположение) файла (в примере test.hex), содержимое которого требуется записать в память.

Опция «U» также используется для чтения содержимого памяти AVR. Например, следующая команда позволит считать содержимое памяти чипа AVR и сохранить в файле под названием «test.hex»:

avrdude c usbtiny p atmega328p U flash:r:test.hex:r

или для варианта с ATtiny45:

avrdude c usbtiny p t45 U flash:r:test.hex:r

Инструмент поддерживает работу только с файлами, имеющими расширение «*.hex»!

Прочесть развёрнуто об утилите программирования и применяемых в процессе командах можно на этом блоге.

Программирование микроконтроллера ATmega8

Практика электронщиков (начинающих и уже достаточно опытных) отмечает частое пользование ещё одним чипом из серии AVR, именуемым даташит «ATmega8». Несмотря на приличный «возраст» с момента своего рождения, эта микросхема остаётся не менее популярной, чем упомянутые выше микроконтроллеры.

Популярный микроконтроллер atmega8
Благодаря этой микросхеме удаётся собирать электронные устройства нередко уникальные по своим техническим возможностям

Форм-фактор: 28-контактный (PDIP) либо 32-контактный (TQFP), причём 23 контакта из 28 – это линии ввода/вывода общего назначения. Для питания микросхемы потребуется стабилизированный источник 5В, а для удобства использования рекомендуется применить колодку (сокет) на 28 контактов.

Чтобы понять азы процедуры программирования, достаточно запрограммировать, например, функцию включения /выключения светодиода. Для решения задачи потребуется присоединить электронный элемент — светодиод, к любому контакту ввода/вывода микроконтроллера ATmega8.

Например, выбрать 28 контакт, обозначенный на схеме «PC5», входящий в 7-контактный набор PC0 — PC6 (порт C). Следует отметить: согласно схеме ATmega8, имеются также другие наборы контактов, имеющих отношение к порту B (PB0-PB7) и порту D (PD0-PD7).

Ресурсы программирования  ATmega8

Нужно подготовить программный код для прошивки микросхемы. Потребуется компилятор языка программирования «C». Соответственно, необходим также программатор под загрузку скомпилированного кода в память микроконтроллера.

 

В качестве компилятора обычно используется фирменное программное средство «Atmel Studio 7.0» (установщик онлайн). Для прошивки микросхемы ATmega8 опять же удачно выступает утилита AVRDUDE.

Компилятор кода С Atmel Studio 7
Заставка фирменного компилятора программного кода от компании «Atmel». Мощное средство, необходимое для создания уникальных дампов

Далее пошаговый процесс программирования можно описать следующим образом:

  1. Запускается компилятор «Atmel Studio 7».
  2. В меню выбрать «Новый проект» (New Project) и далее «AVR GCC».
  3. Затем указать месторасположения сохранения проектного файла.
  4. Перейти «Далее» (Next) и выбрать из списка симуляторов ATmega
  5. Завершить кнопкой «Finish» после чего можно писать программный код.

Первая нитка программного кода:

#include <avr / io.h>

Функция Include включает системную библиотеку в проект, обеспечивая доступ к основным функциям ввода / вывода и макросам.

int main()

Вторая строчка указывает точку входа в программу пользователя. Отсюда программа пользователя стартует.

Дальше необходимо обозначить вывод порта C. В данном случае — «PC5». Для этого используется специальный регистр DDRC:

DDRC = 0x20;

Значение регистра 0x20 задаёт целевую «1» для контакта «PC5», согласно двоичному представлению. Тем самым пользователь открывает действие на активацию контакта «PC5».

Следующий шаг, решение непосредственно поставленной задачи — включение и выключение светодиода исполнением кода. Если нужен бесконечный цикл, решение может быть таким:

Код компиляции составленный в Atmel Studio 7
Простейший программный код для микроконтроллера ATmega8, которые заставляет мерцать подключенный к микросхеме светодиод

Завершающий этап компиляции кода выбор опции меню «Сборка» (Build). В результате «Atmel Studio 7» создаст файл с расширением .hex, с именем, указанным пользователем. Например: «test.hex». Останется только записать программный код в память микроконтроллера с помощью прошивки.