ATtiny85 - это 8-битный AVR микроконтроллер фирмы Atmel, представитель семейства tiny. Микроконтроллеры данного семейства, как следует из его названия, являются младшими в линейке AVR: у них меньшее число линий ввода-вывода, меньший объем памяти и ограниченный набор периферийных устройств по сравнению с микроконтроллерами mega/XMEGA. Но это окупается их меньшей стоимостью и малыми размерами. Кроме того tiny микроконтроллеры имеют ту же производительность, что и старшие микроконтроллеры семейства mega. Это делает их отличным выбором для создания устройств, не требующих широкого набора периферии, где размер и цена микроконтроллера имеют значение: tinyAVR находят применение в портативных навигаторах, плеерах, сотовых телефонах, спортивных гаджетах, бытовой технике, электронных игрушках, пультах дистанционного управления, интеллектуальных датчиках и во многих других устройствах. Но вернемся к ATtiny85 и ознакомимся с характеристиками данного микроконтроллера.
Данных параметров вполне достаточно для решения ряда задач. И вы можете найти множество интересных проектов на базе ATtiny85, подтверждающих это (загляните, например, в мою публикацию Игральный кубик на ATtiny85). Также микроконтроллер поддерживает три режима энергосбережения для создания энергоэффективных устройств. Одним словом данный микроконтроллер заслуживает внимания, поэтому сегодня я расскажу о том, как программировать ATtiny85 в привычной нам среде разработки Ардуино.
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
Теперь в IDE открываем меню Файл > Настройки и в появившемся окне нажимаем кнопку рядом с полем ввода дополнительных ссылок для Менеджера плат. В открывшемся окне вставляем скопированную ранее ссылку новой строкой. Нажимаем OK для сохранения изменений и выхода из настроек:
Характеристики 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 для сохранения изменений и выхода из настроек:
Кстати, в окне ввода дополнительных ссылок можно перейти по ссылке под полем ввода, откроется страница 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 к программатору
Технология внутрисхемного программирования (ISP) использует линии интерфейса SPI. Поэтому выводы MOSI, MISO, SCK ATtiny85 подсоединяем к одноименным выводам Ардуино; вывод RESET ATtiny85 к цифровому выводу 10 Ардуино. Запитываем микроконтроллер от линий 5V и GND Ардуино. И, возможно, потребуется установить электролитический конденсатор между выводами Reset и GND Ардуино, чтобы предотвратить автоматическую перезагрузку. Ниже показаны распиновка микроконтроллера ATtiny85 и схема его подключения к Ардуино.
Загрузка скетча в ATtiny85
Откроем скетч Blink из стандартных примеров Ардуино (меню Файл > Примеры > Basics > Blink). Заменим в скетче текст LED_BUILTIN на 0 в трех местах, должно получиться:
Теперь в списке плат выберем ATtiny25/45/85, конкретную модель микроконтроллера укажем в меню Процессор. В меню Clock выберем значение Internal 8MHz. И, поскольку в качестве программатора мы используем Ардуино, выберем значение Arduino as ISP в меню Программатор:
Теперь всё готово для загрузки скетча в ATtiny85. Подключаем Ардуино к компьютеру, нажимаем кнопку загрузки и дожидаемся сообщения о завершении операции.
Для проверки работы скетча подключим к микроконтроллеру светодиод: длинным выводом к PB0, коротким к GND. Светодиод начнет мигать, только интервал составит не 1 секунду, а 8 (при условии, что мы имеем дело с новым/чистым микроконтроллером). И вот почему: новые микроконтроллеры идут с завода с запрограммированным фьюзом CKDIV8 (Divide clock by 8), что приводит к делению тактовой частоты на 8. Поэтому сейчас мы сбросим данный фьюз, чтобы микроконтроллер работал на частоте 8МГц.
После выполнения указанных действий ATtiny85 заработает на частоте 8МГц и светодиод начнет мигать с интервалом в 1 секунду. Микроконтроллер можно отключить от Ардуино и запитать от источника 3-5В.
Когда вы в очередной раз захотите изменить тактовую частоту ATtiny85, нужно будет выбрать соответствующее значение в меню Инструменты > Clock и повторно выполнить команду Записать загрузчик. И, как вы можете видеть, в меню выбора частоты доступно значение 16МГц - оно получается умножением тактовой частоты внутреннего RC-генератора (8МГц). Этой опцией не могут похвастаться даже старшие микроконтроллеры семейства mega. Такой способ тактирования применен в плате Digispark, построенной на ATtiny85.
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. Подключаем Ардуино к компьютеру, нажимаем кнопку загрузки и дожидаемся сообщения о завершении операции.
Для проверки работы скетча подключим к микроконтроллеру светодиод: длинным выводом к 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.
Спасибо, статья понравилась
ОтветитьУдалитьРад помочь!
Удалитьспасибо
ОтветитьУдалитьПожалуйста!
Удалитьмолодец
ОтветитьУдалитьспасибо
Самая понятная статья из множества для чайников, а главное всё работает.
ОтветитьУдалитьБлагодарю за высокую оценку статьи!
УдалитьЗдравствуйте, подскажите пожалуйста почему на атини85 на 1 ноге всегда постоянные 5в и никак не могу поменять на 0 программно через атмель и дудку. В чем причина, вроде пин цифровой и должен управляться???
ОтветитьУдалитьДобрый день!
УдалитьПервый пин совмещён со входом внешнего сброса. И если внешний сброс разрешен (фьюзом RSTDISBL), то он всегда подтянут к питанию внутренним резистором.
Вам нужно запретить внешний сброс, тогда можно будет использовать первый вывод как и все остальные. Только вы уже не сможете ничего залить в микроконтроллер через isp программатор. Поэтому на этапе отладки удобнее использовать загрузчик micronucleus: он позволяет загружать скетчи, не используя reset. А когда скетч уже отлажен, восстановить фьюзы таким способом: https://tsibrov.blogspot.com/2019/04/unlocking-attiny85.html?m=1
Затем залить скетч без загрузчика и снова запретить внешний сброс
Спасибо за ответ) и за офигенный сайт!
УдалитьУточнение: Первый вывод можно использовать не как все остальные, а только как вход.
УдалитьДобрый день. Подскажите как работать с EEPROM на атини85? Скачал библиотеки для нее, но там пример только с внешним EEPROM. На стандартные команды компилятор ругается. 'eeprom_update_int' was not declared in this scope
ОтветитьУдалитьДобрый день!
УдалитьА зачем качали библиотеку для EEPROM? Она же входит в состав IDE Arduino. И стандартные примеры нормально компилируются для tiny85.
Интересный контроллер ATtiny85, и вы замечательно рассказали про него. Совсем было собрался заказать чипы на Али, но оказалось, что сейчас цена на них такая, что пропадает главное преимущество...
ОтветитьУдалитьЕсли кто-то знает продавцов с приемлемой ценой (не дороже доллара с доставкой), напишите, пожалуйста.
Да, есть такое дело. Спрос в основном на ATmega328P. Их полно, продавцы, конкурируя, снижают цены, а менее популярные контроллеры остаются дорогими.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьДавно ничего не заказывал на али. 328P последний раз брал в июле прошлого года по 75р в корпусе qfp32. Сегодня зашел посмотреть - стало дороже. Причем дороже и в долларах (я привык ориентироваться на цены в долларах; на 328p считал хорошим ценник ~1.15$), а с учетом текущего курса в рублях получается еще дороже.
УдалитьДобрый вечер! Помогите пожалуйста с Attiny85. Вот уже второй день "сражаюсь" с ней с простым скетчем Blink. Все делал по вашей статье. Прошивается без ошибок, но результата нет. Ощущение что что-то упустил... какую-то мелочь... но я новичок в этом... Так же собрал схему сброса ... но не помогло...
ОтветитьУдалитьС уважением Дмитрий.
Добрый день!
УдалитьК сожалению, нет возможности оперативно отвечать на комментарии. Вопрос ещё актуален?
" Но это окупается их меньшей стоимостью... "
ОтветитьУдалитьНе совсем так. ATTiny85 стоит сейчас на алике около 2 USD, когда Arduino mini с ATMega168 стоит меньше 1 USD.
Думается, что это тоже ненадолго. Все цены растут на глазах... Хотя еще можно найти хорошие цены. Кстати, совсем недавно покупал WAVGAT Pro Mini ATMega168 по 0.96, а сейчас "К сожалению, этот товар уже недоступен".
УдалитьЗдравствуйте! Спасибо за статью, блинк у меня заработал, а вот с аналоговыми сигналами как то не разобрался. Хочу подключить фоторезистор, использую для него ножку PB4, но ничего не происходит, подскажите, есть ли вообще возможность работать с аналоговым сигналом?
ОтветитьУдалитьДобрый день!
УдалитьДа, конечно, с аналоговым сигналом работать можно. Для PB4 - analogRead(A2)