Программирование AVR Tiny AVR Programmer Wed, November 13 2019  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Tiny AVR Programmer Печать
Добавил(а) microsin   

Конечно, платки Arduino всем хороши. Язык программирования Arduino прост, и IDE проста в освоении, в Интернете много интересных проектов и полезной информации. Однако для некоторых проектов Arduino слишком мощное решение. Для таких целей, как управление светодиодами, чтение одного датчика можно и нужно использовать более дешевые и простые микроконтроллеры, такие как ATtiny85 (перевод статьи [1], посвященной программатору Tiny AVR Programmer).

К сожалению, у ATtiny85 нет широко известной платформы (системы программирования), раскрученной так же, как и Arduino. И 8 килобайт памяти программ слишком мало для того, чтобы держать в ней загрузчик (bootloader), так что для программирования ATtiny85 понадобится какой-нибудь программатор. В добавок ко всему, стандартная среда разработки Arduino IDE не поддерживает этот чип. Однако это не означает, что программирование ATtiny85 в Arduino невозможно! Давайте познакомимся с Tiny AVR Programmer...

Tiny AVR Programmer common view

Tiny AVR Programmer это обычный программатор AVR (клон USBTinyProgrammer), но он был специально разработан для быстрого программирования ATtiny85 (а также ATtiny45). На плате программатора есть сокет, куда можно вставить 8-выводную микросхему микроконтроллера в корпусе DIP8 для непосредственного программирования. После того, как ATtiny85 запрограммирован, просто вытащите его из сокета и установите в плату для отладки или макетирования (breadboard).

Tiny AVR Programmer также можно использовать и как обычный ISP-программатор AVR, он может программировать почти все чипы AVR (включая ATmega328 и ATmega32U4).

В этом руководстве мы рассмотрим, как программировать ATtiny85 с помощью Tiny AVR Programmer и среды разработки Arduino, начиная с установки драйвера, и кончая советами по программированию в Arduino.

1. Tiny AVR Programmer.
2. Микроконтроллер ATtiny85 в корпусе DIP8.
3. Компьютер или ноутбук с портом USB, где установлена среда разработки Arduino IDE.

Дополнительные материалы для ознакомления:

1. Installing Arduino IDE site:sparkfun.com. Это подробное руководство по установке Arduino IDE. Здесь также описано дополнение к Arduino IDE, позволяющее программировать ATtiny85 в знакомой среде (ATtiny85 addon).
2. Integrated Circuits site:sparkfun.com. Общее знакомство с микросхемами, из которых построена вся современная электроника.
3. Polarity site:sparkfun.com. Объяснение термина "полярность", что следует знать о метках и точках на корпусах микросхем и других радиокомпонентов.

[Плата Tiny AVR Programmer]

Ниже на картинке показаны основные составные части программатора Tiny AVR Programmer.

Tiny AVR Programmer connectors

"Мозгом" программатора служит ATtiny84, это 16-выводный чип в SMD-корпусе SOIC16. В нем зашита программа, которая ведет себя как USB-программатор AVR. Если Вы не собираетесь сами разрабатывать свой собственный ISP-программатор, то не стоит особо заботиться об этом ATtiny84 и его программе, считая его черным ящиком (однако при желании все-таки можно влезть в этот черный ящик, потому что его исходный код опубликован, см. [1, 8], врезку "Ресурсы проекта Tiny AVR Programmer"). Программа ATtiny84 получает через USB данные от компьютера, и преобразует их в последовательность данных протокола ISP, чтобы их можно было загрузить в программируемый ATtiny85 (или другой микроконтроллер AVR).

Намного важнее рассмотреть назначение коннектора ISP, сокета для ATtiny45/ATtiny85, светодиода, перемычек и выводов для прототипирования.

[Сокет ATtiny85 и контакты прототипирования]

Для программирования ATtiny45/ATtiny85 установите его в сокет, обращая внимание на полярность установки. Метка первого вывода на корпусе DIP8 микроконтроллера должна быть возле графического обозначения первого вывода на шелкографии:

Tiny AVR Programmer ATmega85 inserted1

Сокет для установки ATtiny85 и дополнительные контакты, установленные по его сторонам, делают Tiny AVR Programmer уникальным. Обратите внимание на метки + и -, а также цифры возле контактов прототипирования. Метки + и - соответствуют выводам питания микроконтроллера, а выводы, помеченные цифрами, соответствуют номерам портов, используемых в программировании среды Arduino IDE.

4-выводные коннекторы прототипирования, расположенные по сторонам сокета, помогают в макетировании схем на ATtiny85. С помощью проводов с коннекторами "папа" микроконтроллер, установленный в сокет, можно соединить с макетируемой конструкцией на плате breadboard (см. пример на фотографии ниже).

Tiny AVR Programmer prototyping

И наконец, на плате программатора есть светодиод LED, подключенный к цифровому порту 0 (порт PB0/MOSI ATtinyX5, вывод 5 корпуса DIP8). Он индицирует миганием процесс программирования ATtiny85, и используется в скетче "Hello, world" для ATtiny85, который по традиции просто мигает светодиодом.

Tiny ISP Programmer не ограничивается только программированием ATtiny85, это полнофункциональный программатор AVR. С помощью ряда из 6 выводов программатора его можно подключить к другим микроконтроллерам AVR через стандартный ISP-коннектор 2x3 (ISP6) или 2x5 (ISP10). Например, через эти выводы можно подключить программатор к плате Arduino Uno, Leonardo и любой другой плате с микроконтроллером AVR, и с помощью Tiny ISP Programmer перепрошить загрузчик (Arduino bootloader), или просто записать код рабочей программы.

Если Вы хотите подключить программатор Tiny AVR Programmer к программируемой плате с микроконтроллером AVR, используйте цоколевку сигналов на картинках ниже. На большинстве плат разработчика AVR имеются ISP-коннекторы для программирования:

Tiny AVR Programmer connect to ISP

[Перемычки]

На плате Tiny AVR Programmer есть две перемычки: одна помечена RST, и другая VCC. Обе эти перемычки относятся к коннектору 2x3 ISP (на схеме коннектор IP9), установленному посередине платы. Если Вы не планируете перепрограммировать ATtiny84 программатора, то эти перемычки и сам коннектор можно не устанавливать.

Перемычка VCC в нормальном состоянии установлена. Она управляет подачей напряжения питания на вывод VCC коннектора 2x3 ISP (IP9). Когда перемычка установлена, напряжение от USB (+5V) поступает на коннектор ISP. Когда она снята, то необходимо подавать внешнее питание на этот вывод.

Перемычка RST в нормальном состоянии снята. Когда она установлена, то соединяет вывод сброса ATtiny84 с коннектором 2x3 ISP (IP9). Если Вам понадобилось перепрограммировать ATtiny84 (что обычно не требуется), то следует установить эту перемычку, чтобы можно было запрограммировать ATtiny84 внешним программатором через коннектор 2x3 ISP (IP9) программатора.

Перед тем, как Вы сможете начать использовать Tiny AVR Programmer, необходимо установить его на компьютере. Если у Вас компьютер Mac или Linux, то драйвер устанавливать не нужно. Просто подключите программатор Tiny AVR Programmer, и он готов к программированию (см. "Программирование в среде Arduino").

Если же у Вас Windows, то выполните следующие шаги для установки драйвера.

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

Подключите программатор Tiny AVR Programmer в пустой слот USB компьютера. В случае ноутбука программатор удобно использовать, просто подключив штекер USB в порт, а в случае большого PC для удобства работы с программатором на столе может понадобиться удлинительный кабель USB.

2. Подождите появления сообщения Windows, сигнализирующего об успешной или неудачной попытке установки драйвера.

После первого подключения Tiny AVR Programmer операционная система Windows попытается найти драйвер, который подойдет для устройства USB программатора. Следите за областью оповещений в правой нижней части экрана. Подождите немного, пока Windows попытается сама установить драйвер. Есть некий шанс, что Windows найдет нужный драйвер. Если Вы увидите сообщение об успешной установке драйвера, то Вам повезло и можно пропустить выполнение следующих шагов по установке драйвера. Но если Вы увидели сообщение о неудачной установке (наподобие как на картинке ниже), то придется установить драйвер вручную.

USBTinyProgrammer Windows driver not found

3. Загрузите драйвер.

Если Windows не смогла найти драйвер, то следует загрузить его. Драйвер можно найти в репозитории AVR Programmer GitHub (см. врезку "Ресурсы проекта Tiny AVR Programmer", а также [8]), или просто загрузите его по этой ссылке: TINY AVR PROGRAMMER DRIVERS.

После загрузки zip-архива с драйвером, распакуйте содержимое архива в любую пустую папку и запомните путь до неё.

4. Откройте Менеджер Устройств (Device Manager).

Чтобы установить драйвер, запустите Диспетчер Устройств Windows. В разных версиях Windows ссылка на Диспетчер Устройств находится в разных местах. Ссылку на Диспетчер Устройств можно найти в Панели Управления (Control Panel), или запустить через кнопку Пуск -> Администрирование -> Управление компьютером -> раздел Диспетчер устройств. Альтернативно можно запустить devmgmt.msc. В операционных системах Windows 7, 8, 10 можно воспользоваться функцией Поиск.

В Диспетчере Устройств раскройте раздел дерева устройств LibUSB-Win32 Devices, и в нем Вы должны увидеть USBTinyProgrammer, помеченный желтым восклицательным знаком, предупреждающим о проблеме с драйвером.

Выполните правый клик на устройстве USBTinyProgrammer, и выберите "Обновить драйвер..." (Update Driver Software...).

USBTinyProgrammer Windows update driver

5. Укажите на место расположения драйвера.

Появится окно Update Driver Software, введите путь до папки драйвера, или с помощью кнопки Browse найдите папку, в которую Вы распаковали драйвер на шаге 3.

USBTinyProgrammer Windows update driver browse

После этого кликните Next, и начнется обновление драйвера. Однако появится окошко предупреждения системы безопасности (Windows Security), что драйвер "не подписан" сертификатом. Выберите вариант "установить все равно" (Install this driver software anyway).

[Программирование в среде Arduino]

Здесь приведено описание процесса программирования ATtiny45/85 в Arduino IDE с помощью Tiny AVR Programmer. Если Вы новичок и ничего не знаете про Arduino IDE, то сначала установите эту среду разработки (см. [2]). Также полезно ознакомиться с общим описанием среды Arduino [3, 4].

1. Загрузите ATtiny Addon.

Чтобы добавить ATtiny к стандартному меню Board среды разработки Arduino IDE, нужно добавить несколько файлов в её каталог для определения новой аппаратуры. Определение аппаратуры ATtiny хранятся в репозитории на GitHub [5] или можно просто использовать ссылки ниже. Обратите внимание, что для разных версий Arduino IDE и используются разные версии дополнений:

ATtiny for Arduino 1.0.x
ATtiny for Arduino 1.6.x

Распакуйте содержимое архива в пустую папку на диске, и запомните путь до неё.

2. Переместите папку attiny.

Папка attiny находится в загруженном на шаге 1 архиве attiny-ide-1.x.x.zip. Эту папку нужно скопировать и вставить в папку hardware, находящуюся в директории Arduino Sketchbook.

Если Вы не уверены, что можете найти путь до Arduino sketchbook, откройте среду Arduino и выберите пункт меню File -> Preferences. Место Sketchbook должна показывать верхняя запись диалога Preferences. По умолчанию sketchbook обычно находится в домашней директории документов пользователя компьютера (home folder, например в папке C:\Users\userName\Arduino на операционной системе Windows, или в папке /Users/userName/Documents/Arduino операционной системы Mac).

Если в Sketchbook нет папки hardware, то создайте её. После этого в папку hardware поместите папку attiny из zip-архива вместе со всем её содержимым, в результате получится примерно следующее (userName здесь имя пользователя компьютера):

Arduino ATtiny addon

3. Сконфигурируйте Arduino IDE.

Запустите среду Arduino. Если она уже была запущена на предыдущем шаге, то закройте её и запустите заново.

В меню Tools -> Board, Вы должны увидеть результаты добавления папки attiny на шаге 2. Здесь должно появиться 12 новых записей, которые позволяют программировать ATtiny45, ATtiny85, ATtiny44 и ATtiny84. Есть возможность выбрать для каждого из этих микроконтроллеров одну из тактовых частот - внутренний RC-генератор 1 МГц или 8 МГц, или работа от внешнего кварца на 20 МГц.

Если Вы используете совершенно новый, только что купленный ATtiny85 (у которого еще не были перепрограммированы фьюзы), то выберите вариант ATtiny85 (internal 1 MHz clock). Будьте внимательны - если в этой ситуации Вы случайно выберете опцию с тактовой частотой 8 МГц, то скетч будет работать в 8 раз медленнее. Ошибочный выбор опции 20 МГц может превратить микроконтроллер в "кирпич", восстановить который может только специальное средство [6], или специальный высоковольтный программатор. Не выбирайте вариант 20 МГц, если не подключен источник внешнего тактирования!

Arduino ATtiny addon select Board

В отличие от других плат Arduino (которые для программирования обычно используют Arduino-загрузчик) при программировании с помощью Tiny AVR Programmer не следует выбирать Serial Port для программирования. Вместо этого выберите программатор, для этого в меню Tools -> Programmer выберите USBtinyISP.

Tiny AVR Programmer Arduino select Programmer

4. Установите в сокет микроконтроллер ATtiny.

Все готово к запуску тестового мигания светодиодом. Когда будете устанавливать микроконтроллер ATtiny45 или ATtiny85 в сокет, будьте внимательны к полярности, не установите корпус наоборот (установить нужно по маркеру 1 ножки, как показано на рисунке ниже).

Tiny AVR Programmer ATmega85 inserted2

5. Загрузите код скетча в микроконтроллер.

Настало время попробовать в работе скетч Blink. Плата Tiny AVR Programmer имеет на борту светодиод LED, подключенный к программируемому микроконтроллеру ATtiny85. Это порт PB0/MOSI, вывод 5 корпуса DIP8, соответствующий цифровому порту 0 (pin 0) в рабочем окружении Arduino. Скопируйте и вставьте в окно редактора кода Arduino IDE следующий текст:

int blinkPin = 0;
 
void setup()
{
   pinMode(blinkPin, OUTPUT);
}
 
void loop()
{
   digitalWrite(blinkPin, HIGH);
   delay(500);
   digitalWrite(blinkPin, LOW);
   delay(500);
}

Затем кликните Upload, точно так же, как Вы это делаете с обычной платой Arduino. Код будет скомпилирован и затем быстро загружен в память ATtiny85, установленного в сокет.

Если все прошло успешно, то желтый светодиод LED на плате программатора начнет мигать с частотой 1 Гц.

[Советы по использованию ATtiny85]

Программирование ATtiny85 имеет некоторые особенности, которые мы рассмотрим в контексте использования Arduino IDE и Tiny AVR Programmer.

Назначение выводов микроконтроллера. Точно так же, как и с любой другой платой Arduino, каждой ножке I/O микроконтроллера ATtiny85 назначен цифровой идентификатор (номер цифрового порта), используемый при программировании в среде Arduino IDE. Эти выводы микроконтроллера и соответствующие им номера цифровых портов Arduino помечены шелкографией на плате программатора Tiny AVR Programmer, но можно также как справочник использовать картинку ниже.

Arduino ATtinyX5 pinout

Каждый из выводов I/O ATtiny85 может вводит и выводить цифровые уровни (лог. 0 и лог. 1). Кроме этого, некоторые выводы могут выполнять специальные функции.

Аналоговый ввод и вывод. ATtiny85 имеет 2 аналоговых выхода (analog output) и 3 аналоговых входа (analog input). Используйте их так же, как делаете это с любой другой платой Arduino. Для этой цели используют специальные библиотечные функции Arduino. Функция analogWrite([pin], [0-255]) генерирует аналоговый вывод с помощью вывода ШИМ (PWM output), что доступно на цифровых портах 0 и 1. Например:

int pwmPin = 0;
 
pinMode(pwmPin, OUTPUT);
 
for (int i=0; i < 256; i+=5)
{
   analogWrite(pwmPin, i);
   delay(5);
}

Функция analogRead([pin]) может использоваться для аналогового чтения уровня напряжения между 0V и 5V, и перевода его в 10-разрядное числовое представление напряжения (функция аналогового ввода, analog input). Цифровые порты 2, 3 и 4 могут выполнять эту функцию, однако когда они используются таким образом, к ним следует обращаться по именам A1, A3 или A2 соответственно. Например:

int pwmPin = 0;
int analogInPin = A1;
 
pinMode(pwmPin, OUTPUT);
pinMode(analogInPin, INPUT);
 
// Чтение аналогового напряжения на цифровом порте 2 (A1):
int analogIn = analogRead(analogInPin);
 
// Аналоговый вывод на светодиод LED (управление его яркостью):
analogWrite(pwmPin, analogIn / 4);

Примечание для продвинутых пользователей: можно напрямую (без библиотек Arduino) модифицировать регистры таймеров/счетчиков ATtiny85, чтобы увеличить количество каналов ШИМ (PWM), таким способом можно получить до 4 аналоговых каналов вывода (см. руководство [7]). Однако имейте в виду, что если Вы будете использовать код из примера [7] вместе с кодом на основе библиотек Arduino, которые используют таймеры, то программа может вести себя непредсказуемо.

Если Вы захотите сбросить память микроконтроллера ATtiny85, то просто используйте команду очистки программатора Tiny AVR или Pocket AVR Programmer. Выгрузка кода из Arduino IDE для этого недостаточна. Ниже показан пример командной строки утилиты AVRDUDE для настройки бит фьюзов ATtiny85, используемого на плате LilyTwinkle:

avrdude -p t85 -c usbtiny -b 19200 -v -e -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

После сброса чипа Вы можете перейти к выгрузке кода в чип с помощью Arduino IDE, как это было описано выше.

Интерфейса UART нет, но есть SPI и I2C. Как Вы возможно заметили, с списке специальных функций выводов ATtiny85 нет RX или TX порта UART. Это потому, что у ATtiny85 нет встроенного аппаратного UART. Если Вы попытаетесь скомпилировать код Arduino, где есть вызовы Serial.begin(9600) или Serial.print(), то получите ошибку.

Таким образом, Вы лишаетесь самого удобного инструмента отладки программ Arduino. Нельзя выводить текстовые сообщения в окно Serial Monitor. Однако у ATtiny85 есть аппаратные порты I2C и SPI, которые обычно используют для подключения различных датчиков. К сожалению, в составе библиотек Arduino нет кода с поддержкой этих интерфейсов для ATtiny85, но есть другие доступные библиотеки, которые можно найти в Интернет и использовать в среде Adruino. USIi2c это библиотека Arduino, которая позволяет использовать I2C на ATtiny85.

Есть и другие библиотеки, предназначенные специально для ATtiny85, например Servo8Bit, предназначенной для управления сервомашинками моделей.

Макетирование на Tiny AVR Programmer. С помощью удобных коннекторов "мама", предназначенных для макетирования, на плате Tiny AVR Programmer можно подключать к программируемому микроконтроллеру ATtinyX5 внешние устройства и электронные компоненты. Самый простой способ - использовать плату breadboard, подключив её перемычками из проводов к коннекторам, расположенных по сторонам сокета Tiny AVR Programmer.

Tiny AVR Programmer prototyping

Для других проектов можно переставлять программируемый чип ATtiny85 из сокета программатора в сокет программируемого устройства, где ATtiny85 используется, или можно напрямую соединить ISP-сигналы программатора Tiny AVR Programmer с ISP-коннектором программируемого устройства.

[Hardware, Firmware]

Schematic – схема в формате PDF.

Файлы Eagle – если Вы хотите поработать над дизайном печатной платы программатора и сделать свою собственную версию программатора.

Tiny AVR Programmer Firmware – если Вам интересен исходный код самого программатора (программа для ATtiny84).

GitHub Repository – здесь Вы можете получить последнюю версию файлов проекта Tiny AVR Programmer (аппаратура и железо).

[Драйверы, дополнения]

Arduino Board Definitions – папка attiny, которую нужно поместить в папку hardware Arduino sketchbook.

32-bit USBTinyISP Driver – драйвер Windows для 32-битных систем.

64-bit USBTinyISP Driver – драйвер Windows для 64-битных систем.

[Ресурсы для ATtiny85]

Atmel Documentation Page – даташиты и апноуты для ATtiny85.

High-Low Tech Tutorial – обзор программирования ATtiny85 в среде Arduino.

H2OhNo! – использование ATtiny85 для отслеживания уровня воды. В этом руководстве описывается работа ATtiny85 в режиме низкого потребления энергии (low power mode).

Shift Registers – если Вам не хватает ножек портов ATtiny, то есть возможность использовать микросхемы регистров сдвига, чтобы увеличить количество портов ввода/вывода.

[Если хотите сами собрать такой программатор]

Чтобы проще найти нужные детали, и плату можно было легче собрать в домашних условиях, я немного переделал разводку под SMD компоненты 0805, и заменил SMD-разъемы на обычные разъемы со штыревыми контактами. Кварц теперь можно поставить как SMD, так и обычный, со штыревыми выводами. Также был дополнительно добавлен фильтрующий конденсатор по питанию программируемого чипа (C5), в остальном ничего не поменялось.

Tiny AVR Programmer PCB top

Tiny AVR Programmer PCB bottom

Список необходимых деталей:

RefDes Номинал Замена Корпус Комментарий
U1 ATtiny84 ATtiny84A SOIC14  
D1, D2 3V6   MINIMELF  
LED1 красный зеленый, желтый 0805  
Q1 16.000 МГц   HC49 усеченный Можно ставить как SMD, так и со штыревыми выводами. Можно использовать кварцы на 12, 15, 20 МГц, но для этого требуется изменение F_CPU в Makefile и перекомпиляция прошивки.
R1, R2 68 62 0805  
R3 1.5k 1.2k, 1.8k 0805  
R4 10k 12k .. 15k 0805  
R5 330 360 .. 510 0805  
C1, C5 0.1мкФ 0.22мкФ 0805 Керамика.
C2, C4 18пФ     Устанавливать не обязательно.
C3 10мкФ 4.7мкФ 1206, 3528-21 (B) Можно ставить керамику или тантал.

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

PCB = 100 рублей (+ почтовые расходы 150 рублей, итого 250 рублей)
PCB + ATtiny84 = 200 рублей (+ почтовые расходы 150 рублей, итого 350 рублей)

[Ссылки]

1. Tiny AVR Programmer Hookup Guide site:sparkfun.com.
2. Installing Arduino IDE site:sparkfun.com.
3. What is an Arduino? site:sparkfun.com.
4. Arduino: что там внутри? (FAQ).
5. Add Atmel AVR ATtiny family of microcontroller to the Arduino IDE site:github.com.
6. Atmega fusebit doctor.
7. Four PWM Outputs from the ATtiny85 site:technoblogy.com.
8181212Tiny-AVR-Programmer.zip - схема, программа, документация.

 

Добавить комментарий


Защитный код
Обновить

Top of Page