Андрей Смирнов
Время чтения: ~11 мин.
Просмотров: 39

Программируем Attiny 13, 13а и 85 через Ардуинку 📹

Программирование даёт не только огромный простор для фантазии и возможностей, но, как и любой , одновременно навязывает свой стиль и ограничивает возможности. Поэтому, если чувствуется, что Arduino становится тесноват — можно не только перейти на 32-битные контроллеры (например, STM32), но и попробовать более низкоуровневое программирование контроллеров. Уходя ближе «к железу» — программировать придётся на более близком к железу уровне — и если это не ассемблер, то уж язык программирования Си — точно. Пример подобного программирования уже приводился в статье . У такого стандартного программирования микроконтроллеров есть существенное преимущество перед использованием Arduino-вских скетчей. Однако, за низкоуровневый полный контроль и возможность использовать все ресурсы микроконтроллера, приходится расплачиваться долгим и внимательным изучением документации (datasheet-а) на микроконтроллер. Т.е., если у вас ещё не было опыта работы с конкретным микроконтроллером — то вместо быстренького набрасывания скетча для решения своей задачи — вам придётся потратить дополнительное время на изучение мат. части. Разумеется, не всегда это может быть оправдано и если задачу нужно и можно быстро решить при помощи Arduino — то почему бы и нет? Однако, если решение задачи на Arduino невозможно, то придётся потратить время на получение ценных опыта и знаний, которые помогут открыть все возможности, которые под силу микроконтроллеру. Для примера, возьмём меленький, простой и дешёвый контроллер ATtiny13.

ATtiny13

8-битный AVR микроконтроллер с 1 КБ программируемой Flash памяти — RISC архитектура — 120 команд, (большинство выполняется за один такт) — 32 8-битных регистра общего применения — 1 КБ программируемой Flash памяти программы — 64 байта EEPROM памяти данных, (до 100 000 циклов записи/стирания) — 64 байта SRAM памяти (статическое ОЗУ) — Один 8-разрядный таймер/счётчик с отдельным предделителем и два ШИМ канала — 4-канальный 10-битный АЦП со встроенным ИОН — Программируемый сторожевой таймер (watchdog) со встроенным генератором — Встроенный аналоговый компаратор — Внутрисистемное программирование через SPI порт — Внешние и внутренние источники прерывания Корпусное исполнение: — 8-выводные PDIP и SOIC корпуса: 6 программируемых линий ввода-вывода Диапазон напряжения питания, частота: 1.8 – 5.5В (для ATtiny13V) — до 10МГц 2.7 – 5.5В (для ATtiny13) — до 20МГцВыводы микроконтроллера ATtiny13:attiny13-pinout.jpg

Документация на ATtiny13:

Как видим, микросхема микроконтроллера — маленькая — всего 8 ножек. Чтобы заставить её работать — нужно просто воткнуть её в макетную плату, подтянуть RESET (первый пин — на схеме обозначается — PB5) к шине питания через 10-килоомный резистор и подать питание — например, 5V снятые с пинов питания контроллера Arduino / CraftDuino.

Разумеется, желательно, ещё повесить конденсатор в 0.1 мкФ между шинами питания.

Подключение ATtiny13 через SPI к CraftDuino

В статье , уже подробно расписано как нужно подключить микроконтроллер ATtiny13 к контроллеру Arduino или CraftDuino, чтобы его можно было программировать через выводы микросхемы FT232RL используя режим bit-bang (режим управления отдельными выводам микросхемы). Поэтому сразу переходим к софтовой части.

Atmel Studio

Раз решили программировать «по-взрослому», то и среда разработки нужна «взрослая». Идём на сайт -a, и скачиваем свежую версию .Atmel Studio — (наследница AVR Studio) — это бесплатная среда разработки для микроконтроллеров Atmel. Сама IDE должна быть знакома, т.к. используется оболочка от Microsoft Visual Studio, однако следует обратить внимание, что в качестве компилятора используется GCC. После установки, на рабочем столе появится ярлык с симпатичной красной божьей коровкой. Запускаем IDE и привычным образом, быстренько создаём проект.File -> New -> Project… Выбираем С/С++ и GCC C Executable Project, пишем имя проекта, например, blink 🙂 Затем, среда предложит выбрать тип используемого микроконтроллера — выбираем ATtiny13. Всё — шаблонный файл уже создан и можно начинать программировать:atmel_studio_ide.png Предлагаемый шаблон программы — напоминает что-то :

Соответствие функций Arduino на Си

Описание работы портов микроконтроллера и используемых для насткройки и работы регистров, очень подробно приводится в документации на микроконтроллер — . Как увидим далее, конфигурирование и работа с портами сводится к установке соответствующих битов в нужных регистрах микроконтроллера. Если вы уже имели дело с установкой/проверкой/очисткой битов (работа с битовыми масками), то вам будет проще разобраться в происходящем. Но, на всякий случай, напомню: чтобы установить бит N — нужно выполнить побитовое ИЛИ с числом, где этот бит установлен (чтобы получить такое число — мы побитово сдвигаем влево единицу на заданное число позиций). Соответственно, чтобы сбросить бит N — нужно выполнить побитовое И с числом в котором установлены все биты кроме заданного (чтобы получить такое «интвертированное число» — мы сначала получаем число в котором бит установлен, а потом применяем к нему операцию побитового НЕ). Так как процедура установки бита встречается чрезвычайно часто — для неё даже есть удобный макрос , который рекомендуется к использованию. Для простоты понимания Си-шных методов работы, сопоставим им функции Arduino.Базовые функции управления портами (см. datasheet стр. 48): В принципе, хотя у ATtiny13 всего 1 килобайт флеша на котором сильно не разгуляешься, но даже для этой крохи частично реализован Arduino-вский фреймворк — . В нём есть реализации для: Подробнее про использование Core13 можно прочитать здесь: . Но даже если использовать Arduino IDE не собираетесь — взглянуть на код всё равно стоит, чтобы проверить как работает и что скрывается за реализацией функций Arduino:Реализация функций digitalWrite() и digitalRead() из Core13 (core13_022_arduino_1_6) Даже здесь используется много проверок, что разумеется даёт «защиту от дурака», но и является причиной, почему при использовании Arduino-вских функций производительность кода будет ниже.

Частота работы микроконтроллера

По-умолчанию, микроконтроллер ATtiny13 работает на частоте 1.2 МГц — определяется (так называются специальные конфигурационные биты, находящиеся в специальных ячейках памяти и отвечающие за параметры конфигурации всего МК). Младший фьюз-байт lfuse = 0x6A Старший фьюз-байт hfuse = 0xFF Посмотреть, что означают эти параметры можно в удобном калькуляторе фьюзов для AVR — . В калькуляторе, можно увидеть, что меняя значение младшего фьюз-байта с 0x6A на 0x7A — мы получим работу микроконтроллера на частоте 9.6 МГц за счёт отключения делителя тактового сигнала на 8 (CKDIV8). 9.6 МГц / 8 = 1.2 МГц. Посмотреть текущие значения фьзов можно при помощи avrdude, командой: — получим два файла — low_fuse_val.hex и high_fuse_val.hex с шестнацетиричным значением соответствующих фьюзов.

Blink для ATtiny13

Теперь, зная частоту работы контроллера и базовые методы работы с портами, можем написать микроконтроллерный Hello World — а именно — Arduino-вский — Blink: Выбираем тип сборки — Release и жмём F7 для сборки проекта (Build -> Build Solution). Чтобы проверить работу программы — подключаем к третьей ножке (PB4) светодиод с токоограничительным резистором:attiny13-programming-schematics_preview.jpg

Прошивка МК ATtiny13

Остаётся прошить наш микроконтроллер. Можно взять готовый hex-файл из папки проекта и используя avrdude, прошить МК командой: А можно, для удобства прошивки, соответствующим образом настроить Atmel Studio.

Настройка Atmel Studio для прошивки МК ATtiny13 через avrdude

Настроить Atmel Studio для прошивки МК ATtiny13 через avrdude, очень . Идём в меню Tools -> External Tools И добавляем нашу тулзу — avrdude: Title:Deploy ATtiny13 Command:C:ArduBootavrdude.exe Arguments:-C C:ArduBootavrdude.conf -c ftbb -P ft0 -B 9600 -p attiny13 -U flash:w:$(TargetDir)$(TargetName).hex:i Чтобы видеть лог процесса прошивки — нужно поставить галочку рядом с пунктом «Use Output window». Вот и всё. Теперь, чтобы прошить МК нужно зайти в меню Tools и выбрать наш пункт «Deploy ATtiny13».Ссылки: ()По теме:

 Ну, если так можно сказать, то дорос я таки до того, дабы на внешний вид пластмасса с 8 ножками слушалась меня по мере своих способностей. Каких-либо особых целей не преследовалось, а руководило мной любопытство и познание, не более… Как и что до конца не осознано, но результат получен и пора его подытожить, — в виде этой вот статьи.Итак, написано об этом более чем много, но нет ничего более ценного, чем собственное понимание, даже уже того, что хорошо известного другими. Из этого я сделал вывод, что подытоживать свои знаниями такими вот статьями будут еще многие, дабы в последствии в виде подсказки обратиться все же к своим заметкам! Однако если они помогут еще кому-то, это лишь к лучшему. Поэтому пора начинать уже по существу!

Attiny 13 и 13а микроконтроллеры

 В общем, не буду приводить Даташиты и очень подробно расписывать, что и где. В целом у микроконтроллера несчастных 8 ножек, само собой две это питание 4 и 8. 4 аналоговых выхода-входа, пару ШИМ ножек, и на всех них навешано еще дополнительных функций. Лучше обратиться к картинке.

* — надо обратить внимание, что PB1, PB2 и т.д. совсем не соответствует физическим ножкам 1, 2 и т.д.. Это надо помнить, подключая и программируя Тиньку.

 Собственно на этой картинке показано даже как подключается Ардуино к Аттини во время ее программирования. Смотрите синие метки. Сам же скетч для того, чтобы Ардуино стала нашим программатором, залит прямо уже в оболочке программы Arduino. То есть подключаем Ардуино и заливаем скетч-программатора. Для наглядности тоже картинка.

Если выдает ошибку, то заливаем загрузчик через примеры вот так…

Появляется скетч из примера, его и льем в Ардуинку.

**-почитайте в скетче комментарии на английском, там могут быть ограничения по частоте работы для различных микроконтроллеров. Это надо учитывать при последующей заливке.

Теперь Ардуинка это уже не Ардуинко, а ISP программатор, который как раз работает через CH340, именно через эту микросхему все программируется и она встречается в других программаторах ISP. Осталось лишь вместо встроенного 328 контроллера подключить Attiny 13. Для этого необходимо расширить список плат, дополнив штатную папку hardware архивом attiny13. Опять же для наглядности картиночку оставляю, где это все находится и куда разархивировать скачанный архив.

Теперь подключаем уже наш микроконтроллер согласно ножек в картинке выше, — синие метки. А сама принципиальная схема будет таковой.

Затем как все собрали, выбираем плату attiny13 в Инструменты>Платы>ATtiny13. (частота 128 Khz) В итоге можно заливать стандартные скетчи, надо лишь указывать правильные ножки и понимать, что функции для Аттини 13 ограничены.

Если что-то не получается залить из скетчей, то это вполне возможно из-за того, что такие функции не поддерживаются. Доступны:

Собственно о наладке Ардуино для программирования Аттини 13, на этом всё! Далее поле вашего творчества будет лишь ограничиваться фантазиями и возможностями по их реализации.

Attiny 85 микроконтроллеры

Первоначально необходимо скачать архив ВОТ ЭТОТ и залить по аналогии с тем, о чем я уже говорил, в папку hardware. Схемотехника подключения один в один как для 13 серии.

Потом выбираем нужную плату.

Делаем последние настройки по выбору и все… После этого у меня все прекрасно заливалось в Аттиньку 85.

Атинька 85 перед 13 имеет ряд преимуществ. Во-первых, это больший объем памяти, что важно для «больших» проектов. Но самое главное, как мне кажется, это поддержка канала I2С, это значит что гипотетически к ней уже можно подключать экраны для отображения информации, хотя я этого не проверял. Если кто-то подключал то, отпишитесь так ли это?

FUBZYEVH3QF5RZ8.LARGE.jpg

Получив контроллеры, я понял, что мне необходимо запрограммировать их. Я перепробовал множество разных вариантов программирования ATTiny13 из всемирной сети, пока, наконец, не нашел нужное мне руководство для начинающих по программированию. Файл с несколькими изменениями есть внизу статьи.

Шаг 1: Подключаем чип для программирования

Ознакомьтесь с видеороликом:

Подключите чип к Ардуино следующим образом:

Опционально: GND – к отрицательной ножке диода пин 3 — резистор (250 Ом) – к плюсовой ножке диода

Шаг 2: Добавление данных в программу

  • Откройте программу Arduino IDE и подключите ваш контроллер Ардуино
  • Переходите: Файл -> Примеры -> ArduinoISP
  • Выберите нужную плату и разъем (Инструменты -> Платы/Последовательные порты)
  • Нажмите кнопку загрузки

Так Ардуино будет служить ISP-программатором.

  • После завершения закройте программу

Теперь вам нужно сделать так, чтобы программа IDE видела в контроллере чип, совместимый с Ардуино.

  • Загрузите соответствующий файл
  • Скопируйте папку «attiny» в папку /оборудование/ в каталог установки Arduino IDE

Затем вам нужно скорректировать тактовую частоту:

  • Откройте файл Оборудование/attiny/платы.txt
  • В самом низу файла находятся строчки, содержащие данные, относящиеся к нужному чипу
  • Замените «attiny13.build.f_cpu=9600000L» на «attiny13.build.f_cpu=1000000L»

Чтобы исправить время задержки:

  • Снова откройте Arduino IDE
  • Перейдите в Tools>Board и выберите «ATtiny13 (internal 9.6 MHz clock)»

Шаг 3: Программирование

FS6ZRZHH3QF1DJZ.LARGE.jpg

Чтобы загрузить скетч для контроллера:

  • Откройте IDE
  • Перейдите File>Examples>Basic>Blink
  • Измените 11 строку: «pinMode(13, OUTPUT);» на «pinMode(4, OUTPUT);»
  • Измените 15 строку: «digitalWrite(13, HIGH);» на «digitalWrite(4, HIGH);»
  • Измените 17 строку: «digitalWrite(13, LOW);» на «digitalWrite(4, LOW);»

Теперь IDE должна загрузить скетч на ваш контроллер через Arduino ISP-программатор. Как только загрузка будет завершена, диод начнет моргать с интервалом 1 сек.

Обозначить выводы контроллера в Arduino IDE вам нужно в соответствии с нумерацией выводов на плате (например, Pin1 = PB1, и т. д.).

Шаг 4: Чтение данных сервопривода

F5SH8I4H0TBYC4C.LARGE.jpg

В видеоролике объясняется, как легко настроить программное обеспечение:

При использовании реле вы должны установить диод для защиты от ЭДС, соединив его параллельно с катушкой реле, минусом с пином 4.

Файлы

Шаг 5: Проверяем

F5SH8I4H0TBYC4C.LARGE.jpg

Используемые источники:

  • http://robocraft.ru/blog/arduino/3423.html
  • http://xn——7kcglddctzgerobebivoffrddel5x.xn--p1ai/kommunikatsii/elektronika/arduino/935-programmiruem-attiny-13-i-13a-cherez-arduinku
  • https://masterclub.online/topic/15839-programmirovanie-attiny13

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации