Программа для прошивки attiny13
В версии Arduino_ID_v1.0.4 ArduinoISP отсутствует.
Нужно загрузить библиотеку ArduinoISP.
Файл -->> примеры -->> ArduinoISP
Инструменты -->> Плата -->> Arduino UNO
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "AVRISP mkll"
Версия ArduinoISP version 04m3, 23 July 2011 Randall Bohn
Ошибка при загрузке программы: avrdude: stk500_getsync(): not in sync: resp=0x00
Отключил всё от выходов и входов Arduino UNO, ошибка пропала, программа загрузилась хорошо.
Файл -->> образцы -->> ArduinoISP
Инструменты -->> Плата -->> "Arduino/Genuino UNO"
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "AVRISP mkll"
Версия ArduinoISP version 04m3, 23 July 2011 Randall Bohn
Загрузка прошла без ошибок.
Файл -->> примеры -->> ArduinoISP
Инструменты -->> Плата -->> "Arduino/Genuino UNO"
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "AVRISP mkll"
Загрузка прошла без ошибок.
Файл -->> примеры -->> ArduinoISP
Инструменты -->> Плата -->> "Arduino/Genuino UNO"
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "AVRISP mkll"
Файл -->> примеры -->> ArduinoISP
Инструменты -->> Плата -->> "Arduino/Genuino UNO"
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "AVRISP mkll"
Загрузка прошла без ошибок.
Пробуем прошить ATtiny13
Микросхему ATtiny13 подключаем вот по такой схеме к Arduino UNO
Программа Arduino_ID_v1.8.9
Программатор Arduino UNO
Инструменты -->> Плата -->> Менеджер плат -->>
И в самом низу листа выбрал:
Если что, то папку с платами ATtiny13 можно распаковать туда же, без установки, все платы будут работать так-же, архив лежит ниже по ссылке.
Разные версии cores13, для прошивки микросхемы ATtiny13 и не только.
Настройки для ATtiny13:
Инструменты -->> Плата: ATtiny13
Инструменты -->> Processor Version: "ATtiny13a"
Инструменты -->> Порт: "ваш порт"
Инструменты -->> Программатор: "Arduino as ISP"
Загрузил пробный скетч:
Такой скетч тоже работает:
Загрузка прошла сразу и без ошибок.
Что же среда делает при нажатии на кнопку «Записать загрузчик»?
Arduino IDE в данном случае просто выставляет нужные фьюзы микроконтроллера.
К примеру, мне нужно, чтобы ATtiny13 работал на частоте в 4.8 мГц, я выбираю нужную мне частоту и только один раз жму кнопку «Записать загрузчик» — всё. Теперь микроконтроллер будет всегда работать на заданной частоте, если будет нужно изменить частоту опять — проделываем описанную выше процедуру.
Сразу скажу, что рост частоты приведёт за собой рост потребления контроллера, чем чаще переключаются транзисторы в микроконтроллере тем больше он потребляет.
Для каких-то там мигалок, я считаю, выполнение 1.2 миллиона инструкций будет с лихвой, да и на такой частоте микроконтроллер потребляет около 1 миллиампера.
Прошиваем ATtiny13 с помощью программатора USBASP
Подключаем ATtiny13 к программатору вот по такой схеме.
Настройки для прошивки ATtiny13 программатором USBASP в программе Arduino ID v1.8.9
Инструменты -->> Плата: ATtiny13
Инструменты -->> Порт: "COM3"
Инструменты -->> Программатор: "USBasp"
Все версии программы Arduino ID успешно прошивают ATtiny13, при установке нужных библиотек в программу Arduino ID,
в нашем случае для ATtiny13.
Однако нужно помнить, что должны быть установлены свежие драйверы для программатора USBASP
А если программатор новый(только пришёл с али), то нужно его ещё прошить новой прошивкой для корректной работы.
Прошивка находится в архиве, имя usbasp.atmega8.2011-05-28.hex
Если хотите знать как обновить прошивку USBasp, пишите в комментариях, добавлю по мере возможности.
Не забываем ещё про перемычку в программаторе USBasp.
Перемычка JP1: питание программируемой микросхемы.
Перемычка JP3: Обязательно поставить, с этой перемычкой работают частоты - 9.6/4.3/1.2/
скриншот настроек в программе Arduino ID.
Без всего этого удачных прошивок может и не быть.
Программатор USBASP.
Перемычка JP3: Обязательно поставить.
Скриншот настроек программы.
Фьюзы ни какие не трогаем, всё по умолчанию
Прекрасно зашиваются файлы *.hex
Прошиваем ATtiny13 с помощью программы AVRDude Prog v3.3
Программатор USBASP.
Перемычка JP3: Обязательно поставить.
Скриншот настроек программы.
Фьюзы ни какие не трогаем, всё по умолчанию
Прекрасно зашиваются файлы *.hex
Всем привет. Уже давно появился способ программировать маленькие, дешёвые, экономичные к питанию и доступные микроконтроллеры ATtiny13A.
Вот собственно всё то что ниже, только в видео формате:
Сегодня расскажу, как я зашиваю Arduino'вские скетчи в ATtiny13A.
Итак, для начала нам нужно скачать вот этот архив (взято и совсем чуть-чуть доделано отсюда), положить файлы по адресу "\Documents\Arduino\hardware\". Должно получится что-то типа «C:\Users\Администратор\Documents\Arduino\hardware\attiny13\avr\cores\core13».
Перезапускаем Arduino IDE если она запущена на данный момент, это нужно для того, чтобы среда добавила новый микроконтроллер в список плат.
Обязательно проверяем, правильно ли у нас выбрано «расположение папки со скетчами» (посмотреть можно во вкладке «Файл/Настройки»):
Туда нам будет нужно распаковать архив с ядром для ATtiny13.
Теперь прошьём в дуинку ArduinoISP из примеров Arduino IDE:
Потом подключаем ATtiny13 к Arduino, как показано на картинке:
Потом нужно изменить тип программатора на Arduino as ISP, как показано на скриншоте:
Теперь мы можем выбрать, на какой частоте может работать микроконтроллер ATtiny13.
С завода ATtiny13 работает на частоте в 1.2 МГц, то есть микроконтроллер тактируется от внутренней RC- цепочки на частоте в 9.6 МГц и включён делитель на 8, поэтому я указал частоту в 1.2 МГц как дефолтную:
Как видим, доступные частоты — 1.2 МГц, 4.8 МГц и 9.6 МГц. Для изменения частоты нам нужно нажать на кнопку «Записать загрузчик», которая располагается в вкладке «Сервис».
Что же среда делает при нажатии на кнопку «Записать загрузчик»?
Arduino IDE в данном случае просто выставляет нужные фьюзы микроконтроллера.
К примеру, мне нужно, чтобы ATtiny13 работал на частоте в 4.8 мГц, я выбираю нужную мне частоту и только один раз жму кнопку «Записать загрузчик» — всё. Теперь микроконтроллер будет всегда работать на заданной частоте, если будет нужно изменить частоту опять — проделываем описанную выше процедуру.
Сразу скажу, что рост частоты приведёт за собой рост потребления контроллера, чем чаще переключаются транзисторы в микроконтроллере тем больше он потребляет.
Для каких-то там мигалок, я считаю, выполнение 1.2 миллиона инструкций будет с лихвой, да и на такой частоте микроконтроллер потребляет около 1 миллиампера, вот можете посмотреть скрин из даташита:
Минимальное рабочее напряжение, при котором ATtiny13 сохраняет работоспособность — 1.8 В, причем гарантировано будет работать, в данном случае, только на частоте в 1.2 МГц.
Итак, зашьем для начала почти родной начинающим ардуинщикам пример blink, ну как же без него?
Как вы уже заметили, скетч стал заметно легче, чем для Arduino Uno. Это связано с тем, что урезаны большинство Arduino'вских функций ну и они немного больше оптимизированные.
поддерживаются следующие функции:
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogReference(INTERNAL) / (EXTERNAL)
shiftOut()
pulseIn()
analogWrite()
millis()
micros()
delay()
delayMicroseconds()
Итак, как мы только что увидели, нам доступно всего 1024 байта. Мало ли это? Ну, смотря для каких задач. Если, например, для каких-то там мигалок, пищалок или индикаторов, думаю, будет вполне достаточно, хотя можно даже что-то посерьёзней сварганить, особенно если познакомится с AVR-Cи.
Распиновка микроконтроллера из даташита:
К примеру, PB4 — это то же, что и pin 4, или просто 4.
Аналоговые входы — все, на которых пишет ADC*, например PB4 — это есть ADC2, то есть для того, чтобы считать напряжение, пишем analogRead(A2); или просто analogRead(2);, аппаратный ШИМ поддерживают только порты 0 и 1.
UPD0: добавил ссылку как экономить место на микроконтроллере и как моделировать Arduino в программе Proteus:
Популярнейшая программа AVRDUDE_PROG 3.3 предназначена для программирования микроконтроллеров AVR ATmega и ATtiny:
1. Возможность самостоятельного добавления программаторов, настройки скорости программирования и т.п;
2. Возможность самостоятельного добавления МК;
3. Редактирование и настройка отображения Fuses битов;
4. Выбор инверсных или прямых Fuses битов;
5. Окна вывода значений Fuses битов в HEX формате;
6. Сохранение настроек программирования при закрытии программы, т.е. при последующем открытии все настройки восстановятся.
В прошлой статье я рассказал о простом (но очень хорошем) программаторе для прошивки микроконтроллеров AVR ATmega и ATtiny - USBASP AVR программатор. В той же статье я указал какие программы поддерживают данный программатор. Наиболее лучшей из них, на мой взгляд, является программа AVRDUDE_PROG автором которой является Сергей Боднар. О ней мы сегодня и поговорим.
Последняя версия программы AVRDUDE_PROG - 3.3 , из программы всегда можно попасть на сайт разработчика и скачать новые версии.
Программа очень проста в использовании, имеет приятный интуитивно понятный интерфейс на русском языке, поддерживает очень много различных программаторов и практически все микроконтроллеры ATmega и ATtiny. Немаловажно и то, что в программу можно самому вносить изменения - добавлять программаторы, микроконтроллеры, изменять некоторые настройки (все подробно расписано на сайте разработчика).
Программа не требует установки на компьютер, необходимо только разархивировать скачанный файл и можно сразу приступать к работе, поддерживаются все разновидности Windows - от ХР до 10.
Окно запущенной программы AVRDUDE_PROG:
Что есть что:
1:
- окно выбора типа микроконтроллера
- кнопка "Стереть все" - очищает все внутренности микроконтроллера
2:
- чтение калибровочных ячеек микроконтроллера
В данном примере показаны четыре калибровочные ячейки микроконтроллера ATmega8 для внутреннего RC генератора:
ВВ - для частоты 1 МГц (частота по умолчанию)
BD - для частоты 2 МГц
В2 - для частоты 4 МГц
В2 - для частоты 8 МГц
При тактировании микроконтроллера ATmega8 частотой 1 МГц от внутреннего RC генератора (по умолчанию) содержимое первой калибровочной ячейки автоматически учитывается микроконтроллером для подстройки внутреннего генератора. При других частотах - содержимое соответствующей калибровочной ячейки необходимо вручную вводить в регистр микроконтроллера для получения более стабильной частоты (если такое нужно). К примеру, в конструкции "Трехканальный термостат, термоморегулятор, таймер. ", которая работает с тактовой частотой 8 МГц от встроенного генератора с внутренней RC цепочкой, требуется перед прошивкой ЕЕPROM памяти записать в определенную ячейку HEX файла значение калибровочной ячейки для частоты 8 МГц.
3:
- выбор HEX файла для прошивки Flash памяти микроконтроллера, сверка записанного файла с оригиналом, чтение данных из памяти
4:
- выбор HEX или EEP файла для прошивки EEPROM памяти микроконтроллера, сверка и чтение
5:
- выбор программатора (по умолчанию - USBASP)
Если вы будете пользоваться программой скачанной с сайта разработчика то там, по умолчанию (первым в списке), будет идти "USBASP", у меня на картинке 4 разновидности USBASP программатора:
- Usbasp_1M
- Usbasp_4M
- Usbasp_8M
- Usbasp-32кГц
Дело в том, что программатор USBASP позволяет записывать файлы прошивки с двумя скоростями:
- для МК с тактовой частотой 1,5 МГц и выше (без перемычки на J3) - скорость записи 375 кГц
- для МК с тактовой частотой менее 1,5 МГц (с перемычкой на J3) - скорость записи 5 кГц
Для нормальной записи прошивки в МК требуется скорость в 4 раза меньше, чем установленная тактовая частота.
Для прошивки нового МК, у которого по умолчанию тактовая частота 1 МГц, необходимо устанавливать в программаторе перемычку на разъем J3, а сама скорость - 5 кГц, в некоторых случаях начинает нервировать.
Для того, чтобы не портить нервы, не дергаться с перемычкой, я программно установил 4 варианта скорости записи, которые выбираются в зависимости от текущей тактовой частоты МК:
- Usbasp_1M - скорость 187,5 кгЦ, для частот 1-4 МГц
- Usbasp_4M - скорость 375 кГц, для частот 4-8 МГц
- Usbasp_8M - скорость 750 кГц, для частот 8 и более МГц
- Usbasp-32кГц - скорость 4 кГц, для часового кварца
Все эти установки прописаны в самом начале файла "programm.ini" где скорость записи зависит от ключа "-В" и числа после него:
6:
- выбор отображения FUSE битов - прямой (как в UniProf и даташитах) и инверсный (как в PonyProg)
7:
- окно вывода служебной информации о выполняемых и выполненных операциях
Внешний вид окна "FUSES" программы AVRDUDE_PROG:
Тут все просто - расставляем в нужном виде галочки или убираем их и программируем FUSE биты. Если что-то намудрили - нажатие кнопки "По умолчанию" приведет установки FUSE битов в значения "по умолчанию" (сами FUSE биты в МК не изменятся!). Очень внимательно устанавливайте FUSE биты - ошибка может привести к отказу микроконтроллера.
Хочу обратить ваше внимание на самую распространенную ошибку при установки FUSE битов. В большинстве случаев мы изменяем только биты ответственные за выбор источника тактирования и частоту тактирования, к примеру для ATmega8 это: CKSEL0-CKSEL3. По умолчанию у ATMEGA8 тактовая частота 1 МГц от внутреннего генератора - сброшен бит CKSEL0 (стоит галочка). Нам, допустим, нужно установить тактовую частоту 8 МГц от внутреннего генератора - сбросить бит CKSEL2 (поставить галочку), что мы и делаем. Но при этом ЗАБЫВАЕМ УСТАНОВИТЬ БИТ CKSEL0 (убрать галочку)!. В результате, программируя FUSE биты, мы получаем совершенно иной результат - программа не работает, а МК не реагирует на программатор. Забыв сбросить бит CKSEL0 мы получаем другой источник тактирования МК - внешний RC. Отчаиваться не надо, главное разобраться в том, что вы получили в результате. В нашем примере - внешний RC, смотрим даташит, подсоединяем к соответствующим входам МК сопротивление и конденсатор (по схеме из даташита и с нужными номиналами) и восстанавливаем контроль над МК.
Внешний вид окна "Автоматическое программирование" AVRDUDE_PROG:
Здесь можно задать первоначальные настройки для разных случаев использования программы.
Как видите - программа AVRDUDE_PROG проста и понятна в использовании, за что и скажем спасибо Сергею Боднару!
Внимание! Данный урок опирается на информацию из предыдущего урока о программаторах. Обязательно изучите сначала его. В прошлом уроке я рассказывал о том, как загрузить прошивку в Ардуино, используя внешние устройства: USB-TTL преобразователь и ISP программатор. Как нетрудно догадаться, при помощи этих же инструментов можно загрузить прошивку и в голый чип, будь то ATmega328 или ATtiny85. МК серии ATtiny являются младшими братьями АТмег, у них меньше ног, меньше памяти, меньше интерфейсов и таймеров, но зато они дешевле и хорошо подходят для мелких проектов. Давайте сравним несколько популярных МК:
Примечание: большинство функций объединены на одних и тех же пинах. Как вы можете видеть, чем дешевле МК, тем меньше у него возможностей. Полное подробное сравнение можно глянуть здесь.
UART и ISP
Для подключения прошиваторов к голому чипу нам нужно будет изучить распиновку (pinout) на нужный микроконтроллер. Распиновки бывают цветные и красивые (часто с ошибками), а бывают более серьёзные и правильные. Лучше всего открыть даташит на нужный МК и на второй же странице найти 100% правильную распиновку. Например для ATmega328, ATtiny85 и ATtiny13:
Подключение программатора
Программатор, или Ардуину в качестве программатора, подключить очень просто. Смотрим распиновку и подключаем:
- Шину ISP: пины MOSI, MISO и SCK. Они есть на всех МК
- Сброс RST
- Землю GND. Любую из имеющихся, они соединены внутри МК
- Если МК не питается от своего источника, подключаем заодно VCC
Программирование
Итак, что же даёт нам ядро помимо выбора настроек МК? Можно программировать МК всё теми же командами, что и раньше! Мигать светодиодами через digitalWrite, измерять напряжение через analogRead и прочее прочее. Давайте напишем классический Blink:
Важный момент по работе с ядрами для других МК, у которых больше 8 ног. Для сохранения удобства работы с IO функциями ядра (digital/analog/Read/Write) к пину можно обращаться как PIN_ + имя_ноги на распиновке, например подадим высокий сигнал на пин PC3: digitalWrite(PIN_PC3, HIGH); . Все остальные нюансы расписаны на странице ядер по ссылкам выше.
Я думаю вы поняли, что в целом работа с голыми МК не особо то и отличается от работы с обычной платой Arduino, и теперь можно переходить к сложным самоделкам на базе своей платы, в центре которой будет стоять микроконтроллер. Давайте поделюсь парой советов по минимальной обвязке.
Проект на голом МК
Зачем делать проект на своей плате и голом микроконтроллере?
- Конечно же размер, своя плата получится компактнее в большинстве случаев.
- Энергопотребление. Ни для кого не секрет, что всякие удобные штуки на плате ардуино потребляют огромный по меркам энергосбережения ток, и для автономного устройства лучше взять голый камушек.
- Работая с голым камнем мы можем выбрать микроконтроллер под свои задачи. Например для мелкого проекта необязательно брать 328 мегу, если с задачей справится аттини13, которая стоит 20 рублей.
- Возможная экономия. Ардуино нано стоит условно 170 рублей без доставки. Голая 328 мега на том же алиэкспресс – 100 рублей. Если брать десяток. В дорогущем российском чип и дип – 190 рублей. То есть если очень приспичит – можно и тут купить без особых потерь, потому что оригинальная нано стоит 3 тысячи рублей в том же ЧИДе.
- Удобство разводки платы. Микросхема в корпусе под поверхностный монтаж находится на одном слое и не мешает дорожкам на другом слое.
- Удобство монтажа. Даже если делать свою плату прототип лутом, то припаять на неё чип в 100 раз удобнее и быстрее, чем сверлить три десятка отверстий под ардуину, а потом их запаивать.
- Мелкосерийное производство готовых или почти готовых плат, для себя если нужно несколько или на продажу. На том же jlcpcb можно заказать изготовление плат с распайкой внимание smd компонентов. То есть ардуину вам никто не припаяет, а вот ту же 328 мегу припаяют за 100 рублей, тиньку 13ю – за 35 рублей, а чем больше партия – тем дешевле. К этому вопросу мы вернёмся ближе к концу этого урока.
Соединять все ноги питания (GND, VCC) максимально толстыми и короткими дорожками между собой:
Поставить керамический конденсатор
100 нФ/nF (0.1 мкФ/uF) по питанию МК: между VCC и GND для сглаживания микропульсаций напряжения
- Располагать максимально близко к пинам питания МК
- Также параллельно ему можно поставить электролит (алюминиевый цилиндр) или танталовый конденсатор (компактный SMD чип) на 10-47 мкФ/uF, для сглаживания более серьёзных пульсаций напряжения. Особенно если МК питается от одного источника с другими потребителями, или используется некачественный источник питания.
Если нужна кнопка сброса (reset), подключаем её к RST и GND, т.е. кнопка должна подать на RST низкий сигнал. Внутри МК уже присутствует подтягивающий резистор на пин RST
- При наличии кнопки и дорожки от пина RST рекомендуется подтягивать пин к VCC резистором на 10 кОм, потому что внутренний подтягивающий резистор имеет довольно большое сопротивление и наведённые на дорожку помехи (она выступает в роли антенны) могут привести к сбросу МК
Я думаю теперь вы готовы к созданию проекта на своей плате!
Перенос МК с Arduino на свою плату
Напомню, что источник тактирования играет важную роль при загрузке прошивки. Микроконтроллер может быть настроен на тактирование от внутреннего генератора на 8 МГц, либо на тактирование от внешнего.
Видео
Читайте также: