Blog/content/posts/2023/arduino/programming-attiny85-with-avrdude.md

5.8 KiB
Raw Blame History

title date lastmod draft tags
📟 Программирование Attiny85 с помощью avrdude 2023-11-09T23:58:07+03:00 2024-02-24T15:59:00+03:00 false
arduino
tutorial
development

О Digispark ATtiny85

Digispark — неофициальное семейство Arduino-совместимых плат от Digistump. Эти ребята из США делают отладочные платы на различных микроконтроллерах и шилды для них. Китайцы быстро смекнули, что дигиспарк на базе ATtiny85 отличная штука и начали продавать свою версию.

(c) AlexGyver

Платы Digispark бывают нескольких версий и выглядят во так.

Подробности про ATTiny85 и платы Digispark можно прочитать на странице посвящнной Digispark на сайте AlexGyver.

Введение

Не так давно, я купил несколько плат-пустышек (3-я плата на картинке выше) и отдельно микроконтроллеры, чтобы поиграться с ATTiny85 и собрать пару устройст для работы с датчиками.

Иии... у меня ничего не вышло. Спустя несколько попыток я случайным образом догнал, что на МК отсутствует micronucleus. Это такой bootloader для ATTiny.

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

Приступим 🏁

Загрузка micronucleus на МК с помощью avrdude

Если вы, как и я приобрели ATtiny85 в DIP-8 корпусе, нужно помнить, что они не поставляются с micronucleus, и для его прошивки нужен AVR программатор. Самый дешевый программатор AVR можно купить на AliExpress, но также можно использовать Arduino UNO или RaspberryPi для этой задачи.

Чтобы загрузить micronucleus на голый ATtiny85, я использую дешевый программатор AVR как на картинке ниже.

Если у вас установлена версия DIP-разъема Digispark с 8-контактным разъемом, вы можете просто подключить к нему 6-контактный разъем. Нижние 2 контакта должны быть не подключены, поэтому просто убедитесь, что контакт 5В совпадает.

У меня подобного передника не было и я себе спаял такой переходник сам 🙂

В ArchLinux AVR программатор определяется автоматически как USBasp.

[ 5465.908131] usb 1-9: New USB device found, idVendor=16c0, idProduct=05dc, bcdDevice= 1.04
[ 5465.908147] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 5465.908153] usb 1-9: Product: USBasp
[ 5465.908157] usb 1-9: Manufacturer: www.fischl.de

Начнём с клонирования репозитория micronucleus. Скомпилированные прошивки лежат в директории firmware/releases.

git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus/firmware/releases

Нас истересует файл t85_default.hex.

Осталось установить avrdude, чтобы загрузить micronucleus в ATtiny85.

Вводим команды ниже и ждём завершения загрузки.

avrdude -c USBasp -p attiny85 -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m -B 20
avrdude -c USBasp -p attiny85 -U flash:w:t85_default.hex:i -B 20

Обновление от 24.02.2024: У меня в ArchLinux начала пявляться следующая ошибка (версиия avrdude 7.3):

USBasp is not a unique start of a programmer name; consider:
  usbasp       = USBasp ISP and TPI programmer
  usbasp-clone = Any usbasp clone with correct VID/PID

Решается установкой имени программатора (параметр -c) usbasp:

avrdude -c usbasp -p attiny85 -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m -B 20
avrdude -c usbasp -p attiny85 -U flash:w:t85_default.hex:i -B 20

Готово! 🍌

Пример

Далее переходим в Arduino IDE, выбираем плату Digispark и заливаем следующий код, который будет печатать (эмитация клавиатуры) текст раз в секунду.

#include <DigiKeyboard.h>

void setup() { }

void loop() {
  delay(1000);
  DigiKeyboard.println("I Love You <3");
}