Программирование микроконтроллеров AVR ATtiny на Arduino IDE

разделы: Arduino , Программаторы , AVR , дата: 23 февраля 2014г.

Часто можно слышать отзывы об Arduino, что это дорого, неэффективно, профанация идеи и т.п. Если задуматься, то окажется, что во многом эта критика справедлива. Одним Arduino сыт не будешь. Если мне требуется микроконтроллер для чего-то простого, например: дисплей и пара кнопок, то использование для такой тривиальной задачи Arduino, действительно можно сравнить с забиванием гвоздей электронным микроскопом. Но если отбросить эмоции и подумать, что наиболее ценное в Arduino-проектах? На мой взгляд, это колоссальный объем открытого кода написанного под различные проекты. Называя вещи своими именами, я не хочу писать с нуля программу для работы микроконтроллера с дисплеем, я хочу использовать уже готовую библиотеку, которую я использовал для Arduino. И не потому что мне "слабо", а потому что я не вижу смысла в изобретении еще одного велосипеда.

О портировании проектов Arduino для “младшего” семейства микроконтроллеров AVR ATtiny пойдет речь в этом посте.

Несколько ссылок:

1) Страница проекта реализующая данную возможность: arduino-tiny
Так же, в вопросе мне помогли разобраться следующие материалы:
2) Programming an ATtiny w/ Arduino 1.0
3) ISP программатор из Arduino. Разберемся и с ATtiny
4) Ошибка «please define PAGEL and BS2 signals in the configuration file for part» при прошивки ATtiny45/85

Из литератуты рекомендую почитать книгу: Андрей Евстифеев "Микроконтроллеры AVR семейства Tiny"

    Предполетная подготовка.
    • Что будем программировать?
    • Проект позволяет задействовать микроконтроллеры ATtiny84 (84/44/24), ATtiny85 (85/45/25), и ATtiny2313 (4313).
    • ATtiny84/44/24 это 14-pin микроконтроллеры с размером флеш-памяти под прошивку 8/4/2 Кбайта соответственно.
    • ATtiny85/45/25 - это то же самое, но на 8-pin. ATtiny2313/4313 - Выделяется из общего ряда являясь по сути ревизией AVR Classic AT90s2313. На борту имеется и I2C и UART, 20-pin, 2/4 Кбайта под прошивку. Вкусная штучка.

    Arduino использует старшее семейство микроконтроллеров ATmega. Портируя программы на ATtiny придется отказаться от некоторых плюшек. Что мы теряем кроме меньшей памяти и меньшего количества ног? Отказаться придется от UART и I2C интерфейсов(ATtiny2313 это по сути не совсем ATtiny). Если вас это не пугает, то идем дальше.

  1. Программатор. Для того чтобы залить прошивку в чип, нужен будет программатор. Здесь я буду использовать сам Arduino в качестве программатора.
  2. Используемое ПО: Slackware64-14.1 + Arduino-1.0.5
    Приступим:
  1. Сначала нужно добавить поддержку ATtiny для Arduino IDE. Заходим по первой ссылке на сайт проекта arduino-tiny На текущий момент я вижу два zip архива доступных для скачивания, для версий Arduino IDE v1.0 и v1.5. Хм. Я пользуюсь последней доступной версией 1.0.5, какой архив следует выбрать? Выбирать надо первое. Версия 1.5 еще только разрабатывается. Итак:
    $ cd sketchbook 
    $ mkdir hardware
    $ cd hardware
    $ wget http://arduino-tiny.googlecode.com/files/arduino-tiny-0100-0018.zip
    $ unzip ./arduino-tiny-0100-0018.zip
    Получаем папку tiny в которой лежит файл README. Открываем его вашим любимым текстовым редактором и внимательно читаем секцию INSTALLATION/УСТАНОВКА
    Если присмотреться, то мы уже дошли до этапа:
    * Create a new file named "boards.txt" in the tiny directory.  Following from
      the examples above, the file would be here...
    
          C:\Projects\Arduino\hardware\tiny\boards.txt
    
    * Open the "boards.txt" file and the "Prospective Boards.txt" file using your
      favourite text editor.
    
    * Copy board entries of interest from "Prospective Boards.txt" to "boards.txt"
      (or copy the entire contents of "Prospective Boards.txt" to "boards.txt").
      Board entries are delineated by a long line of pound-signs.
    
    * In the "boards.txt" file, change the "upload.using" entries to the
      appropriate value for your setup.
    
    * Save and close "boards.txt".  Close "Prospective Boards.txt".
    из всего этого следует только одна команда:
    $ cp -v  'Prospective Boards.txt' ./boards.txt
    
    после чего можно запускать Arduino IDE
    $ arduino
    

    Если все нормально, то в меню: “Сервис->Плата” увидим список поддерживаемых микроконтроллеров ATtiny:

    Здесь, пожалуй, сразу следует пояснить. oscillator - генератор тактовой частоты. Если вы купили микроконтроллер и еще не успели поменять fuse-биты, то генератор должен быть встроенным и работать на частоте 1MГц. Что будет, если ошибешься с частотой? Работать будет, но или медленнее или быстрее.

    BOD - детектор пониженного питания ака Brown-out Detection. Датчик позволяющий определить пониженный уровень питания и “мягко” выключить чип предотвратив дребезг питания. Дело в том, что выключение питания, процесс не мгновенный, чип доли секунды работает при не достаточном питании. В таком состоянии, программа зашитая в нем, начинает выполняться с произвольных адресов т.е. работать хаотически. Это чревато чем? Если ваша программа пишет в EEPROM, то в этом состоянии она запишет туда кашу.

  2. Программатор. Здесь все просто. Подключите Arduino к компьютеру, запустите Arduino IDE, и запишите программу из примеров: меню -> Файл-> Примеры->ArduinoISP. Программатор готов.
  3. Сборка схемы. Для прошивки через ISP интерфейс на каждом микроконтроллере имеются четыре контакта MOSI, MISO, SCK, RESET. ISP-программатор позволяет перепрошить чип уже впаянный в схему. Он так и называется In-System Programming внутрисхемный программатор. В связи с этим, контакты MOSI, MISO, SCK по совместительству имеют функции тех или иных цифровых/аналоговых выводов. Расположение контактов Вашего микроконтроллера можно посмотреть по datasheet на официальном сайте.

    У меня под рукой оказался ATtiny45


    Схема подключения такая

    Я использовал в качестве программатора Arduino на ATmega168. Конденсатор электролитический 10мФ x 16В. Минус на GND, плюс на RESET. Я не уверен, что он нужен на Arduino c ATmega328. Видел схемы без конденсатора, но шить через ATmega328 не пробовал.
  4. Прошивка. В Arduino IDE в меню Сервис - Программатор установите опцию: Arduino as ISP В меню “Плата” укажите тип прошиваемого микроконтроллера.
    Откройте из “Примеров” программу “Blink”. В самом начале, строку:
    int led=13
    исправте на
    int led =0
    К Pin0 (пятый контакт ИС) подключите подтягивающий резистор, на другой конец резистора анод светодиода, катод которого соедините с землей.
    Скомпилируйте и залейте программу. Работать должно сразу.
    При прошивке микроконтроллера может выдать предупреждение:
    please define PAGEL and BS2 signals in the configuration file for part
    
    Вашим любимым текстовым редактором откройте файл
    $ nano /opt/arduino/hardware/tools/avrdude.conf
    
    найдите секцию со своим микроконтроллером и добавьте в нее две строки
    pagel = 0x01;
    bs2 = 0x01;
    Попробуйте перепрошить микроконтроллер, предупреждение должно исчезнуть. Подробнее смотрите по четвертой ссылке
поделиться: