четверг, 1 ноября 2018 г.

Знакомство с ATtiny85

ATtiny85
ATtiny85 - это 8-битный AVR микроконтроллер фирмы Atmel, представитель семейства tiny. Микроконтроллеры данного семейства, как следует из его названия, являются младшими в линейке AVR: у них меньшее число линий ввода-вывода, меньший объем памяти и ограниченный набор периферийных устройств по сравнению с микроконтроллерами mega/XMEGA. Но это окупается их меньшей стоимостью и малыми размерами. Кроме того tiny микроконтроллеры имеют ту же производительность, что и старшие микроконтроллеры семейства mega. Это делает их отличным выбором для создания устройств, не требующих широкого набора периферии, где размер и цена микроконтроллера имеют значение: tinyAVR находят применение в портативных навигаторах, плеерах, сотовых телефонах, спортивных гаджетах, бытовой технике, электронных игрушках, пультах дистанционного управления, интеллектуальных датчиках и во многих других устройствах. Но вернемся к ATtiny85 и ознакомимся с характеристиками данного микроконтроллера.

Характеристики ATtiny85

  • Память программ (FLASH) - 8КБ
  • ОЗУ (SRAM) - 512 байт
  • Энергонезависимая память (EEPROM) - 512 байт
  • Тактовая частота - до 20МГц
  • USI (Universal Serial Interface) - универсальный последовательный интерфейс. Может использоваться в двухпроводном (I2C/TWI) и трехпроводном (SPI) режиме
  • 4-х канальный 10-разрядный АЦП
  • Аналоговый компаратор
  • 2 8-битных таймера-счетчика
  • Сторожевой таймер
  • 8 выводов, 6 из которых могут использоваться как линии ввода-вывода
  • Напряжение питания 2.7 .. 5.5В
Более подробная информация о микроконтроллере ATtiny85 приведена в даташите.
Данных параметров вполне достаточно для решения ряда задач. И вы можете найти множество интересных проектов на базе ATtiny85, подтверждающих это. Также микроконтроллер поддерживает три режима энергосбережения для создания энергоэффективных устройств. Одним словом данный микроконтроллер заслуживает внимания, поэтому сегодня я расскажу о том, как программировать ATtiny85 в привычной нам среде разработки Ардуино.

Программирование ATtiny85 в IDE Arduino

Итак, программировать ATtiny85 будем в IDE Arduino, причем ее версия должна быть не ниже 1.6.4, а для прошивки нам потребуется программатор. В качестве программатора я буду использовать Ардуино Уно. Эта тема подробно описана в статье Arduino as ISP, поэтому сегодня не станем заострять на ней внимание. Можно использовать и другие программаторы, например, рассмотренный недавно USBasp. В этом случае пропустите следующий пункт и переходите к настройке IDE.

Подготовка программатора Arduino as ISP

Запускаем IDE Arduino, открываем скетч ArduinoISP (меню Файл > Примеры > ArduinoISP), подключаем Ардуино к компьютеру и загружаем в нее скетч. На этом плату Ардуино пока можно отложить, займемся настройкой IDE.

Добавление ATtiny85 в список плат IDE Arduino

В среде разработки Ардуино отсутствуют компоненты, необходимые для работы с микроконтроллерами tiny, поэтому сейчас нужно добавить их в IDE. Для этого скопируйте в буфер обмена следующую строку:
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Теперь в IDE открываем меню Файл > Настройки и в появившемся окне нажимаем кнопку рядом с полем ввода дополнительных ссылок для Менеджера плат. В открывшемся окне вставляем скопированную ранее ссылку новой строкой. Нажимаем OK для сохранения изменений и выхода из настроек:

Добавление поддержки ATtiny85 в IDE Arduino

Кстати, в окне ввода дополнительных ссылок можно перейти по ссылке под полем ввода, откроется страница https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls. На ней вы найдете большое количество ресурсов для поддержки различных плат и микроконтроллеров, в том числе и используемый нами пакет от David A. Mellis.

Следующий шаг - установка файлов для поддержки ATtiny85. Переходим в меню Инструменты > Плата > Менеджер плат... Чтобы не искать в списке интересующий нас пакет, отфильтруем его, введя в текстовом поле слово tiny. Выбираем пакет attiny by David A. Mellis и нажимаем установить. После выполнения установки закрываем окно Менеджера плат:

Добавление поддержки ATtiny85 в IDE Arduino

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

Технология внутрисхемного программирования (ISP) использует линии интерфейса SPI. Поэтому выводы MOSI, MISO, SCK ATtiny85 подсоединяем к одноименным выводам Ардуино; вывод RESET ATtiny85 к цифровому выводу 10 Ардуино. Запитываем микроконтроллер от линий 5V и GND Ардуино. И, возможно, потребуется установить электролитический конденсатор между выводами Reset и GND Ардуино, чтобы предотвратить автоматическую перезагрузку. Ниже показаны распиновка микроконтроллера ATtiny85 и схема его подключения к Ардуино.

ATtiny85 pinout

ATtiny85 прошивка



Загрузка скетча в ATtiny85

Откроем скетч Blink из стандартных примеров Ардуино (меню Файл > Примеры > Basics > Blink). Заменим в скетче текст LED_BUILTIN на 0 в трех местах, должно получиться:

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);             // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);             // wait for a second
}

Теперь в списке плат выберем ATtiny25/45/85, конкретную модель микроконтроллера укажем в меню Процессор. В меню Clock выберем значение Internal 8MHz. И, поскольку в качестве программатора мы используем Ардуино, выберем значение Arduino as ISP в меню Программатор:

Программирование ATtiny85 в IDE Arduino

Теперь всё готово для загрузки скетча в ATtiny85. Подключаем Ардуино к компьютеру, нажимаем кнопку загрузки и дожидаемся сообщения о завершении операции.

Для проверки работы скетча подключим к микроконтроллеру светодиод: длинным выводом к PB0, коротким к GND. Светодиод начнет мигать, только интервал составит не 1 секунду, а 8 (при условии, что мы имеем дело с новым/чистым микроконтроллером). И вот почему: новые микроконтроллеры идут с завода с запрограммированным фьюзом CKDIV8 (Divide clock by 8), что приводит к делению тактовой частоты на 8. Поэтому сейчас мы сбросим данный фьюз, чтобы микроконтроллер работал на частоте 8МГц.

Изменение тактовой частоты ATtiny85

Работу с фьюзами я уже описывал в статье Что такое фьюзы. Чтение и запись фьюзов Ардуино. Тогда для работы с ними использовалась программа avrdude. Но сейчас для сброса фьюза CKDIV8 мы поступим проще: установка конфигурационных байтов входит в процедуру записи загрузчика, поэтому в IDE Arduino переходим в меню Инструменты и выбираем команду Записать загрузчик. В действительности запись загрузчика в микроконтроллер не произойдет, т.к. его просто нет в используемом нами пакете. Но зато будут перезаписаны конфигурационные байты, новые значения будут взяты из файла boards.txt, в них как раз бит CKDIV8 сброшен. Также будет очищена память программ, поэтому скетч нужно будет загрузить в микроконтроллер еще раз.

После выполнения указанных действий ATtiny85 заработает на частоте 8МГц и светодиод начнет мигать с интервалом в 1 секунду. Микроконтроллер можно отключить от Ардуино и запитать от источника 3-5В.


Когда вы в очередной раз захотите изменить тактовую частоту ATtiny85, нужно будет выбрать соответствующее значение в меню Инструменты > Clock и повторно выполнить команду Записать загрузчик. И, как вы можете видеть, в меню выбора частоты доступно значение 16МГц - оно получается умножением тактовой частоты внутреннего RC-генератора (8МГц). Этой опцией не могут похвастаться даже старшие микроконтроллеры семейства mega. Такой способ тактирования применен в плате Digispark, построенной на ATtiny85.

Вместо заключения

Как видите, программирование ATtiny85 в IDE Arduino не составляет труда. А после записи загрузчика оно станет еще проще и сможет быть выполнено без использования программатора. О том как это сделать читайте в статье Прошиваем загрузчик micronucleus в ATtiny85.

2 комментария: