Прошивка attiny10 arduino ide
- Собственно сам контроллер Ардуино. Естественно для такого небольшого устройства нужно брать что то небольшое, тоже Nano или Pro-Mini. По сравнению с Ардуино Уно они стоят почти в 3 раза дешевле. Нано кроме того имеет контроллер интерфейса и является полной копией Ардуино Уно только небольшого размера. Очень удобно заливать прошивку без всяких сторонних программаторов и переходников (об этом чуть ниже). Итого стоимость Ардуино Нано около 120 руб вместо 300 руб Ардуино Уно.
- Модуль реле KY-019. Цена всего около 50-60 рублей за блок с одним реле.
- Блок питания (БП) на 5В. На Али есть БП мощностью несколько Ватт и стоимостью около 40 руб. Стоит посчитать мощность БП для устройства. Реле потребляет около 200 мА, Ардуино- берите еще 50 мА, ну и светодиоды, допустим 3 штуки по 20 мА=3х20=60 мА. Т.е. потребляемый ток будет равен 200+50+60=310 мА. Значит БП нужен мощностью не менее 5В х 0,31 А=1,55 Вт. Стоит учесть еще потери самого БП, т.е по идее БП на 3 Вт должно хватить. Итого еще 50 руб. Можно конечно поставить старый зарядник от сотового телефона с током не менее 0,3 А. Это будет более правильно и, кроме того, бесплатно.
Кнопки считать не будем т.к. их можно где нибудь выковырять. Вместо кнопок можно поставить различные датчики но это будет в следующем уроке, когда мне придут датчики из Китая. Вобщем посчитаем стоимость только одной Ардуины. 130 рублей. Немного. Но давайте также прикинем другие варианты. Скетч занимает 1,63 кБ. В Ардуино на 328 контроллере находится 32 кБ памяти. Это больше требуемого в 32/1,63=19,6 раз. Почти в 20 раз. Мне лично жаль тратить такой контроллер на такой небольшой скетч. Какой же выход можно найти из сложившейся ситуации? Взять контроллер с меньшим объемом памяти и прошить его так же как и Ардуино! Давайте посмотрим какие еще контроллеры есть в семействе Атмега.
Микроконтроллеры семейства TinyAVR
Классические AVR-микроконтроллеры
Микроконтроллеры семейства MegaAVR
Вобщем будем выбирать контроллер с Flash- памятью (туда именно и записывается наш код программы) не менее 8 кБ и как можно дешевле (здесь не говорится о минимизации, если нужно миниатюрное устройство то стоит поискать МК для поверхностного монтажа в корпусах TQFP и SO). Возьмем мой любимый МК ATmega8. Его достоинства: 8 кБ памяти, 28 выводов (из них около 20- наши), имеется 512 байт энергонезависимой памяти в которую мы можем сохранять и считывать необходимые данные. Цена- около 50-60 руб за штуку в Китае. Итого мы удешевили наш проект только по МК уже не менее чем в 2 раза. Осталось научиться запрограммировать МК.
Мы рассмотрим 3 программы для программирования МК. Это будет собственно сама оболочка Arduino IDE, AVRDUDESHELL и Sinaprog. Самая простая- Sinaprog но ей необходимо подготовить hex- файл в Arduino IDE. Самая навороченная- AVRDUDESHELL. Но начнем мы все таки с Arduino IDE т.к. без нее никуда и ей просто надо уметь пользоваться. Приступаем к программированию.
Как запрограммировать Atmega с помощью Arduino и Arduino IDE
Итак открываем Arduino IDE и прежде всего нужно загрузить библиотеки нужных контроллеров в саму Arduino IDE. Это делается следующим образом: Нажимаем Скетч- Подключить библиотеку- Управлять библиотеками. В открывшемся окне в верхнем правом поле наберите MiniCore (можете прямо отсюда скопировать). Кликаете на данный пакет и жмете кнопку Установка. Пакет установится и теперь при выборе платы в меню Инструменты в самом низу появится еще целых 5 типов контроллеров (возможно в новых обновлениях будет больше выбор)! Выбираете какой вам нужен и можете переходить к более точной настройке. Т.е. в меню инструменты вам становятся доступны менюшки по настройкам фьюзов. Значение Bootloader предлагает вам записать ардуиновский загрузчик. Можете выбрать Да или Нет. Загрузчик тоже занимает место. Учтите это. BOD- это минимальное напряжение питания при котором контроллер отключится. Можете выбрать 2,7v и тогда МК будет работать от, например, элемента 18650. Особое внимание обратите на значение Clock. В данном меню указывается частота ядра МК и тип задающего генератора. Например запись 20MHz external предписывает МК работать от ВНЕШНЕГО кварцевого резонатора с частотой 20 МГц. Т.е. для запуска МК вам придется подключить такую схему,
Подключение кварцевого резонатора к Атмега
Теперь делаем следующее. Находим картинку с названием выводов нашего МК. Например для Атмега 8 есть вот такая картинка- даташит (напомню что 328 и 8 атмеги различаются объемом памяти).
Распиновка 328 атмеги
По ней находим выводы MISO, SCK, MOSI, GND, 5V, RESET. Теперь подключаемся таким образом:
Назначение | ARDUINO | Atmega 8 |
RESET | 10 | 1 |
MOSI | 11 | 17 |
MISO | 12 | 18 |
SCK | 13 | 19 |
5V | +5V | 7 |
GND | GND | 8, 22 |
Как вы поключитесь абсолютно не имеет никакого значения, можете сделать переходник и включаться напрямую в Ардуино, можете все соединить на макетной плате- не важно. Главное- правильно все подсоединить. Другие МК программируются абсолютно так же. Качаете даташит, находите указанные выше выводы и подсоединяете вывод RESET Ардуино (10 вывод) к выводу RESET МК, вывод MOSI Arduino (11 вывод) к выводу MOSI МК и т.д. Единственное что нужно- указать тип МК и прописать нужные значения в MiniCore.
Теперь подключаем Ардуино к компьютеру (Arduino ISP уже должна быть залита в Ардуино, если нет то выбираете плату Ардуино, указываете порт, заливаете Arduino ISP, переключаетесь на нужный МК, прописываете фьюзы), выбираем нужный скетч и заливаем его в МК. Разные версии программы Ардуино по разному позволяют записывать скетч в МК. В одних версиях нужно открыть меню Файл- Записать с помощью программатора. В моей версии 1.6.8 для записи через программатор достаточно нажать Shift и нажать стрелку как для заливки скетча в Ардуино. После непродолжительного перемигивания светодиодов на Ардуино скетч будет записан в МК. На этом запись закончена и можно переходить к сборке готового устройства. Хочу так же обратить ваше внимание что при указывании портов ввода- вывода на Ардуино следует учитывать что значение цифрового порта D1 не является первым выводом Атмеги. Для этого вам опять же необходимо ознакомится с картинкой расположения выводов на Атмеге. По распиновке смотрим что порт D1 находится на 3 выводе Атмеги 328 (или 8 Атмеги). Вообще выводы IDE отмечены розовым цветом. Поэтому при разводке платы следует учитывать расположение выводов микросхемы.
Внимание! Данный урок опирается на информацию из предыдущего урока о программаторах. Обязательно изучите сначала его. В прошлом уроке я рассказывал о том, как загрузить прошивку в Ардуино, используя внешние устройства: USB-TTL преобразователь и ISP программатор. Как нетрудно догадаться, при помощи этих же инструментов можно загрузить прошивку и в голый чип, будь то ATmega328 или ATtiny85. МК серии ATtiny являются младшими братьями АТмег, у них меньше ног, меньше памяти, меньше интерфейсов и таймеров, но зато они дешевле и хорошо подходят для мелких проектов. Давайте сравним несколько популярных МК:
Примечание: большинство функций объединены на одних и тех же пинах. Как вы можете видеть, чем дешевле МК, тем меньше у него возможностей. Полное подробное сравнение можно глянуть здесь.
UART и ISP
Для подключения прошиваторов к голому чипу нам нужно будет изучить распиновку (pinout) на нужный микроконтроллер. Распиновки бывают цветные и красивые (часто с ошибками), а бывают более серьёзные и правильные. Лучше всего открыть даташит на нужный МК и на второй же странице найти 100% правильную распиновку. Например для ATmega328, ATtiny85 и ATtiny13:
Подключение программатора
Программатор, или Ардуину в качестве программатора, подключить очень просто. Смотрим распиновку и подключаем:
- Шину ISP: пины MOSI, MISO и SCK. Они есть на всех МК
- Сброс RST
- Землю GND. Любую из имеющихся, они соединены внутри МК
- Если МК не питается от своего источника, подключаем заодно VCC
Программирование
Итак, что же даёт нам ядро помимо выбора настроек МК? Можно программировать МК всё теми же командами, что и раньше! Мигать светодиодами через digitalWrite, измерять напряжение через analogRead и прочее прочее. Давайте напишем классический Blink:
Важный момент по работе с ядрами для других МК, у которых больше 8 ног. Для сохранения удобства работы с IO функциями ядра (digital/analog/Read/Write) к пину можно обращаться как PIN_ + имя_ноги на распиновке, например подадим высокий сигнал на пин PC3: digitalWrite(PIN_PC3, HIGH); . Все остальные нюансы расписаны на странице ядер по ссылкам выше.
Я думаю вы поняли, что в целом работа с голыми МК не особо то и отличается от работы с обычной платой Arduino, и теперь можно переходить к сложным самоделкам на базе своей платы, в центре которой будет стоять микроконтроллер. Давайте поделюсь парой советов по минимальной обвязке.
Проект на голом МК
Зачем делать проект на своей плате и голом микроконтроллере?
- Конечно же размер, своя плата получится компактнее в большинстве случаев.
- Энергопотребление. Ни для кого не секрет, что всякие удобные штуки на плате ардуино потребляют огромный по меркам энергосбережения ток, и для автономного устройства лучше взять голый камушек.
- Работая с голым камнем мы можем выбрать микроконтроллер под свои задачи. Например для мелкого проекта необязательно брать 328 мегу, если с задачей справится аттини13, которая стоит 20 рублей.
- Возможная экономия. Ардуино нано стоит условно 170 рублей без доставки. Голая 328 мега на том же алиэкспресс – 100 рублей. Если брать десяток. В дорогущем российском чип и дип – 190 рублей. То есть если очень приспичит – можно и тут купить без особых потерь, потому что оригинальная нано стоит 3 тысячи рублей в том же ЧИДе.
- Удобство разводки платы. Микросхема в корпусе под поверхностный монтаж находится на одном слое и не мешает дорожкам на другом слое.
- Удобство монтажа. Даже если делать свою плату прототип лутом, то припаять на неё чип в 100 раз удобнее и быстрее, чем сверлить три десятка отверстий под ардуину, а потом их запаивать.
- Мелкосерийное производство готовых или почти готовых плат, для себя если нужно несколько или на продажу. На том же jlcpcb можно заказать изготовление плат с распайкой внимание smd компонентов. То есть ардуину вам никто не припаяет, а вот ту же 328 мегу припаяют за 100 рублей, тиньку 13ю – за 35 рублей, а чем больше партия – тем дешевле. К этому вопросу мы вернёмся ближе к концу этого урока.
Соединять все ноги питания (GND, VCC) максимально толстыми и короткими дорожками между собой:
Поставить керамический конденсатор
100 нФ/nF (0.1 мкФ/uF) по питанию МК: между VCC и GND для сглаживания микропульсаций напряжения
- Располагать максимально близко к пинам питания МК
- Также параллельно ему можно поставить электролит (алюминиевый цилиндр) или танталовый конденсатор (компактный SMD чип) на 10-47 мкФ/uF, для сглаживания более серьёзных пульсаций напряжения. Особенно если МК питается от одного источника с другими потребителями, или используется некачественный источник питания.
Если нужна кнопка сброса (reset), подключаем её к RST и GND, т.е. кнопка должна подать на RST низкий сигнал. Внутри МК уже присутствует подтягивающий резистор на пин RST
- При наличии кнопки и дорожки от пина RST рекомендуется подтягивать пин к VCC резистором на 10 кОм, потому что внутренний подтягивающий резистор имеет довольно большое сопротивление и наведённые на дорожку помехи (она выступает в роли антенны) могут привести к сбросу МК
Я думаю теперь вы готовы к созданию проекта на своей плате!
Перенос МК с Arduino на свою плату
Напомню, что источник тактирования играет важную роль при загрузке прошивки. Микроконтроллер может быть настроен на тактирование от внутреннего генератора на 8 МГц, либо на тактирование от внешнего.
Видео
В этой статье будет показан переход от программирования платы Arduino к программированию «сырого» микроконтроллера ATtiny84 с использованием привычных скетчей.
Нам понадобится
Начинаем с простого скетча
Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода. Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0. Скетч содержит следующий код:
Скетчи на ATtiny84
Итак, у нас Arduino Uno. Как же нам запрограммировать нашу «тиньку»? Для этого используется такое устройство, как программатор. Он необходим, чтобы залить прошивку в контроллер. Мы можем превратить нашу Arduino в программатор. Это элементарно делается путём заливки скетча ArduinoISP.
Делаем программатор и собираем схему
Открываем соответствующий скетч «Файл → Примеры → ArduinoISP» и заливаем его. Все, превращение завершено. Теперь необходимо правильно собрать схему, чтобы прошить «тиньку». Обратимся к коду скетча, который был только что залит. Даже не к коду, а к комментарию перед ним.
Сначала подключим светодиоды таким образом, как описано в комментарии, не забывая резисторы. После сборки схемы и подачи питания, светодиод, подключенный к пину 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 и при использовании «чистого» кода C. В Ардуино пины нумеруются последовательно и исключаются системные (питание, земля и т. д.), а в реальности всё немного иначе. Все выводы контроллера можно охарактеризовать двумя парметрами: номер порта (порт А, порт В и т.д.) и номер вывода (1..8).
На сайте Arduino можно найти карту пинов. Она выглядит следующим образом:
Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:
В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП. Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.
Теперь необходимо научить среду программирования Arduino понимать тот факт, что мы используем другой контроллер.
Учим среду разработки
Первым делом необходимо скачать библиотеку arduino-tiny, содержащую в себе все необходимое. Далее заходим в настройки Arduino и смотрим расположение папки со скетчами. Переходим в эту папку и создаем там новую с названием «hardware». А в ней еще одну, «tiny». Копируем содержимое скачанного ранее архива в эту папку. И последнее действие — переименовываем файл «Prospective Boards.txt» в «boards.txt». Теперь перезагружем среду разработки и идем в меню «Сервис → Плата». Можно видеть, то добавилось много новых пунктов.
Программируем ATtiny84
В качестве кода берем уже написанный нами код для светодиода и подстроечного резистора и изменяем там номера пинов.
Результат
Мы получили устройство, аналогичное тому, что могло бы быть сделано на Arduino, но использовали для него дешёвый и компактный микроконтроллер.
Так вы можете сгрузить некоторые обязанности в вашем большом проекте на отдельные микроконтроллеры, комбинировать их, заменять и делать много интересных, компактных вещей.
Уже пару лет прошло с тех пор, как я полностью отказался от Wndows в пользу Linux. Для себя я выбрал дистрибьютив Linux Mint.
Освоение платформы Arduino я начал гораздо раньше. Не хочу сказать, что я великий программист микроконтроллеров, но все устройства какие мне нужно было сделать — я сделал =).
К сожалению, если устанавливать Arduino IDE через стандартный менеджер программ в Linux Mint или Ubuntu, то будет доступна лишь морально устаревшая версия 1.0.5. Почему-то обновлять репозиторий давно забросили, а PPA для Arduino я не нашел.
Поэтому придется устанавливать среду вручную, впрочем это совсем не сложно. Сначала нужно скачать архив по этой ссылке.
Распакуйте его в любую удобную директорию и запустите файлик install.sh.
После этого на рабочем столе (или в списке приложений) появится ярлык Arduino и через который можно будет запускать среду.
Однако при попытке загрузить скетч в плату будет вылазить такая ошибка:
Для устранения этой несправедливости необходимо добавить своего пользователя в группу dialout. Для этого в Linux Mint необходимо открыть Меню-Администрирование-Пользователи и группы.
В появившемся окне кликаем по области, где расположен список групп, к которым принадлежит ваш пользователь.
В списке ставим галочку напротив группы dialout. Потом жмем ОК и перезагружаем компьютер(или выходим из сеанса и входим обратно).
После этого можно смело пользоваться Arduino IDE. Примечательно, что для самих плат не нужно устанавливать никаких драйверов. Просто выбираете нужную плату и порт в списке и загружаете скетчи.
Добавление поддержки семейства ATTiny
Все-таки Arduino это плата для разработки. Готовое устройство необходимо собирать на основе микроконтроллера и соответствующей обвязки.
В них можно загрузить точно такие же скетчи(правда не все библиотеки поддерживаются), что и в обычную Arduino. Правда для этого потребуется программатор. Я использую самодельный USBAsp, но можно использовать и имеющуюся на руках Arduino в качестве ISP программатора.
Далее в меню выбрать Инструменты-Плата-Менеджер плат и в появившемся окне в списке Тип выьрать пункт Внесены и в списке дополнений найти и кликнуть по attiny by David A. Mellis. Появится кнопка Установить, которую и следует нажать.
После этого вы можете выбрать одну из поддерживаемых микросхем attiny в списке плат.
Настройка поддержки USBAsp в LInux
Для программирования ATTiny и ATMega внутрисхемно необходим программатор. Как я уже писал, я использую USBAsp и в Linux по умолчанию нет разрешения работать с USB устройствами напрямую для обычных пользователей. Можно просто запускать Arduino IDE с правами root, но гораздо удобнее прописать разрешение на работу с USBAsp.
В появившемся текстовом редакторе вставляем(ctrl-shift-v) следующий текст: SUBSYSTEM=="usb", ATTR=="16c0", ATTR=="05dc", GROUP="dialout", MODE="0666". После этого жмете ctrl-O и ctrl-X, чтобы сохранить файл и выйти.
После перезагрузки компьютера вы сможете без проблем использовать программатор USBAsp в системе Linux.
Программируем ATTiny
Для примера возьмем ATTiny45. Сначала нужно присоединить микроконтроллер программатору. Можно сделать это на макетной плате по следующей схеме.
Но гораздо лучше сделать свою плату для разработки для attiny и atmega как у меня. Также хорошим решением будет предусматривать 6-пиновый разъем для внутрисхемного программирования, куда можно будет подключить программатор, чтобы перепрошивать микроконтроллер непосредственно в устройстве.
Далее программатор можно подсоединить к компьютеру и запустить Arduino IDE где в меню Инструменты-Программатор выбрать пункт USBAsp. Затем выбрать Attiny25/45/85 а меню Инструменты-Плата. В меню Инструменты-Процессор выбрать Attiny45.
Также необходимо выбрать генератор частоты и саму, на которой будет оперировать микроконтроллер, в меню Инструменты-Clock . Если в вашей схеме нет кварца, то выбирайте частоты только с приставкой Internal. Это означает, что микроконтроллер будет полагаться на свой внутренний генератор частоты. Если вы выберите пункт с приставкой External, то микроконтроллер не будет работать, пока вы не подключите кварц к соответствующим ножкам. Частоту можете выбирать какую угодно. Если в вашей программе нет действий, которые должны выполняться за микросекунды, то имеет смысл использовать самую малую частоту. Если вам важны точные промежутки времени(например, измерение частоты), то лучше использовать частоту побольше и внешний кварц соответствующей частоты. В нашем примере выберем Internal 1MHz.
Если вы прошиваете конкретный микроконтроллер первый раз, а так же в случае смены частоты и источника частоты, необходимо сначала настроить микроконтроллер на выбранные параметры. Для этого выберите в меню пункт Инструменты-Записать загрузчик. Если все хорошо, то вы увидите надпись Запись загрузчика завершена.
Теперь вы можете загрузить скетч в микроконтроллер просто нажав кнопку Загрузка.
При написании микропрограмм в Arduino IDE следует руководствоваться картинкой ниже, чтобы знать какие порты IO среды Arduino соответствуют ножкам микроконтроллера.
Читайте также: