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

116 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "📟 Программирование Attiny85 с помощью avrdude"
date: 2023-11-09T23:58:07+03:00
lastmod: 2024-02-24T15:59:00+03:00
draft: false
tags: [arduino, tutorial, development]
---
## О Digispark ATtiny85
Digispark — неофициальное семейство Arduino-совместимых плат от Digistump.
Эти ребята из США делают отладочные платы на различных микроконтроллерах и шилды для них.
Китайцы быстро смекнули, что дигиспарк на базе ATtiny85 отличная штука и начали продавать свою версию.
> (c) AlexGyver
Платы Digispark бывают нескольких версий и выглядят во так.
![](https://s3.timeweb.com/60074440-9f42f663-1649-4eb6-b974-79142c108fc2/blog/2023/arduino/attiny-avrdude/01.jpg)
Подробности про ATTiny85 и платы Digispark можно прочитать
на странице посвящнной Digispark на сайте [AlexGyver](https://alexgyver.ru/lessons/digispark/).
## Введение
Не так давно, я купил несколько плат-пустышек (3-я плата на картинке выше) и отдельно микроконтроллеры,
чтобы поиграться с ATTiny85 и собрать пару устройст для работы с датчиками.
Иии... у меня ничего не вышло. Спустя несколько попыток я случайным образом догнал, что на МК отсутствует `micronucleus`.
Это такой **bootloader** для ATTiny.
Обычно прошивка [micronucleus](https://github.com/micronucleus/micronucleus) уже установлена в Digispark
и не нужно никакого дополнительного оборудования для их программирования.
Пишете код, загружаете его на плату с помощью Arduino IDE и радуетесь жизни.
Приступим 🏁
## Загрузка micronucleus на МК с помощью avrdude
Если вы, как и я приобрели ATtiny85 в DIP-8 корпусе, нужно помнить, что они не поставляются с micronucleus,
и для его прошивки нужен AVR программатор.
Самый дешевый программатор AVR можно купить на AliExpress, но также можно использовать Arduino UNO или RaspberryPi для этой задачи.
![](https://s3.timeweb.com/60074440-9f42f663-1649-4eb6-b974-79142c108fc2/blog/2023/arduino/attiny-avrdude/02.jpg)
Чтобы загрузить micronucleus на голый ATtiny85, я использую дешевый программатор AVR как на картинке ниже.
![](https://s3.timeweb.com/60074440-9f42f663-1649-4eb6-b974-79142c108fc2/blog/2023/arduino/attiny-avrdude/03.png)
Если у вас установлена версия DIP-разъема Digispark с 8-контактным разъемом, вы можете просто подключить к нему 6-контактный разъем.
Нижние 2 контакта должны быть не подключены, поэтому просто убедитесь, что контакт 5В совпадает.
У меня подобного передника не было и я себе спаял такой переходник сам 🙂
![](https://s3.timeweb.com/60074440-9f42f663-1649-4eb6-b974-79142c108fc2/blog/2023/arduino/attiny-avrdude/04.jpg)
В ArchLinux AVR программатор определяется автоматически как **USBasp**.
```text
[ 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`.
```sh
git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus/firmware/releases
```
Нас истересует файл `t85_default.hex`.
Осталось установить `avrdude`, чтобы загрузить micronucleus в ATtiny85.
Вводим команды ниже и ждём завершения загрузки.
```sh
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):
```text
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`:
```sh
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 и заливаем следующий код,
который будет печатать (эмитация клавиатуры) текст раз в секунду.
```cpp
#include <DigiKeyboard.h>
void setup() { }
void loop() {
delay(1000);
DigiKeyboard.println("I Love You <3");
}
```