Фирмой «Atmel», наряду с огромным ассортиментом чипов, выпускаются микроконтроллеры двух видов, снискавшие особое признание в обществе электронщиков. Микроконтроллер ATmega328P и другой продукт компании «Atmel» – чип ATtiny45. Обе популярных микросхемы несколько отличаются одна от другой. Тем не менее, чтобы запрограммировать микроконтроллер ATmega328P либо прошить чип ATtiny45 программным кодом, применяется практически одинаковый схематичный и программный подход. Рассмотрим подробнее технические способы: программирование ATmega328P и ATtiny45, а также необходимое для прошивки указанных микроконтроллеров программное обеспечение.
СОДЕРЖИМОЕ ПУБЛИКАЦИИ :
Микроконтроллеры ATmega328P и ATtiny45 семейства AVR
Программируемый чип ATmega328P представлен 28-контактным микроконтроллером, входящим в семейство AVR. Микроконтроллер хорошо знаком обладателям конструктора «Ардуино», где используется в качестве основного компонента электронного набора.
Однако микроконтроллер ATmega328P способен делать куда больше, чем выжимает из этого чипа популярный электронный конструктор «Arduino». Доказательств тому масса, стоит лишь посмотреть фирменный даташит (datasheet) микроконтроллера ATmega328P.
В тесной связке с «братом по крови» выступает другая микросхема — ATtiny45. Но здесь налицо явная отличительная черта: микроконтроллер ATtiny45 имеет 8-контктный форм-фактор.
Микросхема ATtiny45 обладает многими функциями, присущими AT328P. Однако функциональность ATtiny45 несколько ограничена по причине малого числа контактов ввода-вывода.
Традиционно программирование ATmega328P и ATtiny45 осуществляется через последовательный периферийный интерфейс (SPI). Контактная шина на 3 проводника, плюс «земля». По шине данных следуют сигналы:
- Вход приёма данных (MOSI)
- Выход передачи данных (MISO)
- Вход синхронизации приёма(SCK)
Сигнал SCK (SCLK) генерирует ведущее устройство (программатор). Этим сигналом обеспечивается синхронная приём/передача между ведущим и ведомым устройствами. По сути, интерфейс SPI следует рассматривать «синхронной» коммуникационной шиной.
Выбор физических программаторов под AVR микроконтроллеры
Существует масса программаторов, которыми доступно программировать ATmega328P и ATtiny45. Например, профессиональная разработка «Atmel-ICE» от родной чипам компании «Atmel».
Фирменный программатор считается лучшим из всех, пригодных прошивать AVR и другие микросхемы. На китайском AliExpress можно найти по цене от 5000 руб. и выше.
Для любителей-электронщиков этот вариант финансово обременительный. Поэтому логичным видится более простой выбор – USB программатор «AVR Pocket Programmer». Нечто подобное доступно купить, к примеру, здесь. В продаже есть другие, более дешёвые программаторы (от 200 руб.), но не проверенные на практике.
На крайний случай несложно собрать программатор «AVR Pocket Programmer» своими руками. Принципиальная схема устройства построена на чипе ATtiny2313. Внешние элементы – лишь несколько резисторов, стабилитронов, светодиодов.
Сигнальные линии (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 (сигнал синхронизации).
Для маршрутизации всех отмеченных сигналов между устройствами, как правило, используется один из двух стандартизированных разъемов:
- 6-контактный разъем (2×3).
- 10-контактный разъём (2×5).
Разъёмы соединяются с платой программатора и программируемым устройством через шлейф-кабель. Фирменная плата программатора «AVR Pocket Programmer» комплектуется всеми необходимыми аксессуарами.
На фирменной плате программатора присутствует переключатель режима питания. Если переключатель находится в положении «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. Инструмент 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-памяти требует некоторого времени. Несколько больше, чем при чтении данных. При этом строка состояния командного терминала всегда изменяется при чтении, записи, проверке устройства.
Опция «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». Несмотря на приличный «возраст» с момента своего рождения, эта микросхема остаётся не менее популярной, чем упомянутые выше микроконтроллеры.
Форм-фактор: 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».
- В меню выбрать «Новый проект» (New Project) и далее «AVR GCC».
- Затем указать месторасположения сохранения проектного файла.
- Перейти «Далее» (Next) и выбрать из списка симуляторов ATmega
- Завершить кнопкой «Finish» после чего можно писать программный код.
Первая нитка программного кода:
#include <avr / io.h>
Функция Include включает системную библиотеку в проект, обеспечивая доступ к основным функциям ввода / вывода и макросам.
int main()
Вторая строчка указывает точку входа в программу пользователя. Отсюда программа пользователя стартует.
Дальше необходимо обозначить вывод порта C. В данном случае — «PC5». Для этого используется специальный регистр DDRC:
DDRC = 0x20;
Значение регистра 0x20 задаёт целевую «1» для контакта «PC5», согласно двоичному представлению. Тем самым пользователь открывает действие на активацию контакта «PC5».
Следующий шаг, решение непосредственно поставленной задачи — включение и выключение светодиода исполнением кода. Если нужен бесконечный цикл, решение может быть таким:
Завершающий этап компиляции кода выбор опции меню «Сборка» (Build). В результате «Atmel Studio 7» создаст файл с расширением .hex, с именем, указанным пользователем. Например: «test.hex». Останется только записать программный код в память микроконтроллера с помощью прошивки.