воскресенье, 25 октября 2015 г.

Arduino Uno - программатор ATtiny13

Что-то не удалось мне настроить Arduino IDE 1.6.5 - там появился Board manager, и с ним я что-то недопонял.

Поэтому, не упираясь в IDE 1.6.x, я поставил старенькую Arduino IDE 1.0.5. О том как прошивать ATtiny13 на Arduino информации много, но всё-таки мне пришлось собирать её из разных источников.


На всякий случай: у меня Ubuntu 14.04 LTS 64-bit, хотя это и не принципиально.

Понадобятся


  1. ATtiny13 - собственно, его и программируем. Мой - ATtiny13A-PU (см. datasheet). PU - это DIP-корпус.
  2. Arduino UNO - это будет наш программатор.
  3. Breadboard.
  4. Провода для breadboard.
  5. Конденсатор 10 мкФ или больше.
  6. Для проверки наших трудов на скетче blink из Arduino IDE дополнительно понадобятся светодиод и резистор 250 Ом к нему.

Шаг 1

Превращаем Arduino UNO в программатор:

  1. Запускаем Arduino IDE 1.0.5.
  2. Убеждаемся, что:
    Tools => Board => Arduino UNO,
    Tools => Serial Port => что-то там,
    Tools => Programmer => AVRISP mkll
  3. Открываем скетч программатора:
    File => Examples => ArduinoISP
  4. Загружаем ArduinoISP в Arduino UNO.


Шаг 2

Собираем такую схему:
Конденсатор предотвращает автоматический перезапуск микроконтроллера после заливки нового скетча.
Резистор и светодиод для программирования ATtiny13 не нужны. Они понадобятся только для демонстрации результата на примере скетча blink.

Шаг 3

Подготавливаем Arduino IDE 1.0.5 к работе с ATtiny13:
  1. Загружаем ZIP-файл с настройками для ATtiny13 из этого репозитория (кнопка "Download ZIP").
  2. Распаковываем каталог "attiny" из архива в каталог <каталог ArduinoIDE>/hardware. Там теперь должно быть 3 каталога: arduino, attiny, tools.
  3. ВАЖНО для работы функций delay, millis - редактируем файл <каталог ArduinoIDE>/hardware/arduino/cores/arduino/wiring.c. Ищем текст:
    #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    и дописываем в конец " || (__AVR_ATtiny13__)":
    #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || (__AVR_ATtiny13__)
  4. Перезапускаем Arduino IDE.

Шаг 4

Заливаем пробный скетч в ATtiny13:
  1. Открываем в Arduino IDE скетч blink (File => Examples => 01.Basics => Blink).
  2. Заменяем в скетче значения 13 (пин со светодиодом) на 4.
  3. Устанавливаем опции меню:
    Tools => Board => ATtiny13 (internal 9.6 MHz clock),
    Tools => Serial Port => что-то там,
    Tools => Programmer => Arduino as ISP
  4. Заливаем скетч как обычно File => Upload (Ctrl+U).
Любуемся мигающим светодиодом.