Site Loader

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

Программирование микроконтроллеров 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;
    Попробуйте перепрошить микроконтроллер, предупреждение должно исчезнуть. Подробнее смотрите по четвертой ссылке

прошивка с помощью Arduino и Arduino IDE [Амперка / Вики]

В этой статье, будет показан переход от программирования Arduino к программированию «сырого» микроконтроллера ATtiny84 с использованием привычных для Arduino скетчей.

Нам понадобится

Начинаем с простого скетча

Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода. Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0. Скетч содержит следующий код:

pwm-adc.ino
// Номер пина для светодиода
int ledPin = 6;   
 
// Номер аналогового пина   
int analogPin = A0;   
 
// В эту переменную считываем значение с аналогового входа
int val = 0;         
 
void setup()
{
  // Настраиваем пин светодиода на выход
  pinMode(ledPin, OUTPUT);   
}
 
 
 
void loop()
{
  // Считываем значение
  val = analogRead(analogPin);   
 
  // val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite
  // 0..255. Для этого делим значение на 4
  analogWrite(ledPin, val / 4);  
}

Скетчи на ATtiny84

Итак, у нас Arduino Uno. Как же нам запрограммировать нашу «тиньку»? Для этого используется такое устройство, как программатор. Он необходим для того, чтобы залить в контроллер прошивку. Мы можем превратить в него нашу Arduino. И делается это элементарно, путем заливки скетча ArduinoISP.

Делаем программатор и собираем схему

Открываем соответствующий скетч «Файл → Примеры → ArduinoISP» и заливаем его. Все, превращение завершено. Теперь необходимо правильно собрать схему, чтобы прошить «тиньку». Обратимся к коду скетча, который был только что залит. Даже не к коду, а к комментарию перед ним.

ArduinoISP.ino
// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat   - shows the programmer is running
// 8: Error       - Lights up if something goes wrong (use red if that makes sense)

// 7: Programming - In communication with the slave

Сначала подключим светодиоды таким образом, как описано в комментарии, не забывая резисторы. После сборки схемы и подачи питания, светодиод, подключенный к пину 9 «Heartbeat» будет моргать, обозначая нормальное функционирование. Если этого не произошло, то ищите ошибки в подключении.

Теперь надо подключить пины 10-13 к ATtiny. Чтобы узнать распиновку последней, обратимся к даташиту, который можно скачать с сайта Atmel, производителя этих контроллеров. На второй странице расположена картинка, описывающая распиновку. Основываясь на даташите и комментарии из скетча, можем составить следующую таблицу подключения:

Arduino UNO ATtiny84
Reset 10 4
MOSI 11 7
MISO 12 8
SCK 13 9

Теперь подключим светодиод и переменный резистор. Резистор необходимо подключить в пину №6 (PA7), поскольку этот пин может быть входом для аналого-цифрового преобразователя, а светодиод — к любому другому, например, к 10 (PA3).

О нумерации пинов

Стоит немного рассказать о различии нумерации пинов в Arduino и при использовании «чистого» С. В Arduino пины нумеруются последовательно и исключаются системные (питание, земля и т.д.), а в реальности все немного иначе. Все выводы контроллера можно охарактеризовать двумя парметрами: номер порта (порт А, порт В и т.д.) и номер вывода (1..8).

На сайте Arduino можно найти карту пинов. Она выглядит следующим образом:

Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//             (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//                     PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7) 
//  PWM        (D  3)  PA7  6|    |9   PA4  (D  6) 
//  PWM        (D  4)  PA6  7|    |8   PA5  (D  5)        PWM
//                           +----+

В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП. Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.

Теперь необходимо научить среду программирования Arduino понимать тот факт, что мы используем другой контроллер.

Учим среду разработки

Первым делом необходимо скачать библиотеку arduino-tiny, содержащую в себе все необходимое. Далее заходим в настройки Arduino и смотрим расположение папки со скетчами. Переходим в эту папку и создаем там новую с названием «hardware». А в ней еще одну, «tiny». Копируем содержимое скачанного ранее архива в эту папку. И последнее действие — переименовываем файл «Prospective Boards.txt» в «boards.txt». Теперь перезагружем среду разработки и идем в меню «Сервис → Плата». Можно видеть, то добавилось много новых пунктов.

Программируем ATtiny84

Выбираем в качестве нужного устройства «Сервис → Плата → ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)» поскольку у нас нету внешнего кварца, который задает частоту работы контроллера. В качестве программатора выберем — «Сервис → Программатор → Arduino as ISP».

В качестве кода берем уже написанный нами код для светодиода и подстроечного резистора и изменяем там номера пинов.

attiny.ino
// Номер пина для светодиода
int ledPin = 2;   
 
// Номер аналогового пина   
int analogPin = A2;   
 
// В эту переменную считываем значение с аналогового входа
int val = 0;         
 
void setup()
{ 
  // Настраиваем пин светодиода на выход
  pinMode(ledPin, OUTPUT);   
}
 
void loop()
{ 
  // Считываем значение
  val = analogRead(analogPin);   
 
  // val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite
  // 0..255. Для этого делим val на 4
  analogWrite(ledPin, val/4);  
}

Результат

Мы получили устройство, аналогичное тому, что могло бы быть сделано на Arduino, но использовали для него дешёвый и компактный микроконтроллер.

Так вы можете сгрузить некоторые обязанности в вашем большом проекте на отдельные микроконтроллеры, комбинировать их, заменять и делать много интересных, компактных вещей.

Микроконтроллеры ATtiny в среде разработки Arduino

Микроконтроллеры ATtiny фирмы Atmel не поддерживаются средой Arduino из коробки. По крайней мере, так обстоят дела в Arduino v. 1.0.6. Но, добавить поддержку микроконтроллеров ATtiny в среду Arduino не сложно.

Скачайте файлы поддержки ATtiny для Arduino. Распакуйте архив Arduino1.zip. Из этого архива перенесите папку attiny в папку «hardware» Arduino IDE.

В списке поддерживаемых устройств дополнительно появится следующий набор:

  • ATtiny45 (internal 1 MHz clock)
  • ATtiny45 (internal 8 MHz clock)
  • ATtiny45 (external 20 MHz clock)
  • ATtiny85 (internal 1 MHz clock)
  • ATtiny85 (internal 8 MHz clock)
  • ATtiny85 (external 20 MHz clock)
  • ATtiny44 (internal 1 MHz clock)
  • ATtiny44 (internal 8 MHz clock)
  • ATtiny44 (external 20 MHz clock)
  • ATtiny84 (internal 1 MHz clock)
  • ATtiny84 (internal 8 MHz clock)
  • ATtiny84 (external 20 MHz clock)
  • ATtiny13 (internal 9.6 MHz clock)

Еще одна библиотека поддержки микроконтроллеров ATtiny в Arduino. Из этого архива перенесите папку tiny в папку hardware Arduino. В папке hardware/tiny сделайте копию файла Prospective Boards.txt и переименуйте копию в boards.txt. Теперь список поддерживаемых Arduino устройств пополнится следующими:

  • ATtiny84 @ 16 MHz (external crystal; 4.3 V BOD)
  • ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)
  • ATtiny84 @ 1 MHz (internal oscillator; BOD disabled)
  • ATtiny44 @ 8 MHz (internal oscillator; BOD disabled)
  • ATtiny44 @ 1 MHz (internal oscillator; BOD disabled)
  • ATtiny24 @ 16 MHz (external crystal; BOD disabled)
  • ATtiny85 @ 16 MHz (external crystal; 4.3 V BOD)
  • ATtiny85 @ 16 MHz (internal PLL; 4.3 V BOD)
  • ATtiny85 @ 8 MHz (internal oscillator; BOD disabled)
  • ATtiny85 @ 1 MHz (internal oscillator; BOD disabled)
  • ATtiny45 @ 8 MHz
  • ATtiny45 @ 1 MHz
  • ATtiny85 @ 128 KHz (watchdog oscillator; 1.8 V BOD)
  • ATtiny25 @ 8 MHz
  • ATtiny25 @ 1 MHz
  • ATtiny4313 @ 8 MHz
  • ATtiny4313 @ 1 MHz
  • ATtiny2313 @ 8 MHz
  • ATtiny2313 @ 1 MHz
  • Optiboot ATtiny85 @ 8 MHz (internal osc)

Так же, библиотеки поддержки не стандартных для Arduino микроконтроллеров можно устанавливать в папку со скетчами, предварительно создав в ней папку hardware. Это может быть полезно если у Вас нет доступа к системной папке в которую инсталлирован Arduino.

Откройте файл hardware/arduino/cores/arduino/wiring.c найдите в нем строку 44 и добавьте в конце строки:

 || defined(__AVR_ATtiny13__)

Так, чтобы получилось:

#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny13__)

Чтобы при программировании не появлялось предупреждение «avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13», откройте файл hardware/tools/avrdude.conf и в секцию для ATtiny13 добавьте две строки:

pagel = 0x01;
bs2 = 0x01;

Например, так:

#------------------------------------------------------------
# ATtiny13
#------------------------------------------------------------

part
    id                  = "t13";
    desc                = "ATtiny13";
     has_debugwire = yes;
     flash_instr   = 0xB4, 0x0E, 0x1E;
     eeprom_instr  = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
	             0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC,
	             0x99, 0xE1, 0xBB, 0xAC;
    stk500_devcode      = 0x14;
    signature           = 0x1e 0x90 0x07;
    pagel = 0x01;
    bs2 = 0x01;
    chip_erase_delay    = 4000;

И в секцию для ATtiny45 добавьте эти же две строки:

#------------------------------------------------------------
# ATtiny45
#------------------------------------------------------------

part
     id            = "t45";
     desc          = "ATtiny45";
     pagel = 0x01;
     bs2 = 0x01;
     has_debugwire = yes;

И в секцию для ATtiny84 добавьте эти же две строки:

#------------------------------------------------------------
# ATtiny84
#------------------------------------------------------------

part
     id            = "t84";
     desc          = "ATtiny84";
     pagel = 0x01;
     bs2 = 0x01;
     has_debugwire = yes;

Arduino за 1$ / Habr

В качестве вступления, я не буду пространно рассказывать о том, как люди, в руках паяльника не державшие, слова «программатор» не знающие, вместе с детьми радостно втыкают провода в разъемы электронного «конструктора» под названием Arduino. И никаким словом не помяну лагерь «хардкорщиков», считающих это баловством и/или надругательством над самой идеологией микроконтроллеров.

Скажу за себя — мне Arduino нравится. Тем, что можно быстро что-нибудь работающее соорудить. По сути, мне не нравятся только цены. Ну, дорого же. Модуль на порядок дороже использованного в нем микроконтроллера. Такие размышления неоднократно подталкивали меня к тому, чтобы «соскочить», но потом я открывал Aliexpress и заказывал очередную порцию. Китайская версия Arduino Nano — 3-4$. Pro Mini (без USB) — 2-3$.

Потом стало интересно — а где предел минимальной розничной (или микрооптовой) цены. Но так, чтобы можно было работать, а не искать хаки с целью сэкономить пару байт. Пара вопросов к всемирному разуму, кратчайшее изучение матчасти, решение: «Буду ковыряться с ATTiny, но чтобы с Arduino».

Прежде чем перейти к железу, софту, граблям и проклятиям, упомяну о характере решаемых задач. Всего два примера. Первый — это четырехканальный таймер для включения и выключения светильников над клетками с птичками. Второй — контроллер светодиодной ленты для освещения неэлектрифицированного гаража (защита от переразряда свинцового аккумулятора, ШИМ-управление яркостью). Примитивно, но за копейки готовых решений нет.

ATtiny 44 ATtiny 84 ATtiny 45 ATtiny 85 Примечание
Макс. частота, МГц 8 8 8 8 От внутреннего генератора
RAM, байт 256 512 256 512
Flash, Кб 4 8 4 8
I/O выводов 11 11 5 5 RESET не считаем
Цена, $ 1.66 1.8 1.49 1.69 Розница DigiKey, просто для сравнения

Ладно, к делу. Рассматривать будем микроконтроллеры ATtiny 44/84 и 45/85. Базовые характеристики приведены в табличке. У меня в качестве подопытных 85-е в DIP-корпусе, с ценою в 1$ за штуку при покупке десятка у китайцев.

Чего можно добиться?

На ATTiny 85 можно использовать 5 выводов (RESET не рассматриваем, его полезное использование в случае с Arduino сопряжено с битьем в бубен приличного диаметра). На трех доступен АЦП, на двух — ШИМ. То есть, моя вторая задачка-иллюстрация (там нужно 2 канала АЦП, один ШИМ и один светодиод) уже отлично решается. ATtiny 84 позволяет использовать 11 выводов, но дороже — а у нас спортивное удешевление.

Как программировать?

Проще всего — через ISP. В качестве программатора можно использовать плату Arduino, или копеечный ISP-программатор.

На сцене появляются первые грабли

Для экспериментов были заказаны ATtiny 85 и, собственно, программатор. Последний уверенно определялся ПК как USB HID устройство. Это плохо, в таком виде гаджет можно использовать с минимальным количеством ПО, Arduino IDE туда не входит. Впрочем, беглое гугление показало — проблема известна и решаема. Есть готовая прошивка, превращающие чудо китайской науки в USBASP.

Да-да, я беру второй программатор (это было найденное в закромах сомнительное поделие под названием SP300), соединяю его ISP-кабелем с первым, оба втыкаю в USB, ставлю в софте SP300 пункт назначения — ATmega8 ISP, и через долю секунды получаю вожделенный USBASP.

Arduino IDE

Для того, чтобы работать с ATtiny, нужно добавить в IDE описания плат (по факту — чипов). Я использовал вот эти. Описания кладутся в папку со скетчами следующим образом: %папка-со-скетчами%\hardware\attiny, там будут каталог Variants и файл boards.txt.

Материализация вторых граблей

Устанавливаю чип в «хлебную доску», подключаю к программатору, устанавливаю резистор в 10 КОм (Потенциально лишняя рекомендация, подтягивающий резистор встроен. Но в электромагнитно-шумной среде, как пишут в комментах, в апноуте рекомендуют его ставить, чтобы исключить случайный сброс.) между плюсом питания и выводом RESET (т.к. сигнал сброса низкого уровня). Выбираю в IDE программатор USBASP, пытаюсь прошить bootloader — и тишина. Точнее, AVRDude утверждает, что нет связи с микроконтроллером.

Ларчик открывается просто, но не совсем очевидно. Дело в том, что «голая» ATtiny не прошивается с настройками AVRDude, используемыми в Arduino IDE. Слишком высокая частота тактирования при ISP-программировании. Более того, эту частоту нельзя указать в настройках IDE.

Решение: берем AVRDude и прошиваем посредством командной строки фьюзы ATTiny таким образом, чтобы чип тактировался от внутренего генератора с частотой 8 МГц. При этом указываем малую частоту (если быть точным — указывается не частота, а длительность такта) тактирования при ISP-программировании (ключ -B). В итоге, «волшебная строка» выглядит следующим образом:

avrdude -p t85 -c usbasp -U lfuse:w:0xC2:m -U hfuse:w:0xDF:m -U efuse:w:0xFF:m -B 5

После этого ATtiny 85 нормально прошивается через Arduino IDE. Проверка работоспособности производится с помощью легендарного демонстрационного проекта Blink. Меняем в скетче пин с 13-го на 4-й (это 3-й вывод ATtiny 85), подключаем светодиод и резистор, выполняем загрузку с помощью программатора. Светодиод мигает, цель достигнута.

Итого

Делаем вывод, что с микроконтроллерами ATtiny 85 (а также 44, 84, 45) вполне можно работать через Arduino IDE. Желающие могут придти в ужас от того, что код моргания светодиодом бодренько кушает почти килобайт памяти (при 8 доступных).

Сделать однозначный вывод о практической ценности проведенных изысканий я не могу (экономия небольшая, а памяти и выводов мало), но это было достаточно забавно.

Источник вдохновения (англ.)

ПРОГРАММИРУЕМ ATTINY85 ИЗ ARDUINO ISP

 

Распиновка микроконтроллера Attiny85

Начнем с того, а есть ли у вас ардуино и Attiny85? Нет? Идем покупать, и снова за статью. Для тех у кого есть Arduino — устанавливаем среду программирования Arduino IDE. Кратенько напомним как это сделать.

Идём на сайт arduino.cc и скачиваем Arduino IDE (на данный момент версия Arduino 1.0.5), Windows Installer, чтобы ни чем не заморачиваться, пусть сама думает куда ставится, чего, и как называть. Скачать ардуино можно по ссылке http://arduino.googlecode.com/files/arduino-1.0.5-r2-windows.exe

Запускаем установку от имени «Администратора», трудностей с установкой как правило не возникает, только если у вас система супер экзотическая, далее соглашаемся доверять программному обеспечению… на этом с установкой ArduinoIDE все.

Теперь для тех у кого есть Attiny85, и вы решили узнать что это такое…. Чтобы настроить Arduino IDE для работы с микроконтроллерами ATtiny, нужны следующие вещи:

Макетная плата, можно самую маленькую.
Соединительные провода.
Arduino UNO или Duemilanome.
Электолитический конденсатор 10Мкф на 25V.
Светодиод.
Резистор 200 Ом.

Платформа Arduino поддерживает микроконтроллеры фирмы Atmel ATmega, для поддержки микроконтроллеров ATtiny84 (84/44/24), ATtiny85 (85/45/25), and ATtiny2313 (4313), а также ATtiny13, необходимо добавить все эти элементы в ядро. Для этого скачиваем архив — актуальную версию можно скачать с «arduino-tiny» http://code.google.com/p/arduino-tiny/) с нужными элементами (на сегодня актуальна arduino-tiny-0100-0018.zip), и распаковываем его в…

…Заходим в директорию для Windows7 это c:UsersAlexGercen*DocumentsArduino и создаем здесь папку «hardware», заходим в нее, создаем папку «tiny», распаковываем архив в эту папку. После распаковки архива заходим в c:Users AlexGercen*DocumentsArduinohardwaretiny, и в этой директории переименовываем файл Prospective Boards.txt в boards.txt.

Для микроконтроллеров ATtiny13, тоже понадобится другое ядро, но это другая история…

* имя пользователя Windows — у меня AlexGercen, у вас свое.

Теперь все готово для запуска среды программирования arduinoide, запускаем ее с рабочего стола. В меню выбираем Файл, Настройки, Editor Language — выбираем русский язык, и за одно смотрим путь «Расположения папки со скетчами» (это к тому, туда ли вы распаковали ядро для Attiny).

 

Меню программы Arduino IDE — настройки языка

Далее переходим в меню Сервис, Программатор, Arduino us ISP

 

Arduino как программатор ISP (Arduino us ISP)

Подключаем плату Arduino через USB шнур и в меню ArduinoIDE жмем в верхнем меню на кружок со стрелкой — Загрузить. После этого наша плата готова работать как программатор.

Теперь выбираем устройство — Сервис, Плата, «ATtiny85 @ 8 MHz (internal oscillator; BOD disabled)» поскольку кварц нам не нужен.

 

В меню Arduino IDE «Сервис» выбираем attiny 85

 

Теперь, после всех проделанных манипуляций, плата готова работать не просто как программатор, а программатор Attiny 85.

Остаётся присоединить к портам ардуины тиньку и залить в нее программу.

Продолжение следует…

У Вас есть Arduino? Значит у Вас есть программатор! / Блог им. Ghost_D / RoboCraft. Роботы? Это просто!

Все таки, поговорка «Век живи — век учись!» придумана неспроста! В свое время, начав интересоваться микроконтроллерами семейства AVR (и в частности, Arduino) я забеспокоился об инструменте для программирования оных. Т.е., программаторах. А ведь программатор (ну, может не в столь явном виде) у меня всегда был под рукой. Это плата Arduino.
ISP (In-system programming) — это способность микроконтроллера получать прошивку находясь уже непосредственно в собранной схеме. Программатором (устройством передающим прошивку от компьютера в контроллер) в нашем случае будет выступать Arduino.
Аргументы для сомневающихся (делать/не делать)
За:
1) этот шилд даст вторую жизнь «морально устаревшим» платам Arduino на Atmega8
2) У Вас появиться прекрасная возможность писать программы для микроконтроллеров серии Attiny в привычном Arduino IDE
3) это самый «копеечный» программатор (при условии наличия у Вас Arduino)
4) этот шилд ОЧЕНЬ прост в изготовлении, не содержит дефицитных деталей и не требует настройки
5) позволяет (в какой-то мере) сохранить порядок на Вашем рабочем месте 🙂

Против:
— я не нашел

Если готовы, то поехали.
Чтобы Arduino стала ISP программатором на нее необходимо залить специальную прошивку. Эта прошивка поставляется вместе с Arduino IDE. Напомню. Еще без какой-либо периферии Arduino подключаем к компьютеру и загружаем Arduino IDE. Выбираем [File] -> [Examples] -> [ArduinoISP]

Ну и далее, люди делают что-то примерно такое:

Кстати, я тоже так делал :). Собственно, после чего и появилась эта задумка. Вариант «клубкового» соединения, естественно, имеет право на жизнь. Но, скажем так:
-> Неудобно
-> ненадежно
-> некрасиво и все такое 🙁

Логично было бы предположить, что умные люди смекнули «что к чему» и наладили выпуск готовых ARDUINO ISP Shield-ов. Вот парочка примеров:

Я тоже хочу такую вещь! Но, «Это не наш метод! Мы все сделаем сами!!!«
Итак, я вспомнил все микроконтроллеры, с которыми мне приходилось сталкиваться. Это были Atmega8 (168/328), Atmega16, Attiny2313(4313), Attiny13(45/85). Итого, (для меня, по крайне мере) ограничимся корпусами DIP8, DIP20 и DIP28. Здоровенная Atmega16 — «пока нервно курит в сторонке». Поставим дополнительно стандартный ICSP разъем на 10 контактов, для возможности подключения внешнего адаптера. И для красоты установим светодиоды, отображающие текущее состояние программатора. Распиновку берем из скетча ArduinoISP:

// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat   - shows the programmer is running
// 8: Error       - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave

Схема. Хм, конечно сложно это назвать схемой, но все же:

Разводка печатной платы много времени не заняла. Я фактически расположил нужные корпуса и разъемы на плату, подписал нужные выводы и тупо их соединял 🙂 Вот, что получилось:

Лут:

После запайки:

Вторая сторона:

Обращаю Ваше внимание, на наличие трех SMD перемычек (резисторы 0R).

Вот готовое изделие:

!!! ВАЖНЫЙ МОМЕНТ!!! Очень рекомендую установить панельки с цанговыми контактами!

Итак, все у нас готово для проведения «ходовых» испытаний. Подключаем наш шилд к ЗАРАНЕЕ «прошитую» Ардуино
.

Проверяем работоспособность с помощью GUI оболочки для AVRDUDE:

Для «гурманов», зеленой полоской я выделил соответствующие параметры для консольного варианта 🙂

Обращаю ваше внимание на правильный выбор типа программатора и типа соединения. Уточнить можно в IDE (выше приведен скриншот для самопальной COM-портовой платы).

Ниже картинки для варианта с CraftDuino (у меня CraftDuino общается через виртуальный COM N14. Естественно, у Вас может быть другой)

Все хорошо!!! Радуемся и хлопаем в ладоши 🙂 (честно говоря, получившаяся плата мне ОЧЕНЬ нравится. Я пишу эту статью и верчу ее в руках).
Пара полезных ссылок, о том, как подружить микроконтроллеры Attiny со средой программирования Arduino:
Attiny13
Attiny2313
Ну а дальше уже сами 🙂 Как говорится, Google Вам в помощь!

Весь материал проекта забираем ТУТ.
Все удачи и хорошего настроения!

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *