Arduino за 1$
В качестве вступления, я не буду пространно рассказывать о том, как люди, в руках паяльника не державшие, слова «программатор» не знающие, вместе с детьми радостно втыкают провода в разъемы электронного «конструктора» под названием 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.
Для того, чтобы работать с ATtiny, нужно добавить в IDE описания плат (по факту — чипов). Я использовал вот эти. Описания кладутся в папку со скетчами следующим образом: %папка-со-скетчами%\hardware\attiny, там будут каталог Variants и файл boards.txt.
Материализация вторых граблей
Устанавливаю чип в «хлебную доску», подключаю к программатору, устанавливаю резистор в 10 КОм (Потенциально лишняя рекомендация, подтягивающий резистор встроен. Но в электромагнитно-шумной среде, как пишут в комментах, в апноуте рекомендуют его ставить, чтобы исключить случайный сброс.) между плюсом питания и выводом RESET (т.к. сигнал сброса низкого уровня). Выбираю в IDE программатор USBASP, пытаюсь прошить bootloader — и тишина. Точнее, AVRDude утверждает, что нет связи с микроконтроллером.
Ларчик открывается просто, но не совсем очевидно. Дело в том, что «голая» ATtiny не прошивается с настройками AVRDude, используемыми в Arduino IDE. Слишком высокая частота тактирования при ISP-программировании. Более того, эту частоту нельзя указать в настройках IDE.
Решение: берем AVRDude и прошиваем посредством командной строки фьюзы ATTiny таким образом, чтобы чип тактировался от внутренего генератора с частотой 8 МГц. При этом указываем малую частоту (если быть точным — указывается не частота, а длительность такта) тактирования при ISP-программировании (ключ -B). В итоге, «волшебная строка» выглядит следующим образом:
После этого ATtiny 85 нормально прошивается через Arduino IDE. Проверка работоспособности производится с помощью легендарного демонстрационного проекта Blink. Меняем в скетче пин с 13-го на 4-й (это 3-й вывод ATtiny 85), подключаем светодиод и резистор, выполняем загрузку с помощью программатора. Светодиод мигает, цель достигнута.
Делаем вывод, что с микроконтроллерами ATtiny 85 (а также 44, 84, 45) вполне можно работать через Arduino IDE. Желающие могут придти в ужас от того, что код моргания светодиодом бодренько кушает почти килобайт памяти (при 8 доступных).
Сделать однозначный вывод о практической ценности проведенных изысканий я не могу (экономия небольшая, а памяти и выводов мало), но это было достаточно забавно.
Прошивка attiny45 через arduino
Добавляем поддержку не родных м/к в среду Arduino IDE
Иногда можно использовать в своих проектах умного дома более простые или слабые микроконтроллеры,где ресурсов может быть достаточно для простых операций -Такие микроконтроллеры дешевле.Кроме программирования таких микроконтроллеров в более сложной среде разработки в WinAVR или CodeVisionAVR можно использовать среду Arduino IDE,добавив их поддержку.Иногда могут пригодится микроконтроллеры с бОльшим количеством портов,например Atmega16 и Atmega32 — их так же можно программировать в Arduino.
Обратите внимание,что обычно микроконтроллер с завода настроен на внутренний генератор и чаще всего прошивка загрузчика переключает микроконтроллер на внеший кварц — так что Вы должны позабодиться о подключении кварца к выводам микроконтроллера(выводы XTAL) по стандартной схеме.Исключение — серия attiny и некоторые другие м/к..
Серия микроконтроллеров ATtiny
attiny13,attiny2313, attiny45, attiny44,attiny85, attiny84, attiny25, attiny24, attiny4313
Цоколевка микроконтроллеров
Для программирования ATtiny 13/25/45/85 подключим его к нашему программатору согласно даташиту:
Примечание: У ATtiny13 нет шины i2c и имеет всего 1кб под программу.У ATtiny 25/45/85 имеется последовательный порт на выводах PB4 -RX ,PB3 — TX ,но м/к не поддерживают загрузку через его,только обмен данными.
У ATtiny 2313 и 4313 другая цоколевка,но подключается так же:
Настройка Arduino IDE для микроконтроллеров ATtiny
Для этого необходимо дописать нужные микроконтроллеры в файл boards.txt и распаковать архив arduino-tiny в папку папка_arduino/hardware/arduino/
Последнюю версию arduino-tiny можно найти тут.
Например ,чтобы добавить в список поддерживаемых контроллеров ATtiny85 необходимо добавить следущий текст в boards.txt:
###########################################################################
attiny85.name=Optiboot ATtiny85 @ 8 MHz (internal osc)
attiny85.upload.protocol=arduino
attiny85.upload.speed=9600
#bootloader takes up last 10 pages, so there is a limit on the max size.
attiny85.upload.maximum_size=7616
attiny85.bootloader.low_fuses=0xE2
attiny85.bootloader.high_fuses=0xD7
attiny85.bootloader.extended_fuses=0xFE
attiny85.bootloader.path=optiboot
attiny85.bootloader.file=optiboot_attiny85.hex
attiny85.build.mcu=attiny85
attiny85.build.f_cpu=8000000L
attiny85.build.core=tiny
attiny85.build.variant=tinyX5
# вариант c частотой внутренного генератора 8 мгц.
###########################################################################
Остальные примеры поддерживаемых микроконтроллеров можно посмотреть в файле Prospective Boards.txt архива arduino-tiny .
Для ATtiny13 необходимо другое ядро ,для этого распакуем архив в папку hardware\arduino\cores\core13\
и добавляем в список boards.txt:
attiny13.name=ATtiny13 (internal 9.6 MHz clock)
attiny13.bootloader.low_fuses=0x7a
attiny13.bootloader.high_fuses=0xff
attiny13.upload.maximum_size=1024
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=9600000L
attiny13.build.core=core13
attiny13.build.variant=tiny8
Сейчас мы можем программировать добавленные микроконтроллеры через плату Arduno или USBasp.
Другие микроконтроллеры ATmega
ATmega8 без загрузчика
Чтобы добавить м/к ATmega8 без загрузчика добавляем в boards.txt следущий текст:
ATmega8 имеется в списке поддерживаемых как Arduino NG or older с загрузчиком,который отнимает 1 кб ,при таком загрузчике микроконтроллер можно прошивать стандартно,установив его например в Arduino UNO. Сконфигурировать свой загрузчик на другую частоту вы можете в Конструкторе Bootloader`а .
ATmega32 ,ATmega16,ATmega1284,ATmega644,ATmega324
Для добавления данных микроконтроллеров необходимо распаковать из архива avr-netino папку hardware\avrnetio и поместить её в папку Arduiono_ide\hardware\ .Другие папки с примерами и библиотеками можно так же распаковать в соотвествующие папки при необходимости.
Расмотрим пример на микроконтроллере ATmega32:
Микроконтроллер ATmega32 имеет 40 ножек из них 32 — это порты ввода вывода.
Расшифруем основные из них:
D — это цифровые выводы в нумерации arduino.
AI — аналоговые входы.
PWM — выводы с возможностью ШИМ.
Если Вы правельно скопировали папку avrnetio ,то после запуска Arduino IDE Вы увидите добавленные микроконтроллеры в общем списке.Вы можете исправить или удалить некоторые ненужные микроконтроллеры в файле hardware\avrnetio \board.txt
Если сейчас подключить микроконтроллер к Arduno или USBasp ,то можно уже заливать скетчи из среды Arduino IDE .
Обратите внимание,что новый м/к запрограммирован работать от внутреннего генератора и при прошивке загрузчика (через меню сервис-> записать загрузчик) поменяются фьюзы на режим от внешнего кварца.Загрузчик прошивать не обязательно,если Вы не хотите Заливать скетчи через последовательный порт.Перед прошивкой загрузчика можно поправить фьюзы в файле board.txt в строках bootloader.low_fuses и bootloader.high_fuses используя калькулятор фьзов.
Хотя avr-netino и поставляется с загрузчиками,но загрузка через последовательный порт на ATmega32 у меня не заработала.Для загрузки через его необходимо подсунуть «правельный» загрузчик в папку /hardware/avrnetio/bootloaders/optiboot/ из архива boots.zip ,заменив в файле board.txt имя файла загрузчика в строке bootloader.file соотвествующего микроконтроллера .Сконфигурировать свой загрузчик на другую частоту вы можете в Конструкторе Bootloader`а
Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.
Arduino.ru
Программирование ATtiny45 (85)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Хочу прошить ATtiny45, используя наработки Arduino, например легкое взаимодействие с USB портом, я могу это сделать?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Просто взять и прошить не получиться. С некоторыми доработками можно. В частности нужно с нумерацией портов, что-то делать. Вот здесь посмотри (англ):
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Хорошо, спасибо, посмотрю.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
1. Прошить ATTiny45 через Arduino
2. Изпользовать ATTiny45 как Arduino
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
1. Прошить ATTiny45 через Arduino
Я хочу использовать наработки Arduino код, если такое возможно.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
нужно учитывать размер кода, сколько использует код оперативки и пины правильно развести
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вот здесь http://hlt.media.mit.edu/?p=1229 есть схемы подключения, документация и необходимые файлы для программирования Attiny45(85) через Arduino ISP.
У меня Freeduino c 328 атмегой, ATtiny45 и arduino-0023 на WinXP.
Качаем с этого сайта attiny45_85.zip, из архива копируем папку attiny45_85 в arduino-0023\hardware\ , запускаем arduino, в Tools —> Board должны появиться новые строки. Далее, как обычно, выбираем свой ардуино (у меня Tools —> Board —> Arduino Duemilanove or Nano w/ ATmega328) и прошиваем его скейтчем: File —> Examples —> ArduinoISP. Собираем как показано на схеме наш программатор и убираем перемычку рядом с USB-портом (если у вас Arduino Uno, то нужно установить конденсатор как показано на схеме), затем выбираем Tools —> Board —> ATtiny45 (w/ Arduino as ISP), пишем скейтч или выбираем из стандартных с учетом того, что у Аттити всего пять выводов и нажимаем Upload.
Если все хорошо, то выдается три раза сообщение об ошибке: » avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45 » она никак не влияет.
Мне удалось убрать эту ошибку. Идем в папку arduino-0023\hardware\tools\avr\etc открываем файл avrdude.conf ищем ATtiny45 и и после параметра «signature» добавляем два параметра «pagel = 0x01;» и «bs2 = 0x01;»:
part
id = «t45»;
desc = «ATtiny45»;
has_debugwire = yes;
flash_instr = 0xB4, 0x02, 0x12;
eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
0x99, 0xE1, 0xBB, 0xAC;
stk500_devcode = 0x14;
## avr910_devcode = ?;
## Try the AT90S2313 devcode:
avr910_devcode = 0x20;
signature = 0x1e 0x92 0x06;
pagel = 0x01;
bs2 = 0x01;
reset = io;
chip_erase_delay = 4500;