Схемы на attiny2313 своими руками

Добавил пользователь Валентин П.
Обновлено: 18.09.2024

Я не очень люблю работать с Arduino, так как не чувствуется сама идея работы с микроконтроллерами, всё спрятано в библиотеках и, если что-то нужно, просто скачиваешь нужную либу, устанавливаешь её и используешь, а как и что там в большинстве случаев остаётся тайной.

Для изготовления машинки, нам понадобится

  1. микроконтроллер ATtiny2313;
  2. готовое шасси вместе с двигателями (танк или двухколёсный кит); , HC-12, TB387 или любые доступные USART радио-модули — две штуки;
  3. L298 — модуль драйвера двигателей;
  4. Аккумуляторы 18650 Li-ion — две штуки;
  5. Коробка (бокс) под аккумуляторы 18650 (на 2 аккумулятора);
  6. Преобразователь USB-UART на базе CH340G или PL2303HX;
  7. USBasp v2.0 ISP программатор

Ссылки на Aliexpress на всё это добро вы найдёте в конце статьи.

Почему микроконтроллер ATtiny2313

Микроконтроллер ATTiny2313 улучшенный вариант старого микроконтроллера AT90S2313. Внутри у него 120 инструкций оптимизированных для программирования на языках высокого уровня, 32 регистра общего назначения, 2 килобайта флеш-памяти для программ, 128 байт EEPROM (энергонезависимая память) и 128 байт SRAM (оперативная память). Из периферии: один 8 битный таймер/счетчик, один 16 битный таймер/счетчик, четыре ШИМ канала, 2 из которых будут использованы для управления колёсами, аналоговый компаратор, Watchdog таймер, USI универсальный последовательный интерфейс и, самое главное для данного проекта, USART. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц.

ATTiny2313

Все вышеперечисленные характеристики более чем достаточно для наших задач. К тому же ATTiny2313 не дорогой и доступный микроконтроллер, в отличии от Arduino.

Принцип работы программы на МК ATtiny2313

Машинка на радиоуправлении на базе ATtiny2313 (Диаграмма последовательности)

Сама программа состоит из 3-х классов (USART, Queue, CmdExecutor) и основного файла main.cpp, который содержит функцию main(). Класс USART отвечает за инициализацию протокола и получения данных, в нашем случае данные — это команды. После получения, команда добавляется, push(cmd), в очередь Queue. Класс Queue, он же очередь, имеет два метода push(cmd) и pop(cmd). С помощью первого метода, как мы уже сказали, добавляем команды в очередь, а вторым, соответственно берём первую команду из очереди. В функции main() и проверяется если в очереди есть команды. Если команда нашлась main() берёт её и передаёт классу CmdExecutor, он же исполнитель команд, выполняет её — execute(cmd).

Для чего нужна была очередь команд, нельзя было просто выполнять команды сразу после получения, а не тратить время и ресурсы не очень-то и мощного ATtiny2313? Да, можно было, можно было вообще сделать этот пример из двух функций: main() и ISR(USART_RX_vect), и гуляй Вася. Однако не так, во первых, если одна команда выполняется очень много времени, а другая уже на подходе, то как тут быть? Во вторых, если микроконтроллер помимо команд выполняет ещё и другую работу, тоже очень важную, а мы эту работу будем остановить очень часто, тогда может выйти так, что результат будет не тот, да и команды не правильно могут выполнятся, особенно тогда, когда и команда и работа используют те же ресурсы.

Схема подключения компонентов

Машинка на радиоуправлении на базе ATtiny2313 (Схема)

P1 (COMPIM) — COM порт, на реальной машине его нужно заменить на USART радио модуля, к примеру: HC-11, HC-12, TB387 или на любого доступного.
U1 (ATTINY2313) — микроконтроллер
U2 (L298) — модуль драйвера двигателей

Программа для управления

Программа для управления

В моём случае эта программа всего лишь отправляет команды по USART, т.е. делает необходимый минимум задач.

Как установить Rx Tx в Java смотрим здесь, а пример приложения здесь.

Список команд

  • private static final byte PWM1 = '1'; — 1-я скорость;
  • private static final byte PWM2 = '2'; — 2-я скорость;
  • private static final byte PWM3 = '3'; — 3-я скорость;
  • private static final byte PWM4 = '4'; — 4-я скорость;
  • private static final byte PWM5 = '5'; — максимальная скорость;
  • private static final byte STOP = 'a'; — стоп машина;
  • private static final byte START = 'b'; — старт машина, включаются периферия и ШИМ, команда выполняется при включении машины;
  • private static final byte RIGHT_FORWARD = 'c'; — правая гусеница движется вперёд;
  • private static final byte LEFT_FORWARD = 'd'; — левая гусеница движется вперёд;
  • private static final byte RIGHT_BACK = 'e'; — правая гусеница движется назад;
  • private static final byte LEFT_BACK = 'f'; — левая гусеница движется назад;
  • private static final byte ALL_FORWARD = 'g'; — обе гусеницы движутся вперёд;
  • private static final byte ALL_BACK = 'h'; — обе гусеницы движутся назад;
  • private static final byte LEFT_STOP = 'i'; — левая гусеница остановлена;
  • private static final byte RIGHT_STOP = 'j'; — правая гусеница остановлена;
  • private static final byte STOP_ALL = 'k'; — обе гусеницы остановлены;

Управление

  1. 5 скоростных режимов (кнопки от 1 до 5);
  2. Движение вперёд — обе гусеницы движутся вперёд (↑↑), нажата стрелка вверх (↑);
  3. Движение назад — обе гусеницы движутся назад (↓↓), нажата стрелка вниз (↓);
  4. Движение вперёд и направо — правая гусеница остановлена, левая движется вперёд (↑■), нажаты стрелки вверх и направо(↑→);
  5. Движение вперёд и налево — левая гусеница остановлена, правая движется вперёд (■↑), нажаты стрелки вверх и налево (←↑);
  6. Движение назад и направо — правая гусеница остановлена, левая движется назад (↓■), нажаты стрелки вниз и направо (↓→);
  7. Движение назад и налево — левая гусеница остановлена, правая движется назад (■↓), нажаты стрелки вниз и налево (←↓);
  8. Движение по кругу по часовой — левая гусеница движется назад, правая движется вперёд (↓↑), нажата стрелка налево (←);
  9. Движение по кругу против часовой — правая гусеница движется назад, левая движется вперёд (↑↓), нажата стрелка направо (→);

Вывод на консоль

После нажатия стрелок в консоли появятся знаки, указывающие движение машины/танка:

Настройки программы

Выход из программы: USART->Exit или Alt-F4;

Программа для управления

Программа для управления

Подключение: USART->Connect или Ctrl+Alt-C и выбираем COM порт;

Программа для управления

Настройка скорости: USART->Baud или Ctrl+Alt-B и выбираем скорость передачи данных, по умолчанию 9600, такаяже установлена и в прошивке. Настроить следует перед тем, как подключиться;Настроить можно число стоп битов и число битов данных, но в нашем случае их лучше оставить 1 и 8 соответственно.

Код программы для ATtiny2313

Программа для ATtiny2313 написана на C++, а проект сделал в Eclipse C++. Как настроить Eclipse C/C++ для программирования AVR микроконтроллеров смотрите здесь.

Ну вот и пришло время нам соорудить USB программатор. Я долго не мог определиться какой бы программатор нам собрать. Выбирал по критериям простоты конструкции и удобства работы с ними, но ничего не нравилось. Выбрать программатор помог случай. Вернее я его не выбирал вообще – я его случайно собрал сам того не подозревая!

А дело было так. Некоторое количество постов назад мы собрали преобразователь USB to UART на ATtiny2313 (а в прошлой статье мы даже улучшили печатную плату). Еще при выборе схемы преобразователя я планировал на его базе (при помощи заливки различных прошивок) получать устройства различного назначения. Тогда я не подозревал, что данный преобразователь можно использовать шире, чем я планировал. Увидев схему USB программатора – USBtiny на ATtiny2313 я понял, что я уже имею готовый программатор!

Посмотрев на схему, сделанного ранее, преобразователя USB to UART (домашняя страничка )


и схему USB программатора USBTiny


можно увидеть, что это одна и та-же схема. Различия незначительны – отсутствуют сигнальные светодиоды и несколько резисторов. Для того, чтобы преобразователь стал USB программатором нужно просто прошить микроконтроллер новой прошивкой и сделать кабель для подключения.

Теперь все по порядку.
1 Для начала нужно собрать преобразователь (это если Вы его еще не собрали).
Вот рисунок печатной платы преобразователя:
T2313-SMD-2 v2.0 - Рисунок печатной платы UART-USB на ATtiny2313
Для того, чтобы обеспечить все необходимые сигналы для программирования впаиваем защитные резисторы номиналом по 100 Ом в линии ножек 12, 16, 17, 18, 19 (номинал не критичен – можно варьировать).



2 Теперь нужно прошить микроконтроллер.
Линии для программатора выведены на общий разъем платы (кроме сброса – стоит отдельно).



usbtinyisp-T2313.hex v1.04 - Прошивка USBtiny программатора для ATtiny2313
T2313-FuseBit - Фьюз-биты ATtiny2313 для USBtiny
Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставяться инверсно.

3 Далее нам нужен шлейф для того, чтобы соединить программируемое устройство с нашим программатором. Все линии, необходимые для программирования находятся на одном разъеме.



Схема шлейфа проста.



Из особенностей – я вынес индикаторный светодиод и балластный резистор для него за плату на разъем – это для того, чтобы плату без перепайки можно было использовать для других устройств (ну и так прикольней – светодиод мигает прямо в разъеме ). Кроме того, линия Vcc отделена от общего разъема – это на случай если программируемое устройство запитывается не от USB, а от своего источника (что, в принципе, желательно). Сигнальные линии (SCK, MISO, MOSI) желательно экранировать (например чередованием сигнальных и земляных линий в шлейфе). Длину шлейфа не стоит делать большой – до 50 см, не больше. Если нужно программировать удаленное устройство всегда можно применить USB удлинитель – так надежней. Вот мой готовый шнурок:



4 Сам программатор готов, теперь нужно установить драйвер для того, чтобы Винда смогла с ним работать (для Mac OS X & Linux, вродь-как, драйвера вообще не нужно). Тут все просто:

4.1 Скачиваем драйвер, разархивируем его.
usbtinyisp w32 driver v1.12 - Win драйвер для USBtiny программатора
Если у Вас Винда 64 битная, Vista или Windows 7 нужно установить другой драйвер:
usbtinyisp_libusb-win32_1.2.1.0.zip - Драйвер USBtiny для х64, Vista или Windows 7



4.2 Вставляем наш программатор в USB порт.

4.4 Запустится мастер нового оборудования







Винда увидела новое устройство и готова с ним работать.

USBtiny программатор поддерживается AVRDude, а это значит, что многие среды программирования будут с ним работать без проблем. Еще одним достоинством работы с AVRDude является то, что для работы с AVRDude существует множество оболочек GUI из которых можно выбрать подходящую именно для Вас (но об этом в следующей статье).

ДОПОЛНЕНИЯ.
1 Дмитрий Шпак сделал довольно удачную разводку программатора. Программатор получился небольшого размера, имеет стандартный разъем для программирования и, я считаю, будет удобен в работе. Плата двусторонняя.

USBtiny.lay - Разводка USBtiny от Дмитрия Шпака

2 Еще один вариант разводки от Андрея Баранова (Andru_48)





USBtiny.lay - Разводка USBtiny от Андрея Баранова

3 Вариант от mebadboy
Доброе время суток.
Новую печатку я не собирал. Я просто исправил старую - Дмитрий Шпак . Там минимум исправлений – одну дорожку перерезать, кинуть проводок, впаять резистор и диод впаять в другое место.
USB-tiny-mebadboy - Печатка USBtiny от mebadboy
Вот лог dmesg при подключении под linux:
usb 4-2: new low speed USB device using uhci_hcd and address 2
usb 4-2: New USB device found, idVendor=1781, idProduct=0c9f
usb 4-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 4-2: Product: USBtiny

Если мы попробуем вбить в Google название семейства, то он обязательно будет присутствовать в предлагаемых запросах.

Характеристики ATtiny2313

Начнем с характеристик. Первое, и самое очевидное отличие от микроконтроллеров, которые я рассматривал до этого, это число ножек. У ATtiny2313 их 20. Т.е. нам потенциально доступно 18 портов ввода-вывода. По сравнению с максимально 6-ю возможными у ATtiny13/25/45/85.

Данный микроконтроллер обладает 2 КБ флэш памяти, 128 байт оперативной памяти SRAM и таким же количеством энергонезависимой памяти EEPROM .

Кстати, у этого микроконтроллера есть брат-близнец, ATtiny4313 с которым они во всем одинаковы, кроме того, что ATtiny4313 обладает вдвое большим объемом всех видов памяти. 4КБ флэш памяти, 256 байт EEPROM и 256 байт SRAM. Это к тому, что если не хватит ресурсов памяти для работы вашего скетча на ATtiny 2313, можно его заменить на ATtiny 4313 и не придется менять код или устанавливать другую библиотеку.

ATtiny2313 располагает двумя таймерами – 8 битным и 16 битным , встроенным аналоговым компаратором, четырьмя ШИМ каналами и аппаратным UART . Это единственный из тех микроконтроллеров, семейства ATtiny, что я рассматривал ранее в своих статьях, содержит аппаратный UART. Т.е. нам доступен обмен данных с другим устройством по привычной двухпроводной схеме RX-TX как на Arduino UNO. И в том числе загрузка скетчей через USB-TTL конвертер.

Но есть у данного микроконтроллера и существенный минус – у него нет встроенной поддержки АЦП (аналогово-цифрового преобразования). Т.е. у него нет аналоговых пинов. Впрочем, если это очень нужно, можно подключить внешний АЦП или использовать другой микроконтроллер.

Важной особенностью данного микроконтроллера является его цена .

Для сравнения с другими популярными микроконтроллерами, я сделал вот такую таблицу.

Характеристики мы уже обсуждали, а последняя строка – это примерная цена на площадке AliExpress. Цены на AVR микроконтроллеры за последний год сильно увеличились, но соотношение цен сталось примерно одинаковым - ATtiny2313 не намного превышает по стоимости ATtiny13. Временами даже бывает дешевле.

Распиновка микроконтроллера ATtiny2313

Распиновка микроконтроллера ATtiny2313 выглядит следующим образом:

Первая ножка связана с Reset . Она же может превратится в 17 пин среды Arduino IDE если мы изменим фьюзы. Как это делается я рассказывал в отдельной статье ( Что такое фьюзы? Как работать с фьюзами на микроконтроллерах AVR ).

Далее у нас идут две ножки поддерживающие аппаратный UART . Т.е. RX и TX . Они занимают те же нулевой и первый пин, что и у Arduino UNO.

4-я и 5-я ножки служат для подключения внешнего источника тактирования (например, кварцевого резонатора).

Далее идут 2 ножки связанные с аппаратного прерыванием.

Внизу у нас, как обычно земля, а первая верхняя ножка в правом ряду – питание.

Ножки, обозначенные как 17, 18 и 19 мы будем использовать для прошивки микроконтроллера, используя SPI интерфейс которые используются при прошивке и так же используются для обмена данных по I2C интерфейсу.

Ниже идут два таймера Timer0 – 8 битный и Timer1 – 16 битный .

У модели 2313A все 18 цифровых пинов поддерживают программное прерывание. У модели 2313 без буквы A, программное прерывание доступно на 8 пинах.

Программирование микроконтроллера ATtiny2313

Как и в случае с другими AVR микроконтроллерами, пожалуй, кроме ATtiny10, для прошивки микроконтроллера ATtiny2313 мы можем использовать Arduino UNO в качестве ISP-программатора.

Так же можно использовать другие программаторы, такие как USBasp, AVRISP mkII и другие, поддерживающие SPI интерфейс.


Это, наверное, самые простые цифровые часы реального времени. Они отображают реальное время в форме ЧЧ.ММ. Часы построены на Atmel AVR микроконтроллере ATtiny2313 (ATTiny2313, ATTiny2313V). Прошивку на данные часы можно скачать в конце статьи. Ниже также приведены настройки битов конфигурации.

Использование сверхъяркого светодиодного дисплея позволяет отказаться от коммутирующих транзисторов.

Дисплей управляется мультиплексным способом и подключается как обычно мультиплексные дисплеи. В прототипе были применены 2 двузначных дисплея DA56-11SRWA.

Самые простые цифровые часы на Attiny2313. Схема


Резисторы R3…R10 определяют текущий ток отдельных сегментов дисплея и, следовательно, его яркость. Они подобраны таким образом, чтобы ток не превышал максимальный выходной ток (40 мА) микроконтроллера.

Часы запитаны от блока питания на 5В. Ток потребления данных часов при 5 В составляет от 15 до 30 мА в зависимости от количества светящихся сегментов (большая часть — это потребление светодиодного дисплея).

Микроконтроллер ATTiny2313 работает от 2,7 В, а ATtiny2313А и ATTiny2313V уже работают от 1,8 В. При таком низком напряжении дисплей не светиться, и это удобно при обеспечении резервного питания.

bigtimefront

Это цифровые часы, оснащенные четырьмя большими светодиодными дисплеями, которые показывают время в формате, который вы можете прочитать с другого конца комнаты:

Термометр на Attiny85 и термопаре

thermocouplewater

Наноамперметр на Attiny84

nanocurrentmeter

В этой статье описывается простой измеритель слабых токов, который можно использовать для замера потребления в спящем режиме различных цифровых схем, в том числе и на микроконтроллерах. Он позволяет измерять токи от 30нА до 10 мкA с достаточной точностью, и собран на микроконтроллере ATtiny84 и нескольких других недорогих деталях.

Простой USB-осциллограф на Tiny45

Ниже представлен проект USB-осциллографа, который вы сможете собрать своими руками. Возможности USB-осциллографа минимальны, но для многих радиолюбительских задач вполне сойдет. Также, схема данного USB-осциллографа может использоваться как основа для построения более серьезных схем. В основе схемы стоит микроконтроллер Atmel Tiny45.

Анализатор спектра на Atmega32

Spectrum analizer mega32 photo

В статье описан небольшой анализатор аудиоспектра (0 - 10 кГц), состоящий из ЖК-дисплея 16x2 и микроконтроллера ATmega32. Используется простой алгоритм ДПФ (Дискретное Преобразование Фурье). БПФ (Быстрое Преобразование Фурье) отличается от ДПФ только большей скоростью но и более сложным алгоритмом.

Электронный замок с ключами iButton на AVR

domofon keys

Замок имеет простую конструкцию и предназначен в основном для индивидуального использования. Замок работает с любыми типами ключей iButton, поэтому можно применять уже имеющиеся ключи, предназначенные для других целей. Всего в память может быть записано до 9 ключей, хотя это количество можно легко увеличить. Для авторизации процесса программирования используется мастер-ключ, код которого занесен в ПЗУ и не может быть стерт или изменен обычной процедурой программирования замка.

Регуляторы мощности на AVR

Для управления инерционной нагрузкой часто применяются тиристорные регуляторы мощности, работающие по принципу подачи на нагрузку нескольких полупериодов сетевого напряжения с последующей паузой. Преимуществом таких регуляторов является то, что моменты коммутации тиристоров совпадают с моментами перехода сетевого напряжения через ноль, поэтому уровень радиопомех резко снижен. Кроме того, такой регулятор, в отличие от регулятора с фазовым управлением, не содержит аналоговых пороговых элементов, что увеличивает стабильность работы и упрощает настройку.

ШИМ-регулятор на ATtiny2313

PWMon2313 photo1

В этой статье описан проект ШИМ-контроллера для регулировки скорости вращения вентилятора. Для данного устройства использовался микроконтроллер Atmel Attiny2313.

Емкостный тач-сенсор на AVR

touchsensor photo

Схема емкостного датчика, представленная в этой статье может использоваться как сенсорная клавиатура. Емкостный сенсор реагирует на изменение емкости на электроде из-за приближения проводящего объекта, например, пальца.

Измеритель емкости на AVR

capmeter photo1

Этот измеритель емкости может измерять емкость конденсаторов с разрешением 1 пФ в нижнем конце диамазона. Максимальная измеряемая емкость - 10000 мкФ. Реальная точность не известна, но линейная ошибка лежит в пределах максимум 0.5 % , и обычно меньше 0.1% (получено измерением параллельно подключенных нескольких конденсаторов). Наибольшие затруднения возникают при измерении электролитических конденсаторов большой емкости.

Читайте также: