Arduino ISP программатор для ATtiny, Минимальная Arduino, DIY
Arduino это просто, быстро, а самое главное удобно для реализации идей. Но когда всё отлажено и схема, и код настает момент, когда избыточность плат просто не нужна. Идею то можно реализовать значительно дешевле и компактнее. Без горы проводов. Для того чтобы избавиться от ненужных примочек в готовом устройстве предлагаем прошить ваш код непосредственно в микроконтроллер. Ниже описан пример, где в качестве программатора используется Arduino Nano, а прошивать будем микроконтроллер ATtiny13 на котором, кстати, собран набор RDC1-0004, Управление вентиляцией.
Распакуйте архив attiny13.zip. В папке со скетчами создайте папку «hardware». Размещение папки со скетчами можно узнать, выбрав «Файл – Настройки».
Из распакованного архива скопируйте папку «attiny13» в папку «hardware». Должно получиться примерно так: «C:\Users\имя пользователя\Documents\Arduino\hardware\attiny13».
Перезапустите Arduino IDE.
Если сделали все правильно, в списке плат появиться строка «ATtiny13(ATtiny13a)».
В списке Frequency можно выбрать нужную частоту работы микроконтроллера.
Чтобы запрограммировать микроконтроллер, нужен программатор. Программатор можно сделать из Ардуино Нано. Для этого в нее нужно загрузить скетч ArduinoISP из имеющихся примеров.
Внимание! Если для ATtiny13 будет выбрана частота менее 1,2 МГц, пример ArduinoISP нужно изменить.
Строку
#define SPI_CLOCK (1000000/6)
нужно заменить на
#define SPI_CLOCK (128000/6)
Подключите Arduino Nano к ПК. В Arduino IDE выберите плату Arduino Nano, процессор ATmega328, нужный COM-порт.
Выберите «Скетч – Загрузка». Начнется загрузка программы.
Дождитесь окончания загрузки. Программатор готов.
Подключите программируемый микроконтроллер к Ардуино, как показано на рисунке.
Теперь в Arduino IDE выберите программируемый микроконтроллер, нужную частоту, COM-порт остается без изменений. Выберите используемый программатор, в нашем случае «Arduino as ISP».
Сначала нужно записать загрузчик. В данном случае эта команда только изменяет заводские настройки микроконтроллера, чтобы он работал на выбранной частоте, загрузчик не пишется.
Теперь в микроконтроллер можно загружать «рабочую» программу. Откройте скетч, который хотите загрузить, и выберите «Скетч – Загрузить через программатор». Начнется загрузка. Дождитесь окончания загрузки программы.
Если для вашего проекта вы выбрали другой контроллер из семейства ATtiny, тогда загружайте и распаковывайте в папку hardware дополнительные файлы описания.
tiny.zip
tiny Chip_Dip.zip
Схема подключения для ATtiny в корпусе DIP14:
Программирование ATTiny с помощью Arduino Mega 2560
В течение последних нескольких дней я безуспешно пытался запрограммировать ATTiny45 AVR, используя Arduino Mega 2560 в качестве ISP. Все учебники, которые я видел для использования Arduino в качестве ISP, используют Uno и Duemilanove. Ни один из них не упоминает Mega2560.
Мне было интересно, нужно ли что-то менять в проводке или программировании при использовании Mega2560. Например, используется ли конденсатор между сбросом и землей? Или резистор должен быть подключен к сбросу до 5 в? Прежде чем я пойду на форумы и начну публиковать свои конкретные сообщения об ошибках, я подумал, что проверю, не является ли проблема простой разницей между настройкой Uno/Duemilanove и Mega2560.
arduino avrПоделиться Источник Kevin A. Wilson 01 апреля 2012 в 22:43
3 ответа
- Attiny 1634 не найден в меню Сервис Arduino IDE
- USB связь между Arduino Mega ADK 2560 и Samsung Galaxy S2
Я пытаюсь обеспечить usb связь между Arduino Mega ADK 2560 (есть два типа, я использую тот, который имеет два порта usb на нем) и Samsung Galaxy S2, версия которого 2.3.5 (custom build). Однако, когда я пытаюсь использовать код demokit, приведенный на сайте Arduino, я всегда получаю ошибку error 5…
0
Последние пару дней я тоже рвал на себе волосы,чтобы заставить мой Mega 2560 запрограммировать запас ATtiny85 и 328 с загрузчиками. Прошлой ночью я наконец-то заработал. Эти две статьи помогли мне:
- http://arduino.cc/forum/index.php?действие=страница печати;тема=96735.0
Загрузка предложенного модифицированного эскиза AVRISP и добавление конденсатора между +5 В и землей на mega сделали для меня трюк, и я запрограммировал свой 328p с загрузчиком Duemilinove.
Затем с этой новой настройкой я использовал эти инструкции для программирования моего ATtiny85, и это тоже сработало:
- http://hlt.media.mit.edu/?p=1695
Надеюсь, это поможет,
Поделиться Skorn99 04 апреля 2012 в 17:50
0
Насколько я знаю, нет никаких изменений, которые вам нужно сделать, чтобы Mega использовался в качестве ISP.
Можете ли вы опубликовать какое-либо конкретное сообщение об ошибке, которое вы получаете, или с какой проблемой вы сталкиваетесь при использовании mega as ISP?
Поделиться Sudar 03 апреля 2012 в 05:55
0
На благо будущих читателей… Я пытался и не смог заставить мега запрограммировать ATTiny85. В конце концов я где-то прочитал в комментариях к статье (забыл, где сейчас), что она не работала на 2560, поэтому я поменял ее на uno, и она отлично работала.
Поделиться sjmeverett 15 декабря 2012 в 16:12
Похожие вопросы:
Как сбросить код arduino Mega 2560 автоматически?
Я работаю над температурным проектом, используя arduino для сбора температуры. Но иногда arduino висит там, так что мне приходится отсоединять шнур и подключать его обратно, чтобы перезапустить…
Проблема с началом работы с Arduino mega
Arduino — увеличить диапазон рабочего цикла PWM на mega 2560?
Я использовал arduino mega 2560. Потому что analogWrite просто имеет значение от 0 до 255, если я хочу увеличить диапазон, например 4096: analogWrite(9, 4096) . Неужели это невозможно? Как мы можем…
Attiny 1634 не найден в меню Сервис Arduino IDE
Я разработал дизайн с использованием arduino uno r3 и хотел бы использовать attiny 1634 вместо atmega 328p. Научился программировать attiny 85 с помощью arduino isp. Нужна помощь для…
USB связь между Arduino Mega ADK 2560 и Samsung Galaxy S2
Я пытаюсь обеспечить usb связь между Arduino Mega ADK 2560 (есть два типа, я использую тот, который имеет два порта usb на нем) и Samsung Galaxy S2, версия которого 2.3.5 (custom build). Однако,…
Перенос FreeRTOS на Arduino MEGA 2560 Rev3 (ATmega2560)
В настоящее время я внедряю программу на основе FreeRTOS на платформе Arduino. Я хотел бы использовать Arduino MEGA 2560 Rev3 (который основан на ATmega2560 ) для этого проекта, но я не смог найти…
Настройка Bluetooth HC-05 с Arduino Mega 2560
я не могу понять, когда я пытаюсь настроить и подключить bluetooth с моим устройством android. (я использовал bluetooth HC-05 от lc-technology и Arduino Mega 2560) Я пытаюсь соединить arduino и…
Как загрузить код c# с Visual Studio на Arduino Mega
Поэтому я решил попробовать свои силы в кодировании и Arduino. Мой проект-это автономный робот, который будет перемещаться сам по себе с помощью гидролокатора HC-SR04, который будет использовать в…
Arduino Sketch не загружается в Arduino Mega 2560
Я пытаюсь загрузить эскиз в Arduino Mega 2560, но он не загружается. Он показывает сообщение об ошибке- avrdude: verification error, first mismatch at byte 0x0000 0xbf != 0x06 avrdude: verification…
Встроенный светодиод светится на коде светодиода on arduino mega
Я написал код на atmel studio для мигания светодиода на выводе 13. После загрузки кода с помощью встроенного светодиода xloader mega начал мигать. Я загрузил код fade на свой mega, и встроенный…
ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino. | Электроника и жизнь
Всем привет! В этой статье мы познакомимся с двумя микроконтроллерами семейства ATtiny: ATtiny13 и ATtiny85 и научимся их прошивать используя в качестве программатора Arduino UNO.
ATtiny13 20PU и ATtiny85 20PUATtiny13 20PU и ATtiny85 20PU
Собственно, эти микроконтроллеры младшие братья семейства ATMega, т.е. того самого семейства которые установлены в Ардуино. Например, ATmega328 – основа Arduino UNO, а ATmega2560 – основа Arduino Mega.
По внешнему виду оба данных микроконтроллера идентичны. Каждый имеет по 8 ножек, распиновка тоже практически одинаковая.
РаспиновкаРаспиновка
Основные для нас отличия заключаются в том, что ATtiny13 имеет 1КБ flash памяти (т.е. памяти для хранения программ), 64 байта оперативной памяти SRAM и 64 байта энергонезависимой памяти EEPROM. Тогда как ATtiny85 имеет 8КБ flash памяти и по 512 байт оперативной памяти и энергонезависимой памяти.
Сравнение ATtiny13, ATtiny85 и Arduino UNOСравнение ATtiny13, ATtiny85 и Arduino UNO
Еще одной особенностью является то, что цена ATtiny13 более чем в 2 раза ниже, чем ATtiny85. Поэтому, если для выполнения задачи характеристик ATtiny13 хватает, то лучше брать ее. Это удешевляет стоимость готового изделия.
Цена за 10 шт ATtiny13Цена за 10 шт ATtiny13
Цена за 10 шт ATtiny85Цена за 10 шт ATtiny85
С полным перечнем других отличий Вы можете ознакомиться на сайте Avr.ru. Там есть достаточно подробная сравнительная таблица.
В качестве программатора будем использовать Arduino UNO. Выбираем Файл -> Примеры -> ArduinoISP. И предварительно проверив, правильно ли у нас выбрана плата и COM порт, загружаем скетч в Ардуино. Теперь Arduino UNO работает в режиме программатора. Вывести его из данного режима можно просто загрузив любой другой скетч, например тот же Blink.
Выбор скетча для перевода Arduino UNO в режим программатораВыбор скетча для перевода Arduino UNO в режим программатора
Начнем с ATtiny13. Размещаем ATtiny на макетной плате.
Тут важно заметить, что отсчет пинов ATtiny начинается с ножки, возле которой присутствует круглое углубление, либо треугольник, либо, как в данном случае, и то и другое. Отсчет ведется против часовой стрелки, таким образом, что восьмой пин, находится напротив первого.
Номера пинов ATtiny13 и ATtiny85Номера пинов ATtiny13 и ATtiny85
Соединяем пин 1 ATtiny с 10 Ардуино, 4 — с землей, 5 – с 11, 6 – с 12, 7 – с 13, 8 – с выходом 5V Ардуино. С помощью конденсатора на 10 мкФ, соединяем reset и gnd Ардуино. Длинная плюсовая ножка к reset, а короткая минусовая к земле.
Схема соединения ATtiny и Arduino UNOСхема соединения ATtiny и Arduino UNO
Возвращаемся в Arduino IDE. Открываем Файл -> Настройки. И в поле Дополнительные ссылки для Менеджера плат, вставляем ссылку для работы с ATtiny13:
https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.jsonСсылка для Менеджера плат
Ссылка для Менеджера плат
Переходим в Инструменты -> Плата -> Менеджер плат. В списке находим нужный нам пакет для работы с ATtiny13 и нажимаем установить.
Далее открываем стандартный скетч Blink.
В соответствии с даташитом нулевой пин Ардуино соответствует 5 пину ATtiny. Привяжем стандартную константу LED_BUILTIN к нулевуму пину Ардуино, а в соответствии с даташитом, это у нас будет 5 ножка ATtiny.
Скетч BlinkСкетч Blink
В качестве Платы выбираем ATtiny13. Остальные все значения оставляем как есть.
Выбор ATtiny13Выбор ATtiny13
Вначале в ATtiny нужно записать загрузчик. Уточняем, что в Инструментах -> Программатор выбрано Arduino as ISP. И нажимаем — Записать загрузчик. Это делается один раз.
Теперь загружаем сам скетч Blink в ATtiny. Выбираем Скетч -> Загрузить через программатор.
После загрузки скетча, подключаем длинную ножку светодиода к 5 пину ATtiny, а короткую через резистор 220 Ом соединяем с землей. Светодиод начинает мигать.
Собранная схема с ATtiny13 , Ардуино и мигающим светодиодомСобранная схема с ATtiny13 , Ардуино и мигающим светодиодом
Теперь проделаем ту же процедуру с ATtiny85. Извлекаем из макетной платы ATtiny13 и на его место ставим ATtiny85.
Возвращаемся в Arduino IDE. И в Дополнительные ссылки для Менеджера плат, вставляем ссылку для работы с ATtiny85:
https://raw.githubusercontent.com/damellis/ATtiny/ide-1.6.x-boards-manager/package_damellis_ATtiny_index.json — ATtiny85
Переходим в Инструменты -> Плата -> Менеджер плат. И устанавливаем пакет для работы с ATtiny85.
В Платах выбираем — ATtiny25/45/85. Процессор — ATtiny85. Clock – internal 16 MHz.
Выбираем ATtiny85Выбираем ATtiny85
В начале, как и в случае с ATtiny13, записываем в Загрузчик.
А далее загружаем сам скетч Blink в ATtiny85. Светодиод мигает.
Собранная схема с ATtiny85 , Ардуино и мигающим светодиодомСобранная схема с ATtiny85 , Ардуино и мигающим светодиодом
В дальнейших проектах, там, где нам будет хватать характеристик ATtiny13, мы будем использовать именно его, а в более сложных проектах, будем использовать ATtiny85 и более мощные микроконтроллеры.
В следующей статье я расскажу, как работать с аналоговым портом ATtiny13, получать из него данные, обрабатывать и выдавать нужный нам результат в цифровой порт. Ниже размещено видео по материалам данной статьи.
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:Программируем Attiny 13, 13а и 85 через Ардуинку (Arduino) (видео)
Ну, если так можно сказать, то дорос я таки до того, дабы на внешний вид пластмасса с 8 ножками слушалась меня по мере своих способностей. Каких-либо особых целей не преследовалось, а руководило мной любопытство и познание, не более… Как и что до конца не осознано, но результат получен и пора его подытожить, — в виде этой вот статьи.
Итак, написано об этом более чем много, но нет ничего более ценного, чем собственное понимание, даже уже того, что хорошо известного другими. Из этого я сделал вывод, что подытоживать свои знаниями такими вот статьями будут еще многие, дабы в последствии в виде подсказки обратиться все же к своим заметкам! Однако если они помогут еще кому-то, это лишь к лучшему. Поэтому пора начинать уже по существу!
Attiny 13 и 13а микроконтроллеры
В общем, не буду приводить даташиты и очень подробно расписывать, что и где. В целом у микроконтроллера несчастных 8 ножек, само собой две это питание 4 и 8. 4 аналоговых выхода-входа, пару ШИМ ножек, и на всех них навешано еще дополнительных функций. Лучше обратиться к картинке.
* — надо обратить внимание, что PB1, PB2 и т.д. совсем не соответствует физическим ножкам 1, 2 и т.д.. Это надо помнить, подключая и программируя Тиньку.
Собственно на этой картинке показано даже как подключается Ардуино к Аттини во время ее программирования. Смотрите синие метки.
Как залить скетч для программирования через Arduino
Сам же скетч для того, чтобы Ардуино стала нашим программатором, залит прямо уже в оболочке программы Arduino. То есть подключаем Ардуино и заливаем скетч-программатора. Для наглядности тоже картинка. Именно кликнув по этому пути и можно будет залить скетч для программирования Attiny
Если выдает ошибку, то заливаем загрузчик через примеры вот так… (тоже самое, но другим путем)
Появляется (открывается новое окно) скетч из примера, его и льем в Ардуинку.
* — почитайте в скетче комментарии на английском, там могут быть ограничения по частоте работы для различных микроконтроллеров. Это надо учитывать при последующей заливке.
Теперь Ардуинка это уже не Ардуинко, а ISP программатор, который как раз работает через Ch440, именно через эту микросхему все программируется и она встречается в других программаторах ISP. Осталось лишь вместо встроенного 328 контроллера подключить Attiny 13.
Установка плат микроконтроллеров Attiny 13, 13a, 85 в программную среду Arduino
Для этого необходимо расширить список плат, дополнив штатную папку hardware архивом attiny13. Опять же для наглядности картиночку оставляю, где это все находится и куда разархивировать скачанный архив.
Теперь подключаем уже наш микроконтроллер согласно ножек в картинке выше, — синие метки. А сама принципиальная схема будет таковой.
Затем как все собрали, выбираем плату attiny13 в Инструменты>Платы>ATtiny13. (частота 128 Khz) В итоге можно заливать стандартные скетчи, надо лишь указывать правильные ножки и понимать, что функции для Аттини 13 ограничены.
Если что-то не получается залить из скетчей, то это вполне возможно из-за того, что такие функции не поддерживаются. Доступны:
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogReference(INTERNAL) / (EXTERNAL)
shiftOut()
pulseIn()
analogWrite()
millis()
micros()
delay()
delayMicroseconds()
Собственно о наладке Ардуино для программирования Аттини 13, на этом всё! Далее поле вашего творчества будет лишь ограничиваться фантазиями и возможностями по их реализации.
Установка платы микроконтроллера Attiny 85
Первоначально необходимо скачать архив ВОТ ЭТОТ и залить по аналогии с тем, о чем я уже говорил, в папку hardware. Схемотехника подключения один в один как для 13 серии.
Если так не получилось, то делаем по-другому. Выбираем в меню вкладки Файл>Настройка и вставляем вот эту ссылку — https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json в окно «Дополнительные ссылки для менеджера плат». После переходим в менеджер плат и там выбираем плату «attiny by Davis A. Mellis», она должна быть в самом низу. Устанавливаем ее и у нас появляются нужные нам микроконтроллеры.
Потом выбираем нужную плату.
Делаем последние настройки по выбору и все… После этого у меня все прекрасно заливалось в Аттиньку 85.
Атинька 85 перед 13 имеет ряд преимуществ. Во-первых, это больший объем памяти, что важно для «больших» проектов. Но самое главное, как мне кажется, это поддержка канала I2С, это значит что гипотетически к ней уже можно подключать экраны для отображения информации, хотя я этого не проверял. Если кто-то подключал то, отпишитесь так ли это?
Возможные проблемы при программировании и подключении Attiny 13, 13а, 85
Как мы видим на картинке выше, у микроконтроллера ATtiny13, 6 портов ввода-вывода (PB0 – PB5) и 2 ножки по питанию (VCC, GND).
Однако, первая ножка микроконтроллера Attiny13 (а именно программный порт PB5), по умолчанию не порт ввода-вывода, а сброс (Reset) микроконтроллера.
Да, его можно переключить в порт ввода-вывода специальным фьюз битом (RSTDISBL), но тогда микроконтроллер не будет поддерживать внутрисхемное программирование (по SPI интерфейсу).
Не устанавливаете без надобности фьюз бит RSTDISBL, в противном случае ваш микроконтроллер перестанет программироваться по SPI интерфейсу (внутрисхемное программирование).
Ну и еще один трабл связанный с этим же фактом, то есть если вы вдруг повесите на 1 физическую ножку скажем подтягивающий резистор в 10кОм (или светодиод), как для входа (выхода), а использовать его не будете для этих целей, то микроконтроллер будет постоянно перезагружаться и работать не будет. Это уже относится к схемотехнике, а не программированию. В общем первую ножку лучше оставить в покое…
Архивы полезное — Дайджест о микроконтроллере Attiny13
Как оказалось, влезать в тему создания устройств с использованием микроконтроллеров надо с нескольких направлений. Я сначала не хотел ввязываться в Ардуино, а потом попробовал, и мне даже понравилось. В каких-то ситуацих можно быстро и просто программировать в среде Arduino IDE, загружая прошивки в Attiny. Безусловно, памяти это съедает много. Библиотеки и методы компиляции для одного… Читать далее »
Раздел: Без рубрики Метки: ардуино, книги, полезное, ссылки, форумУ меня никогда не было Arduino. Вероятно, никогда и не будет, т.к. я считаю это чем-то средним между микроконтроллерами, типа Attiny, и чем-то более продвинутым, типа RaspberryPi. Но чем черт не шутит, да и у вас вполне может быть ардуина, и, как оказалось, с её помощью можно прошивать тиньки. Причем, прелесть в том, что данная… Читать далее »
Раздел: Без рубрики Метки: ардуино, полезное, прошивка, частотаВ последнее время смотрю немало проектов, и культурные люди оставляют в них ссылки на свои источники и полезные материалы. Чтобы не потерять, я решил сохранить на этом сайте калькулятор фьюзов микроконтроллеров, в том числе и Attiny13a — смотрите на сайте payalo.at.ua И еще, как минимум, один онлайн-калькулятор фьюзов для атмеловских контроллеров (atmel fuse calc) —… Читать далее »
Раздел: Без рубрики Метки: fuse, полезное, прошивкаПолезная справочная таблица по прерываниям Attiny2313 Расположение векторв прерываний в таблице определяет приоритет их обработки. Чем младше адрес прерывания, тем выше приоритет. Взято с сайта avrinfo
Раздел: Без рубрики Метки: полезное, прерыванияВстроенный в микроконтроллер таймер может быть использован самыми разными способами. Я в своих практиках еще не дошел до технических подробностей. Но, чтобы не упустить их из виду, оставляю тут ссылку на сайт avrinfo. Timer/Counter0 (Таймер/счётчик0) в ATtiny2313. Описание регистров. Описание регистров TCNT0 TCNT0 — восьмиразрядный счётный регистр. Когда таймер работает, в зависимости от режима его… Читать далее »
Раздел: Без рубрики Метки: полезное, счетчик, таймерДелаем из Arduino программатор ISP для Attiny 13, 13а, 85 (видео)
Arduino весьма привлекательная и функциональная платформа, она способна на многое…. Именно многозначительностью слова «многое» я хотел сказать о том, что сам не в состоянии выжать из нее все то, на что она способна! Однако при всех ее преимуществах, есть и минусы. Когда дело дойдет до минимализма размеров, ограниченности функциональности и низкого бюджета проекта, то нет смысла «лепить» столь «мощный» контроллер как в Ардуино в грошовые поделки. Здесь самые младшие контроллеры будут куда уместнее и кстати. Скажем Attiny 13, 13а, 85. Все они в состоянии работать как генераторы, как управляющие «ключи» для низких сигналов по прописанным критериям. Все это лишь подводит к мысли о том, что если сделать из Ардуинки программатор для микроконтроллеров, то в принципе его можно вполне применять для реализации поделок на этих микроконтроллерах. Именно о таком программаторе в этой статье.
Принцип заливки кода в Аttiny
В Ардуинку записывается загрузчик, как любой другой скетч, после этого она начинает заливать скетчи уже не в свой микроконтроллер на своей плате, а через прописанные ножки пишет код напрямую в Аттини. Теперь подробнее.
Заливаем в Ардуинку скетч микроконтроллера
Делается это так. В меню среды Ардуино выбираем Файлы=> Примеры=> Arduino ISP. После этого открывается скетч в новом окне, его и заливаем на подключенную плату Ардуино.
Все теперь уже собственно Ардуинка и стала программатором, единственное надо еще подключить Аттиньку и залить для нее плату. Делаем это так.
Вначале подключаем Аттини по приведенной схеме.
Подключение (схема) Attiny к Arduino
В моем случае я сделал это подключение на монтажной плате, которая вставляется в стандартные ножки Ардуино, при этом микроконтроллер тоже вставляется в монтажную колодку для заливки программы. Также есть светодиоды на плате, чтобы можно было проверить самые простые скетчи на месте. Общий вид платы получился следующим.
Плата была прорисована так, чтобы было все не только функционально, но и привлекательно!
Ну и тут же ссылка на архив со слоями, чтобы можно было заказать плату у производителей плат (pcb) скачиваем архив, а также сам проект под бесплатную программу прорисовки плат FreePCB
Сама плата вставляется в Ардуино UNO, без каких либо паек, доработок и всего прочего, что очень удобно! Вот так!
Плату можно заказать на сайте и после использовать для программирования микроконтроллеров
Итак, как подключение осуществлено, то пора заливать в среду Ардуино, то есть в программку еще одну плату.
Установка дополнительной платы Attiny в среде Arduino
Для этого просто скачиваем архив и распаковываем его туда, где и лежат платы, это папка hardware. У меня путь такой…, смотрите на картинке.
Все теперь при очередном открытии среды мы увидим, что появились новые платы Attiny13 (если не открывается, то проверьте чтобы архив был сразу в корне папки, а не лежал в «подпапках глубже»), именно их и выбираем, когда хотим залить скетч в микроконтроллер на надстройке, а не в платформу Ардуино. Теперь вы можете реализовывать самые простые проекты и придумывать сами себе задачи и решать их с помощью электронных помощников! Один из первых моих проектов для машины это реализация микроконтроллера для стоп-сигнала или указателя поворота «бегущие огни».
Мигалка на ассемблере и ATtiny2313
Для программирования микроконтроллеров существуют два основных языка — это язык Си и Ассемблер. Бывают и другие языки но Си и Ассемблер используются чаще других т.к. их можно использовать для создания программ оптимально использующих ресурсы микроконтроллера. Язык Си более прост в изучении чем Ассемблер, более прост для понимания человеком вообще (на нем можно писать более читабельный код) а также более просто переносим между разными микроконтроллерами и вообще разными устройствами. Ассемблер же не так прост в понимании и хуже переносим т.к. он имеет множество разных команд которые отличаются друг от друга при программировании разных микроконтроллеров и устройств и даже при программировании одного и того же устройства но при использовании разных компиляторов. Однако язык ассемблер дает больше возможностей управлять ресурсами микроконтроллера. Программы написанные на Ассемблере могут быть более оптимальными чем программы на Си. Также изучение Ассемблера позволяет лучше понять работу микроконтроллера и писать более оптимальные программы на языке Си. Поэтому данный низкоуровневый язык стоит изучить даже если необходимость в его изучении и применении на практике никогда не возникала. Данный язык сильно отличается для разных микроконтроллеров но всё таки некоторые общие принципы наверняка должны присутствовать в той или иной степени для разных устройств. Начать скорее всего будет лучше с какого нибудь простого микроконтроллера. Например, для старта, можно взять ATtiny2313 и написать для него мигалку а если это получиться то делать далее уже более сложные устройства и переходить на более сложные микроконтроллеры например какие нибудь из STM32. Чтобы писать саму программу можно использовать какой либо текстовый редактор. Обычно в ОС Windows присутствует текстовый редактор «блокнот». После написания программы в «блокноте»её можно сохранить в формате с расширением .asm потом откомпилировать в файл с расширением .hex каким нибудь компилятором ассемблера для микроконтроллеров avr напр. компилятором avra (который можно скачать по ссылке https://sourceforge.net/projects/avra/files/1.2.3/ (для windows нужно скачать avra-1.2.3-win32.zip)) (для установки достаточно разархивировать) и записать полученный файл с расширением .hex в микроконтроллер утилитой avrdude (устанавливается вместе с arduino IDE, WinAVR или отдельно) через программатор. Рассмотрим схему устройства которое будем программировать:Рисунок 1 — Светодиодная мигалка на микроконтроллере ATtiny2313 с программатором
На рисунке выше приведена схема светодиодной мигалки на микроконтроллере ATtiny2313 с программатором. Микроконтроллер ATtiny2313 имеет встроенный тактовый RC генератор и встроенный внутренний резистор для подтяжки вывода reset к нужному для работы микроконтроллера уровню также ему не нужно много внешних конденсаторов и прочей дополнительной обвязки (этим данный микроконтроллер прост и хорош). В качестве программатора можно использовать Arduino с записанным в неё скетчем ISP программатора:
Рисунок 2 — Светодиодная мигалка на микроконтроллере ATtiny2313 с программатором на Arduino Uno
Если все необходимые элементы имеются то можно начинать писать программу. Давайте рассмотрим простую программу мигания светодиодом на Ассемблере:.CSEG ; начало сегмента кода .ORG 0x0000 ; начальное значение для адресации ; — устанавливаем пин 0 порта D на вывод — LDI R16, 0b00000001 ; поместим в регистр R16 число 1 OUT 0x11, R16 ; загрузим значение из регистра R16 в DDRD (адрес DDRD = 0x11 (attiny2313,atmega8)) ; — основной цикл программы ( адрес PORTD = 0x12 (attiny2313,atmega8) ) — Start: SBI 0x12, 0 ; подача на пин 0 порта D высокого уровня ; — задержка 1 — ldi r18, 250 ldi r19, 250 L1: dec r19 brne L1 dec r18 brne L1 CBI 0x12, 0 ; подача на пин 0 порта D низкого уровня ; — задержка 2 — ldi r18, 250 ldi r19, 250 L2: dec r19 brne L2 dec r18 brne L2 RJMP Start
Ассемблер, в отличии от Си, регистронезависимый язык поэтому команды можно писать и большими буквами и маленькими и вперемешку. Команды которые начинаются с точки называются директивами. Директивы — это команды не для микроконтроллера а для компилятора. Директива .CSEG означает начало сегмента кода, помимо сегмента кода существует также сегмент данных и сегмент EEPROM. Директива .ORG указывает адрес с которого начинается сегмент. В ассемблере можно делать комментарии т.е. строки которые игнорируются компилятором и нужны для помощи программисту, комментарии начинаются с точки с запятой и завершаются концом строки. Команда LDI нужна для помещения в регистр какой либо константы. Константу можно записать в десятичном, шестнадцатеричном или двоичном виде. Если она записана в двоичном виде то перед ней ставиться нолик и английская буква b т.е. например 0b00000001. Двоичные числа удобны для конфигурирования порта микроконтроллера т.к. по ним наглядно видно в каком бите есть ноль а в каком единица. Если константа пишется в десятичном виде то перед ней ставить ничего не надо а надо просто написать число. Если константа пишется в шестнадцатеричном виде то перед ней ставиться 0x. Чтобы настроить второй пин микроконтроллера на выход нужно в записать единицу в нулевой разряд регистра DDRD. DDRD — это просто название регистра для удобства, на самом деле важно знать что этот регистр имеет какой то адрес в памяти и для того чтобы записать в этот регистр какое либо число и т.о. поместить либо ноль либо единицу в нужный его разряд, нужно записать это число по соответствующему адресу для регистра DDRD в микроконтроллере ATtiny2313 этот 0x11. Для того чтобы настроить второй пин микроконтроллера ATtiny2313 на выход мы сначала командой LDI записываем в регистр R16 число 0b00000001 а потом командой OUT из регистра R16 мы это число помещаем в регистр DDRD по тому что записать сразу константу в DDRD нельзя. Далее идет основной цикл программы т.е. «бесконечный» цикл в котором выполняются основные постоянные действия. Чтобы организовать этот цикл на ассемблере используется оператор безусловного перехода RJMP. В самом низу кода мы видим строку RJMP Start а в самом верху основного цикла мы видим метку Start. Команда RJMP просто переводит выполнение программы на то место где стоит метка т.о. если метку поставить перед этой командой после которой идет название этой метки то можно получить бесконечный цикл. Командой SBI мы устанавливаем высокий уровень т.е. пять вольт на нужном пине микроконтроллера. Если мы используем пин который связан с нулевым битом порта D то после команды SBI мы пишем адрес порта D (для микроконтроллера ATtiny2313 это 0x12) ставим запятую и после этого пишем номер бита который мы хотим установить в логическую единицу чтобы на нужном пине стало пять вольт. Аналогично командой CBI мы делаем ноль вольт на нужном нам пине. Для создания задержки сначала в регистр r18 записывается число 250 (максимальное которое можно записать = 255, минимальное = 0) потом 250 записывается в регистр r19. После чего командой dec (декремент) происходит уменьшение на единицу числа находящегося в регистре r19. Далее имеется команда brne — это оператор условного перехода т.е. он переносит выполнение программы на место с меткой при выполнении условия. Если результатом операции предшествовавшей данной команде был ноль то перехода туда где стоит метка не происходит и выполнение программы продолжается, если был получился не ноль то происходит переход на строку с меткой в данном случае это L1. Т.о. получается цикл выход из которого происходит тогда когда число в регистре r19 становиться равным нулю. Далее происходит декремент числа в регистре r18 и так как сразу там ноль не получиться то переход происходит на строку с меткой L1 а там стоит декремент числа в регистре r18 но так как там уже ноль то декремент делает там 255 и всё повторяется заново т.о. получается вложенный цикл. Эти циклы выполняются какое то время и делают задержку для того чтобы можно было наблюдать мигание светодиода.
После того как программа написана (например в имеющемся в windows текстовом редакторе «блокнот» или любом другом подходящем текстовом редакторе (неважно каком (это дело вкуса (на результат не повлияет (если текстовый редактор подходит для данных целей и позволяет сохранять текст в формате .asm))))) её можно сохранить в формате .asm и откомпилировать в cmd (командной строке windows) командой:
путь_до_компилятора_avra путь_до_файла.asm
например:
F:\avra-1.2.3\bin\avra F:\avr\blink.asm
Если компиляция пройдет успешно то компилятор создаст файл с расширением .hex который можно загрузить в микроконтроллер например командой:
avrdude -c avrisp -P COM3 -b 19200 -p t2313 -U flash:w:blink.hex
(avrdude перед этим надо установить на компьютер)
Эта команда сработает если используется микроконтроллер ATtiny2313 (-p t2313), программатор avrisp (-c avrisp (он же arduino, он же stk500, он же «пять проводков» (avrdude не поймет «пять проводков» (остальное должна понять)))) который подключен к порту который называется COM3 (-P COM3) (если называется по другому то в команду надо вписать соответствующее название). blink.hex — это название откомпилированного файла который надо загрузить в микроконтроллер. При этом в данной программе не прописана установка фьюзов и считается что микроконтроллер либо новый с завод и на нем установлены фьюзы по молчанию либо фьюзы ранее были установлены как надо и менять их не требуется. Если hex файл успешно запишется то светодиод должен замигать!
КАРТА БЛОГА (содержание)
Программирование микросхемы ATtiny85 напрямую через USB без Arduino с использованием загрузчика Digispark
Семейство ATtiny представляет собой серию одних из самых маленьких микроконтроллеров на рынке AVR. Эти микроконтроллеры могут использовать многие библиотеки, доступные на платформе Arduino. Микроконтроллер ATtiny85 представляет собой 8-контактный, 8-битный микроконтроллер AVR. Его небольшой размер и низкое энергопотребление делают его отличным выбором для портативных проектов с небольшими размерами и низким энергопотреблением.Но перенести ваш код на чип может быть немного непросто, поскольку он не имеет интерфейса USB, как платы микроконтроллера.
В нашем предыдущем руководстве мы запрограммировали ATtiny85 с помощью Arduino Uno . Но подключение Attiny85 к Arduino и использование Arduino в качестве интернет-провайдера может быть трудным и трудоемким. Итак, в этом руководстве мы собираемся построить плату программирования ATtiny85 , чтобы мы могли напрямую подключать и программировать ее, как и другие платы микроконтроллера.
Компоненты, необходимые для программирования ATtiny85 через USB- Arduino UNO (только в первый раз при загрузке загрузчика)
- ATtiny85 IC
- Штекер USB A-типа
- 3 резистора (2 × 47 Ом и 1 × 1 кОм)
- 3 диода (2 стабилитрона и 1 диод IN5819)
- 8-контактная база ИС
- Макет
- Провода перемычки
Atmel ATtiny85 — это высокопроизводительный 8-разрядный микроконтроллер с низким энергопотреблением, основанный на архитектуре Advanced RISC Architecture .Этот микроконтроллер имеет флэш-память ISP объемом 8 КБ, EEPROM 512 ГБ, 512-байтовую SRAM, 6 линий ввода-вывода общего назначения, 32 рабочих регистра общего назначения, один 8-битный таймер / счетчик с режимами сравнения, один 8-битный высокоскоростной таймер / счетчик, USI, внутренние и внешние прерывания, 4-канальный 10-битный аналого-цифровой преобразователь, программируемый сторожевой таймер с внутренним генератором, три программно выбираемых режима энергосбережения и debugWIRE для отладки на кристалле. ATtiny85 Распиновка приведена ниже:
Большинство контактов ввода / вывода микросхемы выполняют несколько функций. Описание контактов ATtiny85 для каждого контакта приведено в таблице ниже:
Контактный № | Имя контакта | Контакт Описание |
1 | PB5 (PCINT5 / ADC0 / dW) | PCINT5 : Прерывание смены контакта 0, Источник5 СБРОС : Пин сброса ADC0: Входной канал ADC 0 dW: отладка WIRE I / O |
2 | PB3 (PCINT3 / XTAL1 / CLKI / ADC3) | PCINT3: Прерывание смены контакта 0, Источник3 XTAL1: Вывод 1 кварцевого генератора CLKI: Вход внешнего тактового сигнала ADC3: Входной канал 3 АЦП |
3 | PB4 (PCINT4 / XTAL2 / CLKO / OC1B / ADC2) | PCINT4: Прерывание смены контакта 0, источник 4 XTAL2: Вывод 2 кварцевого генератора CLKO: Выход системных часов OC1B: Таймер / счетчик1 Выход сравнения B ADC2: Входной канал 2 АЦП |
4 | GND | Контакт заземления |
5 | PB0 (MOSI / DI / SDA / AIN0 / OC0A / AREF / PCINT0) | MOSI: Вывод основных данных SPI / ввод данных ведомого DI: Ввод данных USI (трехпроводной режим) SDA: Ввод данных USI (двухпроводной режим) AIN0: Аналоговый компаратор, положительный вход OC0A: Таймер / счетчик 0 Выход сравнения A AREF: Внешний аналоговый опорный сигнал PCINT0: Прерывание смены контакта 0, источник 0 |
6 | PB1 (MISO / D0 / AIN1 / OC0B / OC1A / PCINT1) | MISO: Ввод основных данных SPI / Вывод данных ведомого DO: Вывод данных USI (трехпроводной режим) AIN1: Аналоговый компаратор, отрицательный вход OC0B: Таймер / счетчик0 Выход сравнения B OC1A: Таймер / счетчик1 Сравнить Выход A PCINT1: Прерывание смены контакта 0, источник 1 |
7 | PB2 (SCK / USCK / SCL / ADC1 / T0 / INT0 / PCINT2) | SCK: Последовательный тактовый вход USCK: Часы USI (трехпроводной режим) SCL: Часы USI (двухпроводной режим) ADC1: Входной канал 1 АЦП T0: Таймер / счетчик0 Источник тактовой частоты INT0: Вход внешнего прерывания 0 PCINT2: Прерывание смены контакта 0, источник 2 |
8 | VCC | Вывод напряжения питания |
Для программирования ATtiny85 без Arduino нам сначала нужно будет загрузить в него загрузчик с помощью платы Arduino UNO, это однократный процесс, и после того, как это будет сделано, нам больше не понадобится плата UNO.Загрузчик — это специальная программа, которая запускается в микроконтроллере и требует программирования. Один из самых удобных способов загрузить данные вашей программы в микроконтроллер — использовать загрузчик. Загрузчик находится на MCU и выполняет входящие инструкции, а затем записывает новую программную информацию в память микроконтроллера. Перепрограммирование загрузчика на микроконтроллере устраняет необходимость в специальном внешнем оборудовании (платах программатора) для программирования микроконтроллера, и вы сможете программировать его напрямую, используя USB-соединение.Плата Digispark ATtiny85 запускает загрузчик «micronucleus tiny85», изначально написанный Bluebie. Загрузчик — это код, который предварительно запрограммирован в Digispark и позволяет ему действовать как USB-устройство, чтобы его можно было запрограммировать с помощью Arduino IDE. Мы также собираемся прошить тот же загрузчик digispark attiny85 на ATtiny85.
Пошаговое руководство по прошивке загрузчика на ATtiny85 с использованием Arduino Uno и Arduino IDE приведено ниже:
Шаг 1. Настройка Arduino Uno в качестве провайдера:
Поскольку ATtiny85 — это просто микроконтроллер, для его программирования требуется ISP (внутрисистемное программирование).Итак, чтобы запрограммировать ATtiny85, нам нужно сначала настроить Arduino Uno как ISP, чтобы он работал как программист для ATtiny85. Для этого подключите Arduino Uno к ноутбуку и откройте Arduino IDE. После этого перейдите к File> Example> ArduinoISP и загрузите код Arduino ISP.
Шаг 2: Схема для прошивки загрузчика на ATtiny85:
Полная схема прошивки загрузчика на ATtiny85 приведена ниже:
Конденсатор 10 мкФ подключен между выводом Reset и GND Arduino.Полные соединения приведены в таблице ниже:
Контакт ATtiny85 | Вывод Arduino Uno |
Vcc | 5 В |
GND | GND |
Контакт 2 | 13 |
Контакт 1 | 12 |
Контакт 0 | 11 |
Сброс | 10 |
Теперь подключите Arduino Uno к ноутбуку и откройте Arduino IDE.Найдите, к какому COM-порту подключен Uno. В моем случае это COM5.
После этого скачайте файлы загрузчика ATtiny85 по указанной ссылке. Откройте « Burn_AT85_bootloader.bat » и измените номер COM-порта «PCOM5» на любой номер COM-порта, к которому подключен ваш Uno. Перед выходом сохраните изменения.
Теперь переместите отредактированные файлы « Burn_AT85_bootloader.bat » и « ATtiny85.hex » в корневую папку Arduino IDE ( C: \ Program Files (x86) \ Arduino ).
После этого щелкните правой кнопкой мыши « Burn_AT85_bootloader.bat » и выберите «Запуск от имени администратора». Прошивка загрузчика занимает от 5 до 6 секунд. Если все прошло успешно, вы должны получить сообщение «AVRdude done. Спасибо. Нажмите любую клавишу, чтобы продолжить …».
Таким образом, загрузчик успешно установлен на чип ATtiny85. Пришло время подключить USB к ATtiny85, чтобы мы могли программировать его напрямую. Принципиальная схема для программирования ATtiny85 через USB приведена ниже:
Схема для программатора ATtinyСхема взята из схемы платы Digispark ATtiny85, но поскольку мы стремимся создать программатор для ATtiny85, мы подключаем только штекер USB-штекера к ATtiny85.
R3 — это подтягивающий резистор, который подключается между выводами Vcc и PB3 микросхемы IC, в то время как стабилитроны (D1-D2) добавляются для полной защиты интерфейса USB. После пайки всех компонентов на монтажной плате она будет выглядеть примерно так:
Установка драйверов DigisparkЧтобы запрограммировать ATtiny85 с помощью USB, на вашем ноутбуке должны быть установлены драйверы Digispark. Если у вас их нет, вы можете скачать их по ссылке, указанной выше.Затем распакуйте zip-файл и дважды щелкните приложение « DPinst64.exe », чтобы установить драйверы.
После успешной установки драйверов подключите плату ATtiny85 к ноутбуку. Теперь перейдите в диспетчер устройств в Windows, и устройство ATtiny85 будет указано в списке «Устройства libusb-win32» как «Загрузчик Digispark». Если вы не можете найти «устройства libusb-win32» в диспетчере устройств, перейдите в View и нажмите «Показать скрытые устройства».
Настройка Arduino IDE для программирования ATttiny85Чтобы запрограммировать плату ATtiny85 с Arduino IDE, сначала нам нужно добавить поддержку платы Digispark в Arduino IDE.Для этого перейдите в File> Preferences , добавьте ссылку ниже в URL-адреса Additional Boards Manager и нажмите «OK».
http://digistump.com/package_digistump_index.json
После этого перейдите в tools> Board> Board Manager , найдите «Digistump AVR» и установите последнюю версию.
После его установки теперь вы сможете увидеть новую запись в меню Board под названием «Digispark» .
Теперь перейдите в файл > Примеры> Основы и откройте пример Blink.
Измените там номер пина с LED_BUILTIN на 0.
Теперь вернитесь к Tools -> Board и выберите плату « Digispark (по умолчанию — 16 МГц) ». Затем нажмите кнопку загрузки в Arduino IDE.
Примечание: Подключайте плату ATtiny85 к компьютеру только тогда, когда Arduino IDE отображает сообщение «Подключаемое устройство сейчас».
После загрузки кода светодиод, подключенный к ATtiny85, должен начать мигать.
Вот как вы можете собрать свою собственную плату ATtiny85 для программирования Arduino . Рабочее видео этого же дано ниже. Если у вас есть вопросы, оставьте их в комментариях. По любым другим техническим вопросам вы также можете начать обсуждение на нашем форуме.
Как программировать ATTiny85 с Arduino Uno (часть 1) — 42 бота
ОБНОВЛЕНИЕ, ноябрь 2015 г .: статья ниже была написана для версий Arduino IDE до 1.6.4. Если вы в настоящее время используете Arduino IDE 1.6.4 или новее, следуйте инструкциям в блоге.
Это руководство основано на шагах, которые я предпринял, чтобы запрограммировать ATTiny85 с моей Arduino Uno и использовать изящный маленький чип для небольшого робота, следующего за линией. Идея использования ATTiny пришла из журнала MAKE и, в частности, из их видео на YouTube «Как уменьшить ваши проекты Arduino».
Библиотеки ATTiny для Arduino IDE поступают от группы High-Low Tech из MIT Media Lab.На их сайте есть и другие интересные материалы по Arduino.
Шаг 1. Соберите все необходимые аппаратные компоненты
- Arduino Uno (или совместимая плата)
- Микросхема ATTiny85
- Один конденсатор 10 мкФ
- Макетная плата и перемычки
Чтобы протестировать настройку, мы загрузим пример Blink в ATTiny. Для этого необязательного шага вам понадобится светодиод и соответствующий токоограничивающий резистор.
Шаг 2. Настройка Softwate
- Убедитесь, что вы используете последнюю версию Arduino IDE (1.0.5, когда это было написано). Шаги должны работать для 1.0 и выше, но некоторые меню могут немного отличаться.
- Загрузите библиотеку ATTiny из высокотехнологичной группы MIT:
https://github.com/damellis/attiny/archive/master.zip - Распакуйте файл attiny master.zip. Он должен содержать папку «attiny-master», которая содержит папку «attiny».
- Найдите папку с альбомом Arduino (вы можете найти ее в диалоговом окне настроек в разделе «Файл» -> «Настройки»).
- Создайте новую подпапку под названием «Оборудование» в папке альбома для рисования, если она еще не существует.
- Скопируйте папку «attiny» (не папку attiny-master) из распакованного файла ATtiny master.zip в папку «hardware».
- У вас должна получиться такая структура папок: «Arduino»> «hardware»> «attiny». Папка «attiny» должна содержать файл «boards.txt »и еще одну папку с именем« варианты » .
- Перезапустите среду разработки Arduino.
- Вы должны увидеть несколько записей ATtiny в меню «Инструменты»> «Доска».
Шаг 3. Настройте Arduino Uno как программатор ATTiny
- Откройте скетч ArduinoISP из примеров («Файл» -> «Примеры» -> «Arduino ISP»).
- Выберите плату и последовательный порт, которые соответствуют вашей плате Arduino (например, Arduino Uno).
- Загрузите скетч в Arduino Uno
Шаг 4. Подключение ATTiny85 к Arduino
Если вы еще не ознакомились с таблицей данных ATTiny85, сейчас самое подходящее время для этого. ATtiny85 имеет 8 контактов, как показано на схеме ниже. Вывод 1 на ATiny отмечен на микросхеме маленькой точкой.
Подключите ATTiny и Arduino Uno согласно схемам ниже (источники High-Low Tech group и MAKE).
- Подключите конденсатор 10 мкФ между контактами «Reset» и «Земля» на плате Arduino Uno, как показано на схеме. Полоса конденсатора со знаком минус («-») идет к контакту «Земля» Arduino. Это предотвращает сброс Arduino Uno и гарантирует, что IDE Arduino взаимодействует с ArduinoISP (а не с загрузчиком) во время загрузки эскизов в ATTiny.
- Подключите контакт 1 ATtiny (с маленькой точкой) к контакту 10 Arduino.
- Подключите контакт 5 ATtiny к контакту 11 Arduino.
- Подключите контакт 6 ATtiny к контакту 12 Arduino.
- Подключите контакт 7 ATtiny к контакту 13 Arduino.
- Подключите землю и 5 В от Arduino к макетной плате.
- Подключите контакт 4 ATtiny к земле.
- Подключите контакт 8 ATtiny к 5 вольт.
Теперь пора протестировать настройку, загрузив пример Blink на ATTiny85.
- Откройте пример скетча Blink (File -> Eamples -> 01.Basic -> Blink)
- Поскольку у ATTiny нет вывода 13, вам необходимо заменить вывод светодиода в эскизе на один из свободных выводов на ATTiny (например, вывод 3).Обратите внимание, что распиновка ATTiny85 в среде Arduino IDE отличается от таковой в таблице данных. См. Схему ниже:
- Перейдите в Инструменты -> Плата и выберите «ATTiny85 (внутренние часы 1 МГц)». Для ATTiny85 будет несколько записей, поэтому убедитесь, что вы выбрали ту, которая имеет тактовую частоту 1 МГц.
- Перейдите в Файл -> Загрузить с помощью программатора
- Вы можете получить такую ошибку: «avrdude: определите сигналы PAGEL и BS2 в файле конфигурации для части ATtiny85».Вы можете пока игнорировать это.
- Подключите светодиод и резистор между контактом 3 микросхемы ATTiny85 и землей и включите ATTiny85.
Если вы видите, что светодиод мигает, значит, вы правильно настроили!
Во второй части руководства «Как программировать ATTiny85 с Arduino Uno» я расскажу, как заставить ATTiny85 работать на частоте 8 МГц и подготовить его к более интересным проектам, таким как, например, маленький робот, следующий за линией.
Создание программатора ATtiny44 / 24/84 с использованием Arduino Nano
В этом руководстве будет показано, как создать программатор, который может напрямую прошивать микроконтроллеры ATtiny
от Atmel, используя только Arduino Nano и несколько дополнительных деталей.Программатор будет без модификаций работать с ATtiny44, ATtiny24 и ATtiny84, и его легко адаптировать к ATTiny25 / 45/85, перенастроив проводку макета.
Зачем мне использовать Raw AVR Micro?
Это руководство появилось из-за того, что я создавал декодер матричной клавиатуры для системы безопасности
. Я создал его прототип с помощью Arduino Nano (мой любимый Arduino), но поскольку декодер клавиатуры
должен был быть просто периферийным устройством, подключенным через I2C к остальной части системы
, использование полностью Arduino в финальной версии казалось расточительным. строить.Я хотел, чтобы вся электроника
аккуратно умещалась за клавиатурой, а Arduino добавила бы корпусу слишком большой глубины
.
Кроме того, прошло много лет с тех пор, как я в последний раз программировал необработанный микроконтроллер, и я почувствовал, что
— это вызов. И быстрый гугл обнаружил много противоречивой информации. Многие из
человек установили множество микросхем AVR с помощью Arduino, но я не смог найти многих, использующих
Nano, а из тех, кто это сделал, ни один не был нацелен на 14-контактные устройства, такие как ATtiny44.
Что вы уже должны знать
Прежде чем мы начнем, необходимо выполнить несколько предварительных условий.
В этом руководстве я предполагаю, что вы уже знакомы с Arduino IDE и оборудованием. Поскольку
— это аппаратный проект, я также предполагаю, что вы разбираетесь в основах электроники, макетирования и пайки
. Больше я не буду предполагать.
Купить подлинную Arduino Nano на Amazon
Предпосылки программирования устройств AVR
Программирующие микроконтроллеры: плохие старые времена…
Не так давно программировать прошивки на микроконтроллеры было несколько сложнее.
Собственные инструменты, специализированные (и дорогие) программисты и устаревшие физические интерфейсы
были нормой. Программисты и SDK обычно стоят тысячи, так как они были нацелены на профессионалов встраиваемых систем. Любитель даже не заглянул.
В 1990-х, будучи молодым дипломированным инженером, я писал код для своих хобби-проектов
по вечерам, часто с «освобожденной» копией компилятора. Затем на работе, в обеденный перерыв
или допоздна я бы воспользовался возможностью использовать программаторы EPROM
и УФ-стиратели компании, чтобы на самом деле перенести код на чип.Конечно, я не узнаю, сработает ли
, пока я не вернусь домой, а потом мне придется ждать следующего дня, чтобы исправить
любые ошибки!
К середине 1990-х казалось, что работа с микропроцессорами умирает. Чипы
становились все мощнее, но физически меньше. Казалось, что незадолго до
каждое устройство окажется в полностью недоступном BGA-корпусе. Интернет был в зачаточном состоянии
, поэтому практически не было ресурсов для обмена проектами и библиотеками, поэтому все
работали изолированно.
Но в конце 90-х все начало меняться. Microchip Inc. представила свой обширный ассортимент дешевых микроконтроллеров
, сделала их широко доступными в пакете DIP, и даже
выпустила среду IDE, которая упростила их программирование и отладку.
К началу 2000-х я был удивлен, что смог купить программатор для PIC, который стоил
«всего» за пару сотен фунтов.
Почему Arduino отличается
Я рассказываю об этом только для того, чтобы проиллюстрировать, как далеко все зашло и насколько удачливые производители и
любителей получить доступ к системе Arduino.По большей части у вас нет
, чтобы заниматься программистами устройств, настройками предохранителей и т. Д.
Каждый раз, когда вы нажимаете «Загрузить» в Arduino IDE, ваш код собирается и волшебным образом отправляется
в Arduino через USB. На самом деле здесь много всего происходит под капотом, о чем вы,
, блаженно не подозреваете. Одним из факторов, которые так долго делали Arduino столь привлекательным для
любителей, является легкость, с которой вы можете развертывать код на оборудовании.
Загрузчик Arduino
Есть несколько вещей, которые делают Arduino Arduino, не в последнюю очередь это загрузчик
.Это загрузчик, который позволяет программировать микроконтроллер
без специального программиста.
Загрузчик — это небольшая (примерно 500 байт) программа, которая находится во флэш-памяти Arduino
, и каждый раз, когда чип перезагружается (через сигнал DTR от USB / последовательного порта),
ищет определенную подпись байтов на UART, и, если они видны, эмулирует
аппаратного программатора и записывает образ программы, полученный через UART, во флэш-память, при этом
, очевидно, избегает перезаписи.
Chicken & Egg: Итак, как добраться до загрузчика?
Итак, вы, вероятно, задаетесь вопросом, как код загрузчика вообще попадает в AVR.
Очевидно, загрузчик не может загрузиться сам. Это похоже на парадокс.
Ответ прост: он программируется с помощью интерфейса внутрисистемного программирования.
Это специальный интерфейс, который Atmel встроил во все микросхемы AVR, чтобы можно было программировать устройство
«в полевых условиях», или, другими словами, когда оно устанавливается в его последнюю систему
, а не заранее.
Похоже, у нас есть два варианта программирования необработанного микроконтроллера AVR: мы можем использовать загрузчик
и последовательный (или USB) порт, или мы можем использовать ISP. Но поскольку сам загрузчик
должен быть установлен через ISP, оказывается, у нас есть только один выбор: для того, чтобы что-то сделать
, мы должны реализовать ISP. И как только мы сможем это сделать, у
будет небольшое преимущество в том, чтобы вообще возиться с загрузчиком.
Обзор внутрисистемного программирования (ISP)
Внутрисистемное программирование, или ISP, — это общий термин для встроенных систем, который означает
перепрограммировать устройство без удаления его из целевой системы.Когда на рынке впервые появились устройства с поддержкой ISP
, это было похоже на чудо. Раньше для каждого крошечного изменения кода
нужно было открывать целевую систему, вынимать устройство из гнезда и вставлять
в программатор, подключенный к системе разработки.
На это было несколько причин. Один из них заключался в том, что для программирования требовалось «опасное» высокое напряжение
12 В для подачи на микросхему, что, как правило, поджаривало бы остальную часть
цифровых частей 5 В хост-системы, поэтому удаление было предпочтительным вариантом.Но этот
можно было преодолеть, и настоящая проблема заключалась в том, что традиционные программисты использовали
для передачи данных в микросхему, используя проприетарные системы, часто с параллельной шиной.
С ISP разработчик теперь мог оставить чип на месте и с радостью повторно прошивать код как
так часто, как ему или ей хотелось. Казалось, что цепи были сброшены!
ISP против ICSP
Реализация ISP компании Atmel известна как ICSP, или внутрисхемное последовательное программирование. Люди
используют термины ISP и ICSP как синонимы: означают одно и то же .
На микросхемах AVR Atmel программные данные передаются с использованием очень быстрого и легкого 3-проводного синхронного последовательного интерфейса (SPI)
с использованием специального протокола ICSP. Блоки данных
передаются в целевое устройство и записываются во флэш-память программ при нормальном рабочем напряжении
. Если требуется более высокое напряжение программирования, оно безопасно генерируется внутри
.
Начало работы: создание программатора ATtiny44 / 24
Обзор проекта
Вот шаги, которые необходимо предпринять для создания работающего программатора ATtiny с использованием Arduino
Nano: —
- Настройте Nano как программист ISP с помощью ArduinoISP
- Создайте схему для подключения Nano к ATtiny44 или аналогичному устройству
- Загрузите конфигурацию платы ATtiny24 / 44/84 в Arduino IDE
- Протестируйте интернет-провайдера, прошив какой-нибудь код
Я подробно расскажу о каждом шаге ниже.Если вы уверены, что знаете достаточно о конкретном шаге
, можете пропустить его.
Шаг 1. Настройте Nano в качестве программиста ISP с помощью ArduinoISP
. Итак, каков самый быстрый способ создать ISP для наших микросхем AVR? Было бы действительно здорово, если бы
мы могли найти готовое устройство с интерфейсом SPI и загрузчиком, чтобы мы могли
избежать сценария курицы и яйца и загрузить код в программатор с порта USB, а затем
использовать интерфейс SPI для передачи данных программы на целевое устройство.
Конечно, такое устройство уже существует: оно называется Arduino. Более того, нам не нужно писать специализированный код для
: добрые ребята из сообщества Arduino уже сделали это за нас!
Чтобы настроить Arduino Nano в качестве провайдера, просто откройте Arduino IDE, подключите Nano
с помощью USB-кабеля и в меню Tools | Board Type выберите Arduino Nano. Затем перейдите
в Файл | Загрузить эскиз и выберите эскиз ArduinoISP. Загрузите на доску и вуаля!
Теперь ваш Nano является интернет-провайдером.
Вы не сможете много сделать с ним, пока не создадите какое-нибудь оборудование для подключения его
к микросхеме ATtiny. Вот что нам нужно делать дальше.
Шаг 2: Создайте схему для подключения Nano к устройству ATtiny
Большинство проектов ArduinoISP, разбросанных по сети, имеют Arduino Uno
, подключенную к целевому AVR с помощью макета. Наличие целевого устройства в макете — это
отличный вариант, потому что он позволяет нам программировать любое устройство, если мы можем выяснить проводку.
Однако мне нужен был постоянный программист, и поэтому я не хотел, чтобы вся схема была на макетной плате
, а были только те части, которые необходимо настраивать: а именно, сигналы ISP и шины питания
, идущие к целевому устройству. Они, скорее всего, изменятся при программировании
другого устройства.
Стоит отметить, что я мог бы использовать сокет ZIF (нулевое усилие вставки) для целевой микросхемы
, но давайте на мгновение рассмотрим плюсы и минусы.
Поскольку все микросхемы AVR имеют разные распиновки (не говоря уже об устройствах сторонних производителей, таких как
ESP8266), мне пришлось бы придумать схему для настройки программатора для маршрутизации сигналов питания и SPI
на правильные выводы целевого устройства. .Целый набор микросхем линейных драйверов
или, что более вероятно, FPGA был бы здесь «правильным» выбором, который сделал бы
этот проект во много раз более сложным. Намного более простая схема конфигурации с использованием перемычек
была бы проще, но это все еще значительно увеличивает сложность, оставляет много места для ошибок подключения для
и вряд ли полностью охватит все возможные (включая
будущие) целевые устройства.
Итак, компромисс, который я выбрал, заключался в том, чтобы иметь «материнскую плату», которая содержит разъем для модуля
Nano, все светодиоды состояния программатора, 6-контактный ленточный кабель IDC для подключения к заголовку
ICSP на Nano, различные компоненты и макет для целевой микросхемы.
Купить мини-модульный макет без пайки DEYUE на Amazon
Рассмотрим детали схемы материнской платы.
Разъем Arduino Nano
Nano устанавливается в разъем на материнской плате. Это позволяет удалить его при необходимости для
другого проекта или заменить в случае повреждения. Это также предотвращает возможное повреждение нагревом
во время пайки (хотя, по моему опыту, такие опасения, как правило, преувеличены).
Очень мало сигналов передается от Nano через главный разъем на материнскую плату
.Они описаны ниже: —
+ -------- + ----------------- + -------------------- --------------------------------- +
| Сигнал | Цель | Примечания |
+ -------- + ----------------- + ---------------------- ------------------------------- +
| GND | Наземный рельс | Общие основания |
| / СБРОС | Сброс Arduino | Связан с GND через конденсатор для предотвращения нежелательных сбросов |
| D10 | Сброс цели | Подключен к выводу target / RESET для сброса целевой микросхемы |
| D7 | Светодиод программирования | Указывает на то, что цель программируется |
| D8 | Светодиод ошибки | Указывает, что интернет-провайдер обнаружил ошибку |
| D9 | Светодиод сердцебиения | Указывает, что интернет-провайдер работает нормально |
+ -------- + ----------------- + ---------------------- ------------------------------- +
Подключение светодиодов состояния ArduinoISP
Обратите внимание, что светодиоды состояния не являются обязательными и часто не используются в учебных пособиях, чтобы упростить макетирование
; однако они чрезвычайно полезны, когда вы сталкиваетесь с проблемами
программирования целевого устройства.
Я использовал зеленый и красный светодиоды (на самом деле трехцветный зеленый / красный) для светодиодов пульса (D9) и ошибки
(D8), соответственно, и синий светодиод для светодиода программирования (D7).
Сигналы ICSP и SPI
Во многих старых руководствах вам предлагается использовать выводы 11, 12 и 13 Arduino в качестве сигналов SPI для программирования цели
. Это связано с тем, что сигналы SPI доступны на этих контактах на некоторых моделях Arduino
, таких как Uno, Duemilanove и т. Д., Включая Nano, но , а не на многих других
, включая Megas, Leonardo, Due и Zero.
Отображение выглядит следующим образом: —
+ --------------- + ------------ +
| Штырь Arduino | Сигнал SPI |
+ --------------- + ------------ +
| 11 | MOSI |
| 12 | MISO |
| 13 | SCK |
+ --------------- + ------------ +
Код, который определяет это в скетче ArduinoISP: —
#ifdef USE_OLD_STYLE_WIRING
#define PIN_MOSI 11
#define PIN_MISO 12
#define PIN_SCK 13
#endif
Одна из особенностей кода ArduinoISP заключается в том, что вы можете назначить эти макросы PIN_xxx
любому цифровому выходу, и код будет имитировать аппаратное обеспечение SPI путем «побитового преобразования»
выхода.Здесь есть некоторые ограничения на тактовую частоту — очевидно, если ваш Arduino
работает слишком медленно, то эмулируемая скорость SCK выйдет за пределы спецификации протокола ISP
и не будет работать.
Хотя это, несомненно, очень полезно в определенных обстоятельствах, в подавляющем большинстве случаев
нет веских причин для использования этих или любых других цифровых выходных контактов, когда
практически все Arduinos имеют совершенно хороший заголовок ICSP, который уже нарушает Сигналы SPI
в согласованной распиновке.
Обратите внимание, что здесь есть некоторая вероятность путаницы — это определенно сбило меня с толку из-за
. Заголовок ICSP на самом деле предназначен для программирования Arduino от другого провайдера.
Это имеет смысл, если задуматься — большинство людей не используют Arduino в качестве интернет-провайдера, поэтому
зачем ему для этой цели встроенный заголовок ICSP? Однако, поскольку все сигналы
, которые нам нужны для программирования через ISP, также используются для программирования через ISP,
только логично их использовать.
Документация ArduinoISP говорит нам использовать заголовок ICSP, и именно этим я буду заниматься в
этом проекте. Сигналы заголовка ICSP описаны ниже: —
+ ------ + -------- + ------------------------------- - + ---------------------------------- +
| ICSP | Сигнал | Цель | Примечания |
| Булавка | | | |
+ ------ + -------- + -------------------------------- + ---------------------------------- +
| 1 | MISO | Данные восходящего канала с целевого устройства | Сигнал данных SPI |
| 2 | SCK | Последовательные часы | Тактовый сигнал SPI |
| 3 | / СБРОС | Сбросьте Arduino | _Не используется, когда интернет-провайдером является Arduino_ |
| 4 | Vcc | Шина питания 5 В | Мощность целевого устройства |
| 5 | MOSI | Данные нисходящего канала на целевое устройство | Сигнал данных SPI |
| 6 | GND | Наземный рельс | Целевой рельс заземления |
+ ------ + -------- + -------------------------------- + ---------------------------------- +
Мы подключаемся к заголовку ICSP с помощью 6-жильного ленточного кабеля с разъемом IDC 2×3 на каждом конце
.Один конец подключается к заголовку ICSP Arduino, а другой — к «материнской плате»
рядом с макетной платой. Здесь сигналы разбиты на заголовки IDC, поэтому их
можно подключить к макетной плате с помощью перемычек.
Единственный сигнал ICSP, который мы не будем использовать, — это сигнал / RESET, который привязан к выводу / RESET
Arduino, поэтому его можно сбросить с внешнего провайдера. Конечно, это не то, что нам нужен
, и вместо этого нам нужен Arduino для сброса целевого устройства, поэтому мы используем выход
, подключенный к выводу цели / RESET, чтобы начать программирование.Для этого мы используем D10 как
, определенный в коде ArduinoISP: —
#define RESET 10 // Используйте контакт 10 для сброса цели, а не SS
Этот сигнал передается через разъем Nano, как описано выше, а также выводится из строя
и вывод IDC рядом с макетной платой.
Индикатор ориентации кабеля ICSP
Для кабеля ICSP следует использовать вилки и розетки с ключом, чтобы обеспечить правильную ориентацию, а для кабеля
— предотвратить повреждение целевого устройства.Кроме того, я установил зеленый светодиод с резистором
на 330 Ом на материнской плате между контактами 4 и 6 ICSP (Vcc и GND), чтобы визуально отобразить
, что кабель ориентирован правильно. Если светодиод не горит, когда
Arduino подключен к USB-порту, это означает, что кабель ICSP подключен неправильно.
Схема
Схема ISP на базе Arduino Nano показана ниже.
Готовая схема
На рисунке 2 показана готовая схема.Соединений очень мало, поэтому он был построен с использованием стрипборда (или «Veroboard», если вам столько же лет, сколько и мне) для материнской платы.
Микро-мишень размещена на крошечной дешевой макетной плате [ссылка].
Шаг 3. Загрузите конфигурацию платы ATtiny в Arduino IDE
Arduino IDE поставляется с предварительно загруженным всем необходимым для программирования всех плат Arduino
, но вы можете не знать, что она может делать гораздо больше. Разработчики Arduino
упростили задание нового оборудования, и если кто-то написал соответствующие файлы конфигурации
, вы можете загрузить их и написать код в стиле Arduino для этой платформы.
Для некоторых очень разных платформ (таких как ESP8266) это требует довольно много работы,
, но для микросхем AVR это в основном вопрос отображения контактов ввода / вывода в схему нумерации Arduino
. Вооружившись таблицей данных Atmel (и умением ее читать) и проявив терпение
, сделать это самому не составит труда. Однако в этом нет необходимости, поскольку
это уже было сделано.
Ссылка на библиотеки ATtiny: https://raw.githubusercontent.com/damellis/ATtiny/ide-1.6.x -boards-manager / package_damellis_ATtiny_index.json
Вам нужно сообщить об этом IDE Arduino, поэтому перейдите к Arduino | Настройки ,
выберите вкладку Settings и вставьте ссылку в поле Additional Boards Manager URLs
. (Подсказка: если вы щелкните маленький значок справа от поля, вы можете добавить несколько URL-адресов
в разные строки. В противном случае их нужно разделить запятыми в текстовом поле
, что может стать неуправляемо длинным.)
Когда вы закончите, конфигурация платы должна быть установлена, поэтому выберите Tools |
Доски | Boards Manager… , чтобы открыть диалоговое окно Boards Manager. Если вы введете «ATtiny»
в поле поиска, вы должны увидеть элемент под названием «ATtiny by David A. Mellis».
Нажмите на этот элемент, и вы увидите кнопку Установить . После установки
должен выглядеть так: —
Теперь вы нажимаете OK / Закройте и вернитесь к Tools | Доска | Boards Manager меню
, и вы сможете выбрать 14-контактные устройства ATtiny24 / 44/84: —
Выберите ATtiny24 / 44/84 и готово!
Шаг 4. Протестируйте интернет-провайдера, прошив код
Первоначальные проверки
Перед тестированием убедитесь, что к макетной плате ничего не подключено, особенно микроконтроллеры
или любые другие полупроводники, которые потенциально могут быть повреждены из-за ошибки подключения
.
Если вы подключите нового поставщика услуг Интернета к компьютеру с помощью кабеля USB, вы должны увидеть, как зеленый индикатор пульса
медленно мигает (он плавно гаснет). Кроме того, если вы правильно подключили ленточный кабель ICSP
между Nano и материнской платой, вы должны увидеть, что
загорится зеленый светодиодный индикатор питания. Если этого не происходит, значит на плате есть ошибка, из-за которой
может уничтожить любой чип, который вы хотите запрограммировать, поэтому идите и дважды проверьте все свои соединения!
Если индикаторы питания и сердцебиения загорятся должным образом, все в порядке.Следующий этап
— попытаться что-то запрограммировать.
Подключение ATtiny для внутрисистемного программирования
Как отмечалось ранее, многие микросхемы AVR имеют разные распиновки, поэтому приведенные ниже инструкции по подключению
— это для ATtiny24, ATtiny44 и ATtiny84 только — если вы программируете другую модель AVR,
, пожалуйста, обратитесь к таблице данных, чтобы найти Vcc, Контакты GND, / RESET, MISO, MOSI и SCK.
Полная распиновка ATtiny24 / 44/84 из таблицы данных показана ниже: —
Отсюда мы видим важные выводы для программирования: —
+ - \ / - +
Vcc 1 | | 14 ЗЕМЛЯ
2 | | 13
3 | | 12
/ СБРОС 4 | | 11
5 | | 10
6 | | 9 SCK
MOSI 7 | | 8 MISO
+ ---- +
Итак, исходя из этого, мы можем определить соединения платы ISP с ATtiny на макетной плате
: —
+ ------ + -------- + ------------------------------- - + -------- + -------- +
| ICSP | Сигнал | Цель | ATtiny | ATtiny |
| Булавка | | | Сигнал | Булавка |
+ ------ + -------- + -------------------------------- + -------- + -------- +
| 1 | MISO | Данные восходящего канала с целевого устройства | MISO | 8 |
| 2 | SCK | Последовательные часы | SCK | 9 |
| 3 | / СБРОС | Сбросьте Arduino | --- | - |
| 4 | Vcc | Шина питания 5 В | Vcc | 1 |
| 5 | MOSI | Данные нисходящего канала на целевое устройство | MOSI | 7 |
| 6 | GND | Наземный рельс | GND | 14 |
+ ------ + -------- + -------------------------------- + -------- + -------- +
| - | D10 | Сбросьте ATtiny | / СБРОС | 4 |
+ ------ + -------- + -------------------------------- + -------- + -------- +
Обратите внимание на нижний ряд: в дополнение к сигналам ICSP нам также необходимо использовать сигнал D10 Arduino
Nano для сброса микросхемы ATtiny.
Отсоедините USB-кабель, чтобы выключить ISP, вставьте ATtiny в макетную плату и
подключите эти сигналы с помощью перемычек. Повторно подключите USB-кабель и дважды проверьте, горят ли зеленые светодиоды питания и пульса
. Если это не так, немедленно отсоедините кабель USB
и дважды проверьте наличие короткого замыкания или других ошибок проводки.
Запуск примера мигания на ATtiny
Как только все будет хорошо, в Arduino IDE загрузите пример «Blink».
не будет компилироваться, потому что он пытается использовать вывод 13 для светодиода, а на ATtiny нет вывода 13.
Добавьте следующую строку в начало файла: —
#define LED_BUILTIN (PB0)
Это указывает компилятору использовать PB0 (вывод 2 на ATtiny44) для мигания светодиода.
На макетной плате подключите светодиод с последовательным резистором 330 Ом (или приблизительно) от контакта 2
(PB0) к GND, убедившись, что анод светодиода подключен к контакту 2.
Убедитесь, что для платы установлено значение «ATtiny 24/44/84» в меню «Инструменты», выберите последовательный порт
и нажмите «Загрузить».Индикаторы ISP должны мигать, и, надеюсь, вы не получите сообщение об ошибке. После
нескольких секунд микросхема ATtiny должна перезагрузиться и запустить Blink-код, а светодиодный индикатор должен мигать!
Вот и все, ребята!
Уф… мы сделали это. Теперь у вас все готово для написания кода Arduino для ATtiny, а это означает, что
вы можете вкладывать интеллект в еще более мелкие вещи. Некоторые из этих микросхем, такие как 8-контактные варианты
, настолько малы, что могут заменить таймер 555 с бесконечно большей функциональностью и нулевыми пассивными компонентами
(за исключением, возможно, развязывающего конденсатора 100 нФ).
Я хотел бы услышать ваши отзывы! Пожалуйста, оставляйте комментарии ниже или присоединяйтесь к списку рассылки, чтобы
получать новые статьи, как только они будут опубликованы.
Загрузка вашего ATtiny85
ATtiny85 — один из самых маленьких микроконтроллеров на рынке AVR, что делает его отличным выбором для портативных проектов с небольшими размерами и низким энергопотреблением. Но внедрение вашего кода в чип может оказаться непростой задачей. Когда вы начнете использовать ATtiny85, у вас не будет преимуществ платы для разработки: вы будете работать с простым автономным чипом.
К счастью, мы здесь, чтобы помочь вам начать работу. В этой статье мы рассмотрим этот микроконтроллер. Мы рассмотрим его функции и особенности и проведем вас через процесс записи его загрузчика, чтобы вы могли его запрограммировать.
Что такое загрузчик?
Один из наиболее удобных способов загрузить данные вашей программы в микроконтроллер ATtiny — использовать специальную программу, которая называется загрузчиком . Эта программа находится на MCU и прослушивает входящие инструкции, а затем записывает новую программную информацию в память MCU.
Это устраняет необходимость в специальном внешнем оборудовании, но у него есть несколько недостатков: загрузчик будет занимать небольшую часть дискового пространства MCU и вносить небольшую задержку в процесс запуска, когда программа запускается и ищет новые инструкции.
Загрузчики делают жизнь удобной на этапе прототипирования любого проекта, а также удобны для продуктов, микропрограммное обеспечение которых необходимо обновлять с течением времени. С помощью загрузчика вы сможете загрузить код из Arduino IDE на ATtiny85 через USB-соединение.Это означает, что вам не нужно удалять MCU из вашей схемы между циклами программирования.
Теоретически запись загрузчика — это то, что вам нужно сделать только один раз. Вы можете использовать его снова и снова по мере совершенствования своей программы. С учетом сказанного, ATtiny не имеет защищенной области хранения для загрузчика, а это означает, что существует небольшая опасность перезаписать это пространство по ошибке. Это можно решить, просто перезагрузив загрузчик.
Как записать загрузчик на ATtiny85
Мы можем загрузить загрузчик, используя Arduino в качестве ISP или внутрисистемного программиста.Это позволяет загружать новые программы в ATtiny, не удаляя чип из схемы, в которой он используется.
По умолчанию в Arduino IDE отсутствует возможность загрузки напрямую в ATtiny. Это можно легко исправить с помощью «менеджера дополнительных досок» программы, который можно найти, перейдя по следующему адресу: Файл> Настройки
В нижней части окна настроек есть место для ввода URL-адресов дополнительного менеджера досок. Перед тем, как нажать «ОК», введите следующее:
https: // raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
Это добавит поддержку ATtiny85, любезно предоставленную Дэвидом Меллисом, одним из соучредителей Arduino.
Вам нужно будет выбрать и установить пакет из Boards Manager, прежде чем чип станет видимым в списке «плат».
Использование Arduino в качестве ISP
После того, как мы установили программное обеспечение, нам нужно подключить Arduino к макетной плате, к которой подключен ATtiny.Технически это означает соединение двух устройств вместе, чтобы любые инструкции, передаваемые на ATmega328 Arduino, также отправлялись на ваш ATtiny85.
Наряду с землей и напряжением, это означает соединение контактов следующим образом:
Вам также потребуется установить небольшой конденсатор (10 мкФ) между контактами сброса и заземления. Это предотвратит непреднамеренную перезагрузку устройства во время загрузки.
В меню «Инструменты» необходимо выбрать процессор и внутреннюю тактовую частоту 8 МГц.Затем убедитесь, что выбран «Arduino as ISP». Затем вы можете начать загружать некоторые программы, но они будут на частоте 1 МГц, а не 8. Чтобы работать на более высокой скорости, вам нужно будет записать новый загрузчик. Сделайте это, выбрав «Записать загрузчик» в нижней части меню «Инструменты».
Если у вас есть внешний кристалл, вы можете заставить ATtiny85 работать еще быстрее на частоте 16 МГц — однако пока мы рекомендуем придерживаться более низких скоростей. После того, как вы все настроили и запустили, можно начинать добавлять дополнительные компоненты.
Использование программатора AVR
Если вы предпочитаете не использовать Arduino в качестве ISP, вы можете вместо этого использовать специальный программатор AVR. Эти устройства бывают разных форм — самая простая из них — это USB-накопитель со слотом для вашего 8-контактного блока IC. Такая конструкция устраняет необходимость в сложной проводке или пайке — отличный тому пример — Tiny AVR Programmer от SparkFun. Он имеет восемь выходов, совместимых с макетной платой, которые подключаются непосредственно к контактам микроконтроллера. Это также позволяет использовать программатор с более крупными микроконтроллерами, прикрепленными к макетной плате.
Использование специального программатора AVR требует, чтобы вы отследили и установили соответствующие драйверы и выбрали ATtiny85 из списка плат. Убедитесь, что вы не выбрали вариант, для которого требуются внешние часы, если они не подключены к вам; это может сделать ваш MCU неработоспособным. Выберите «USBtinyISP» в меню «Инструменты»> «Программист» и подключите микроконтроллер к плате, и вы готовы начать загрузку образца кода.
Загрузка образца кода
Как мы увидим, не каждый проект Arduino будет без проблем работать на ATtiny85.Чтобы убедиться, что все работает правильно, мы начнем с чего-то простого: проекта «Blink», который вы можете найти в меню примеров Arduino IDE. Вам нужно будет подключить светодиод вместе с соответствующим резистором к выводу «0» ATtiny. Вам также потребуется изменить номер пина в проекте с 13 на 0.
Если все подключено правильно, светодиодный индикатор должен мигать с интервалом в одну секунду. Если он мигает быстрее или медленнее, скорее всего, тактовая частота установлена неправильно.Если он вообще не мигает, проверьте проводку.
После того, как программа мигания заработала, вы можете переходить к другим программам, как вы это делали, когда впервые запустили свою Arduino. Однако эта версия схемы более обтекаемая и элегантная. Если вы включите аккумулятор, вам не нужно будет использовать Arduino в качестве источника питания — и вы можете отсоединить его до тех пор, пока вам не понадобится загрузить данные программы в ATtiny.
Возможности ATtiny85
Запись загрузчика может показаться трудоемкой.Итак, давайте взглянем на некоторые ключевые особенности ATtiny85, которые делают его полезным.
Цена
Arduino стоит более 20 долларов, а ATtiny85 — менее доллара. Даже если вы сравните его с более многофункциональными автономными микроконтроллерами, такими как ATmega328.
Размер
Поставляется всего с восемью контактами, он примерно такой же маленький, как DIP-корпус, что делает его идеальным решением для небольших и простых приложений, таких как дистанционное управление.
Энергопотребление
ATtiny85 не потребляет много энергии и может работать от батарей во много раз дольше, чем более требовательные к сокам контроллеры.
- В активном режиме с низким энергопотреблением он обеспечивает работу 1 МГц, 1,8 В при 300 мкА.
- В спящем режиме с пониженным энергопотреблением ему потребуется всего 100 нА (наноампер).
Для проектов, где важна эффективность, это разумный выбор. Вы можете взглянуть на нашу публикацию о блоках питания для получения дополнительной информации.
Напряжение
ATtiny принимает любое напряжение от 1,8 до 5,5 В и соответственно регулирует свои логические уровни.
Это позволяет легко работать от целого ряда различных источников питания, от батарейки типа «таблетка» до USB, и все это без помощи отдельного регулятора.
Ограничения ATtiny85
Когда вы загружаете код на ATtiny85, вы обнаружите, что почти все команды, к которым вы привыкли на Arduino UNO на базе ATmega, будут работать нормально. Однако есть несколько исключений — учитывая, что ATtiny не хватает аппаратных возможностей UART и i2c ATmega, любые проекты, которые включают последовательную передачу и библиотеки Wire, не будут работать должным образом. Более того, любые проекты, которые объединяют множество различных компонентов, будут ограничены меньшим количеством GPIO и памятью ATtiny.
***
Мы рассмотрели, как разместить ваши программы на вашем новом ATtiny85. Если у вас есть доступ к Arduino, то использовать его в качестве интернет-провайдера для загрузки кода в ATtiny удобно — хотя вложение нескольких долларов в специализированного программиста может упростить задачу.
После того, как вы успешно выполнили простые проекты, такие как мигающие светодиоды, работающие на вашем ATtiny, вы можете постепенно переходить к более сложным. Переход от универсального решения, такого как Arduino, к автономному микроконтроллеру — довольно важный шаг, который сделает ваши проекты более компактными, быстрыми и эффективными.
Микроконтроллер Atmel Attiny13a, запрограммированный с использованием Arduino Ide
Я обнаружил, что работать со студией atmel немного сложно. Atmel studio — это тяжелое программное обеспечение, оно занимает слишком много времени на компиляцию, занимает большую часть системной оперативной памяти, библиотеки не очень хорошо объяснены, и, прежде всего, сообщество помощи невелико. Поэтому я решил запрограммировать микроконтроллеры серии atmel attiny с помощью arduino ide. Arduino ide напрямую не поддерживает микроконтроллеры серии atmel attiny. Чтобы создать серию attiny, запрограммированную на arduino ide.Мы должны установить некоторые плагины в системные файлы arduino ide. В этом посте я объясню, как установить плагины серии attiny для arduino ide и какие изменения нам нужно внести в системные файлы arduino, чтобы сделать серию attiny распознаваемой arduino ide. После установки совместимости серии я объясню небольшой проект, который я сделал с использованием микроконтроллера atmel attiny13a. Я запрограммировал микроконтроллер attiny13a с помощью arduino ide с помощью внешнего программатора usbasp. Я также запрограммировал и микроконтроллер attiny13a с автономным Arduino как icsp.
Для установки подключаемого модуля arduino ide для микроконтроллера atmel attiny13a. Загрузите файл, указанный ниже. |
Распакуйте файл .rar. Вы получите папку с именем attiny13. Найдите каталог установки файлов Arduino. Найдите папку «Оборудование» в каталоге установки arduino. Обычно это C: \ Program Files (x86) \ Arduino \ hardware. Поместите папку attiny13 в папку оборудования.Перезапустите arduino ide, и под опцией плат вы найдете опции attiny13a. Attiny13a будет указан с пятью различными конфигурациями часов. Во всех конфигурациях используется небольшой внутренний источник синхронизации. Я проверил все источники часов, и они работают нормально. Но некоторые пользователи в Интернете говорят, что им сложно создавать надлежащие задержки. Я проверил функцию delay () для каждого источника часов, и она у меня сработала правильно.
Выбор микроконтроллера Attiny13a в arduino ide | Общий вывод attiny13a для использования с arduino ide приведен ниже.D0-D5 обозначает цифровые выводы, а A0-A1 обозначает аналоговые выводы. Итак, attiny с arduino ide имеет 5 цифровых контактов и два аналоговых контакта. РаспиновкаAttiny13a для arduino ide |
Светодиод мигания с Atmel Attiny13A, Arduino Ide и Proteaus Simulation
Чтобы доказать, что верхняя конфигурация работает, я сделал простой проект / программу с мигающим светом. Светодиод переключается примерно за полсекунды. Я подключил светодиод к контакту PB4 attiny13a. Я использовал внутренний кристалл 4,8 МГц в качестве источника тактовой частоты.На выводе сброса я подключил кнопку, чтобы снова запустить микроконтроллер. Вся схема питается от элемента CR2032. Cr2032 представляет собой плоскую батарею на 3,3 В. Attiny во время работы потребляет очень мало энергии. Микроконтроллеры Atmel серии attiny считаются мастерами гибернации. Они могут оставаться в спячке годами при очень небольшом количестве электроэнергии. Принципиальная схема проекта представлена ниже.
ПроектПринципиальная схема Attiny13A Пример Blink.
Программирование Attiny13a с помощью программатора UsbAsp
Для загрузки кода в микроконтроллер я использовал внешний программатор Usbasp. Attiny13a можно запрограммировать, используя его интерфейс icsp. Схема подключения аттини к программатору usbasp приведена ниже. Usbasp может программировать при Vcc = 3,3 В и 5 В. Уровень напряжения можно выбрать с помощью перемычки, установленной на программаторе usbasp. Я выбрал 3.3в. Так как я использую аттини с аккумулятором cr2302 с рейтингом 3.3в. Лучше работать на одном уровне напряжения. Но вы также можете запрограммировать его на 5В. | Перед программированием attiny13a убедитесь, что вы выбрали правильный программатор в раскрывающемся меню программатора. ПрограмматорUsbasp используется для программирования микроконтроллера attiny13a с использованием arduino ide |
Usbasp программатор программирование микроконтроллер atmel attiny13a
Программирование attiny13a с использованием Arduino uno как Isp
Attiny13a можно запрограммировать с помощью arduino uno.Код можно загрузить, выполнив следующие простые шаги.- Подключите arduino к ПК.
- Выберите правильный порт и плату Arduino, в нашем случае «Arduino Uno».
- Загрузите на Arduino скетч «ArduinoISP», приведенный в примерах. Дождитесь загрузки скетча. После загрузки переходите к следующему шагу.
- Выберите «Arduino as ISP» в раскрывающемся меню «Программист».
- Выберите правильный порт.
- Выберите «ATtiny13A standalone 4.8Mhz» в раскрывающемся меню Board.
- Откройте скетч, который вы хотите загрузить на attiny13a, и загрузите код, нажав кнопку загрузки.
Attiny13a, запрограммированный на Arduino uno
Загрузите код проекта и моделирование. Моделирование выполнено в протео. Папка с кодом содержит файл кода Arduino и файл .hex, который можно записать на микроконтроллер непосредственно для программы с мигающим светодиодом. Пожалуйста, поделитесь с нами своими отзывами о проекте.
Посмотрите видео о проекте здесь…
Программирование ATtiny с помощью Arduino — ATMega32 AVR
После этого руководства вы сможете программировать A Ttiny85 / 45 с помощью Arduino.Это может показаться сложным, но на самом деле это не так. После некоторых исследований я не смог найти много информации о том, как это можно сделать. Однако я нашел http://www.instructables.com/id/Program-an-ATtiny-with-Arduino/. Эта инструкция — моя интерпретация того, что я узнал от Рэнди.
Arduino
AT tiny 85/45 — можно приобрести у Mouser 556-ATTINY85-20PU. Для получения дополнительной информации о AT tiny ознакомьтесь с техническими данными здесь.
Плата для хлеба (или 8-контактный экран от Instructables)
Перемычки для платы для выпечки
Светодиод-5
Резистор 330 Ом-5
Электролитический конденсатор 1 мкФ 50 В
5 В +
5 В Земля x2
10
11
12
13
Сброс Подключите макетную плату с помощью перемычек следующим образом или см. Рис:
. Примечание: убедитесь, что не в направлении ямочки. ATtiny pin # 1 — arduino pin # 10
ATtiny pin # 4 — arduino , заземление 5 В
ATtiny pin # 5 до arduino pin # 11
ATtiny pin # 6 pin # 12
ATtiny pin # 7 до arduino pin # 13
ATtiny pin # 8 до Arduino 5v + Теперь давайте перейдем к добавлению наших светодиодов.Добавьте светодиоды к макетной плате, как показано на рисунке, учитывая полярность светодиодов .
Добавьте резисторы к положительной стороне (стороне без плоской части) каждого светодиода, чтобы получить резистор. Возьмите несколько перемычек с резисторов и подключите их к следующим контактам ATtiny . ATtiny pin # 5 это будет запрограммировано как pin 0 в скетче
ATtiny pin # 6 это будет запрограммировано как pin 1 в скетче
ATtiny pin # 7 это будет запрограммировано как pin 2 в скетче
ATtiny pin # 2 это будет запрограммировано как pin 3 в скетче
ATtiny pin # 3 это будет запрограммировано как pin 4 в скетче Шаг 3. Настройка Arduino для программирования
Настройка Arduino для программирования не является постоянной задачей.Все, что вам нужно сделать, это загрузить скетч, который позволит вам запрограммировать чип, а затем, когда вы захотите использовать Arduino, вы просто измените скетч.
Сначала вам понадобится программа, загрузите ее, щелкнув attiny45_85.zip, убедитесь, что вы используете версию программы arduino 0022.
Далее:
Установка поддержки ATtiny45 / ATtiny85 в Arduino
Скачать: attiny45_85 .zip
Найдите папку с альбомом Arduino (вы можете найти его в диалоговом окне настроек в программном обеспечении Arduino)
Создайте новую подпапку под названием «hardware» в папке с альбомом.
Скопируйте папку attiny45_85 из attiny45_85.zip в папку оборудования.
Перезапустите среду разработки Arduino.
Далее:
Превращение платы Arduino в программатор
Мы собираемся использовать плату Arduino для программирования ATtiny45 или ATtiny85 . Во-первых, нам нужно превратить плату Arduino в «внутрисистемный программатор» (ISP). Для этого:
Запустите среду разработки Arduino.
Откройте скетч ArduinoISP из меню примеров.
Выберите плату и последовательный порт, которые соответствуют вашей плате Arduino.
Загрузите скетч ArduinoISP.
Далее:
Подключите электролитический конденсатор 1 мкФ 50 В следующим образом: сторона
с полосой к заземлению arduino
сторона без полосы к контакту сброса arduino
Далее:
В среде разработки arduino щелкните по инструментам, плате и выберите ATtiny85 (w / arduino as ISP), убедитесь, что при использовании ATtiny 45 вы выбрали правильный. Теперь вы можете написать свой скетч и загрузить его, как обычно, в Arduino.При загрузке нового скетча светодиоды будут безумно мигать в течение секунды, затем программа возьмет на себя управление и будет работать, как запрограммировано.
После загрузки скетча вы можете удалить электролитический конденсатор.
Иногда после загрузки скетча вы можете получить следующие ошибки:
avrdude: определите сигналы PAGEL и BS2 в файле конфигурации для части ATtiny85
avrdude: определите сигналы PAGEL и BS2 в файле конфигурации для части ATtiny85
Не волнуйтесь, скетч загрузится нормально.Теперь вы можете удалить все, кроме 5V + и заземляющих проводов, как вы успешно запрограммировали микросхему ATtiny!
Должны поддерживаться следующие команды Arduino:
pinMode () digitalWrite () digitalRead () analogRead () analogWrite () shiftOut () pulseIn () миллис () микро () задерживать() delayMicroseconds ()
Для получения дополнительных сведений щелкните: Программирование ATtiny с помощью Arduino
— не могу программировать ATtiny2313a с Arduino. Мой чип заблокирован?
Я пытался записать программу на ATtiny2313A-PU, используя мой Arduino Uno R3 в качестве программатора.Сначала я попытался запрограммировать его из Arduino IDE 1.0.1 (Windows 7), и мне показалось, что скетч был загружен, но программа мигания не работала. Затем я нашел руководство Майкла Холачека и последовал его инструкциям:
- загрузил скетч ArduinoISP на мой Arduino Uno
- смонтировал схему на макетной плате
- установил WinAVR на мою Windows 7.
- загрузил файлы шаблонов Майкла (Makefile и main.c) и отредактировал Makefile в соответствии с моими настройками (внешний кристалл 8 МГц).Я использовал этот онлайн-калькулятор предохранителей, чтобы получить правильные параметры предохранителей.
- затем в cmd.exe изменил каталог на каталог, в котором я сохранил Makefile и main.c, и запустил make flash
Makefile
УСТРОЙСТВО = attiny2313a
ЧАСЫ = 8000000
ПРОГРАММАТОР = -c arduino -P COM5 -b 19200
ОБЪЕКТЫ = main.o
ПРЕДОХРАНИТЕЛИ = -U lfuse: w: 0x5e: m -U hfuse: w: 0xdd: m -U efuse: w: 0xff: m
#################################################################################################### ####################
#################################################################################################### ####################
# Настраивайте строки ниже, только если вы знаете, что делаете:
AVRDUDE = avrdude $ (ПРОГРАММАТОР) -p $ (УСТРОЙСТВО)
COMPILE = avr-gcc -Wall -Os -DF_CPU = $ (ЧАСЫ) -mmcu = $ (УСТРОЙСТВО)
# символических целей:
все: главное.шестнадцатеричный
.c.o:
$ (КОМПИЛИРОВАТЬ) -c $ <-o $ @
.Так:
$ (COMPILE) -x ассемблер-с-cpp -c $ <-o $ @
# "-x assemblyr-with-cpp" не требуется, так как это значение по умолчанию
# тип файла для расширения .S (с большой буквы). Однако верхний регистр
# символа не всегда сохраняются в Windows. Для обеспечения WinAVR
# совместимость определяет тип файла вручную.
.c.s:
$ (КОМПИЛЯЦИЯ) -S $ <-o $ @
вспышка: все
$ (AVRDUDE) -U flash: w: main.hex: i
предохранитель:
$ (AVRDUDE) $ (ПРЕДОХРАНИТЕЛИ)
установить: плавкий предохранитель
# если вы используете загрузчик, измените команду ниже соответствующим образом:
нагрузка: все
bootloadHID main.шестнадцатеричный
чистый:
rm -f main.hex main.elf $ (ОБЪЕКТЫ)
# файловых целей:
main.elf: $ (ОБЪЕКТЫ)
$ (КОМПИЛЕЙ) -o main.elf $ (ОБЪЕКТЫ)
main.hex: main.elf
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
# Если у вас есть раздел EEPROM, вы также должны создать шестнадцатеричный файл для
# EEPROM и добавьте его к цели "flash".
# Цели для отладки и анализа кода:
disasm: main.elf
avr-objdump -d main.elf
cpp:
$ (КОМПИЛЯЦИЯ) -E main.c
main.c
Ниже я получил результат:
C: \ Пользователи> cd / D D: \ electronics
D: \ electronics> cd nikon / mi
D: \ electronics \ nikon \ mi> сделать вспышку
avr-gcc -Wall -Os -DF_CPU = 8000000 -mmcu = attiny2313a -c main.c -o main.o
main.c: 6: error: stray '\ 342' в программе
main.c: 6: error: случайный '\ 200' в программе
main.c: 6: error: случайно '\ 250' в программе
main.c: В функции main:
main.c: 9: ошибка: случайный '\ 342' в программе
main.c: 9: ошибка: случайный '\ 200' в программе
main.c: 9: error: случайно '\ 250' в программе
make: *** [main.o] Ошибка 1
Я подозреваю, что могу заблокировать предохранители на Attiny 2313a. Если это так, я думаю, мне придется построить этот спасательный щит AVR. Может быть, Makefile настроен неправильно? Как я могу определить проблему? Как я могу проверить, жив ли еще чип?
.