Программаторы. Как подключить, написать программу и прошить микроконтроллер ATtiny2313 Attiny2313 программирование usb

Рано или поздно перед разработчиком какого либо устройства на микроконтроллере появляется потребность в стыковке его с компьютером. Самое простое и очевидное решение — это заюзать COM или LPT порт компьютера. А как быть тем у кого нет COM и LPT ? Например владельцам ноутов? Решение есть! Встречайте этот чудесный девайс. Это преобразователь интерфейсов USB-UART.

Преобразователей подобного рода существует великое множество. Наибольшую популярность получили преобразователи FTDI. Они конечно хороши но у них есть три недостатка:

  • Стоимость . Например у нас FT232RL стоит 155 р. Довольно таки дорого
  • Корпус . Она жутко мелкая! Корпус SSOP-28 не для новичков.
  • Доступность. Достать её не так то просто. Во всяком случае у нас

Я предлагаю собрать аналогичный преобразователь на микроконтроллере Atmega8. Скажу сразу что схема и прошивка не моя. Я лишь разработал печатную плату и доработал схему. (добавил стабилитроны на 3.3 в). Итак схема:

Как видно, схема особой сложности не представляет. Хочу обратить внимание на то что нумерация указанная на схем подходит только для микроконтроллера в DIP корпусе. Я же использовал TQFP для экономии места. Получилось у меня примерно следующее:

AVR-CDC предназначена для конвертации RS232 и USB данных с применением AVR-микроконтроллеров, без использования какого-либо специализированного USB-чипа. Данная технология основывается на Object Deveopment"s V-USB (Software-USB на AVR), и CDC (Communication Device Class) протоколах. AVR-CDC позволяет компьютеру взаимодействовать с USB-устройствами через виртуальный COM-порт. В этом проекте я хочу привести несколько вариантов реализации виртуального COM-порта на AVR-микроконтроллерах.

CDC-232 создает виртуальный COM-порт на ПК, который не имеет физического порта RS- 232C. Он обеспечивает соединение RS-232C (без управляющих линий) после подключения устройства и установки драйвера.

Использование

Запишите программу в AVR, соберите схему и подсоедините устройство к USB порту ПК. Установите драйвер под ОС Windows. Подключитесь к устройству через появившийся виртуальный COM-порт с помощью программного обеспечения терминала или вашего приложения. Управляющие линии (DTR, DTS, RTS, CTS) не используются хост приложением. Запрограммируйте терминальное приложение как "no flow-control" (без управления потоками данных).

ОС Windows повторно запросит установку драйвера при подключении к другому USB порту. Далле произойдет автоматическое обнаружение ранее установленного драйвера. После этого будет назначен другой номер COM-порта. Если вы введете номер последовательного порта в AVR (обновите с измененным файлом usbconfig.h), тогда вы получите тот же самый COM-порт на любом USB порте. Однако нельзя подключить несколько CDC устройств к одному и тому же последовательному порту.

Перед отключением устройства закройте вручную COM-порт с помощью программного обеспечения терминала или вашего приложения. В противном случае вы не сможете подключиться к устройству снова из-за повреждения индекса файла. Далее перезапустите программное обеспечение терминала или ваше приложение. Переключитесь в режим быстрой передачи, используя файл "lowcdc.vbs". Это позволит получить скорость передачи данных выше, чем 9600 бит/сек.

Циклический тест для версии ATtiny45

Схемные решения

Данные схемы предназначены для ATtiny45/85, ATtiny2313/AT90S2313, и ATmega8/48/88/168. Их микропрограммное обеспечение можно загружать через ISP-разъем. Красный светодиод понижает USB напряжение с 5В до 3.3В, затем оно подается на AVR. Ток составляет около 10мА, и его недостаточно для управления другой схемой. При подключении к другому микроконтроллеру, подсоедините вывод Gnd, а также перекрестно TxD и RxD. R4 ограничивает утечку тока, когда напряжение питания микроконтроллера Vcc составляет 5В. Резистор можно не использовать, если Vcc совпадает. R5 защищает вывод TxD, если он будет закорочен на Gnd. Поэтому вы можете не использовать оба резистора R4 и R5, если подключитесь к RS- 232C драйверу через MAX232. Используйте кварцевый генератор. Хотя керамический резонатор отлично работает в большинстве случаев, он становится нестабильным, когда отклонение частоты увеличивается.

ATtiny45/85 использует внутренний RC-генератор и PLL. Он калибруется USB сигналом при подключении устройства. Универсальный асинхронный интерфейс UART реализован программным методом. Этого недостаточно для скоростной передачи данных. Если TxD и RxD инверсные (обновите с помощью опции DUART_INVERT), вы сможете напрямую подключаться к линии RS-232C. Скорость 1200 – 4800бит/сек, протокол 8N1.


Пример ATtiny45 при использовании мини-B коннектора

ATtiny2313/AT90S2313 имеет программную память величиной 2кБ. Хотя скорость передачи данных конфигурируется автоматически, некоторые функции не используются. Скорость 600 – 38400бит/сек, протокол 8N1.


CDC-232 для ATtiny2313-20

Внутренний Универсальный асинхронный интерфейс UART ATmega8/48/88 конфигурируется с помощью ПК. Поддерживается управление потоком данных (RTS/CTS).

Скорость 600 – 38400бит/сек, данные 7/8, контроль по четности N/E/O, стоп 1/2.


Подключение к RS-232C каналу требует инвертирования полярности и подбора уровня TxD и RxD. Используйте выделенную ИС, такую как MAX232. Вы сможете заменить ей эту простую схему.

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

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
CDC-232 для ATtiny45
U1 МК AVR 8-бит

ATtiny45

1 В блокнот
LED1 Светодиод Красный 1 В блокнот
R1 Резистор

1.5 кОм

1 В блокнот
R2, R3 Резистор

68 Ом

2 В блокнот
R4 Резистор

10 кОм

1 В блокнот
R5 Резистор

470 Ом

1 В блокнот
C1 Конденсатор 0.1 мкФ 1 В блокнот
CN1 USB-коннектор XM7B-0442 1 В блокнот
CDC-232 для ATtiny2313
U1 МК AVR 8-бит

ATtiny2313

1 В блокнот
LED1 Светодиод Красный 1 В блокнот
R1 Резистор

1.5 кОм

1 В блокнот
R2, R3 Резистор

68 Ом

2 В блокнот
R4 Резистор

10 кОм

1 В блокнот
R5 Резистор

470 Ом

1 В блокнот
C1, C2 Конденсатор 18 пФ 2 В блокнот
C3 Конденсатор 0.1 мкФ 1 В блокнот
X1 Кварцевый резонатор 12 Мгц 1 В блокнот
CN1 USB-коннектор XM7B-0442 1 В блокнот
CDC-232 для ATmega8/48/88
U1 МК AVR 8-бит

ATmega8

1 В блокнот
LED1 Светодиод Красный 1 В блокнот
R1 Резистор

1.5 кОм

1 В блокнот
R2, R3 Резистор

68 Ом

2 В блокнот
R4 Резистор

10 кОм

1 В блокнот
R5 Резистор

470 Ом

1 В блокнот
C1, C2 Конденсатор 18 пФ 2 В блокнот
C3 Конденсатор 0.1 мкФ 1 В блокнот
X1 Кварцевый резонатор 12 Мгц 1 В блокнот
CN1 USB-коннектор XM7B-0442 1 В блокнот
Подключение к RS-232C каналу
Q1 Биполярный транзистор

Обновлено 19.09.2015. Всем привет. В прошлой статье мы с Вами рассмотрели устойство для восстановления микроконтроллеров Atmega fusebit doctor (Шаг №7). Сегодня мы рассмотрим еще одно не менее важное а даже более полезное устройство UART-USB преобразователь на микроконтроллере ATtiny2313. Если Вы увлекаетесь электроникой и прикладным программированием, то данный девайс станет вашим верным инструментом для наладки проектируемого устройства и передачи данных на компьютер. Что такое интерфейс UART Вы можете ознакомится в статье № 40. А вот сам преобразователь нам необходим что бы мы смогли связать ПК и наше устройство, для наладки и передачи данных. Такая необходимость всегда возникает перед разработчиком, так что будьте готовы обзавестись ним. Конечно очень просто передать на COM порт (RS232) или LPT, но не у всех есть данный порт например ноутбуки.

Есть много преобразователей, например на схеме MAX232 (RS232-UART) и другие. Но мы с Вами рассмотрим преобразователь на микроконтроллере. Если Вы увлекаетесь электроникой и прикладным программированием, то данный девайс станет вашим верным инструментом. Ниже приведена схема преобразователя. Даная схема и драйвера были взяты из следующего ресурса http://www.recursion.jp/prose/avrcdc/ , где описываются различные варианты передачи данных на ПК, а также драйверы и открытые исходники предоставленные неким автором Osamu Tamura.

Слева UART - USB преобразователь. Как видим из схемы на ней линии передачи/приема данных TXD/RXD, резисторы R4 — ограничитель тока, R5 — защита TXD от короткого на землю, стабилитроны на схеме для защиты сигнальных линий, резистор R1 – питание на линии, С3 – сглаживает помехи, R2 R3 — токоограничители. Сам микроконтроллер ATtiny2313 в роли преобразователя. Скорость передачи конфигурируется автоматически и равняется от 600 — 38400bps, стандарт протокола 8N1. Сборка не представляет сложности все исходники, шаблоны платы, все в свободном доступе на данном ресурсе. Ниже представлены фото моей сборки этого девайса:

На схеме присутствует интерфейс для внутрисхемного программирования (5-ть штырьков внизу и 1 возле микроконтроллера).

Добавлю инфомацию, от себя для проверки на работоспособность некоторых деталей:
- стабилитрон, для его проверки на целостность анод на минус, — плюс через 10кОм на катод, подаем 5 В – должны получитьь заданное падение напряжения;
- проверяем генератор тактовой частоты – здесь необходимо в микроконтроллере выставит фьюз CKOUT,т.е. разрешить выводить меандр задающего генератора на ножу 6 (мк ATtiny2313 – PD2). Меряем частоту. Также можно измерить напряжение, которое должн быть = половине питания = 2,86В. (у меня было так). Помните мк работает от внешнего генератора, поэтому заливаете сначала программу, а потом меняете фьюзы на внешний генератор.

Дальнейший шаг наладки этого устройства – установить драйвер на компьютер — «Virtual Communications Port» для Win — качаем архив avrcdc_inf.zip. В даном архиве 4-ри папки: raw - для (Windows 2000/XP), w2k - для Windows 2000 (bulk mode only), xpvista7 - для Windows XP/Vista/7 x32, vista64 - для Windows Vista x64. Драйвер выбирается после подключения нашего устройства. Вообщем стандартная схема. Далее для загрузки прошивки в наш контроллер качаем cdc232.2011-06-24.zip, где и выбираем прошивку под наш контроллер. Выставляем фьюзы H = 0xCD, L=0xFF. Все готово. Ниже схема взаимодействия преобразователя и ПК.

Устройство работате следующем образом: при подключении к ПК появляется виртуальный COM- порт. Далее происходит передача по интерфейсу RS232C , без упраляющих линий DTR, DTS, RTS, CTS.
После этого необходимо проверить работоспособность с помощью программы Terminal — качаем там же. Результат работы преобразователя можно просмотреть на примере с DoctorAVR и контроллера сбора данных (логгера).

В следующей статье№9 рассмотрим основу работы барьера на микроконтролере, программную и аппаратную часть. На этом все. Всем пока.

И, так как все равно решил травить новую, было принято решение внести изменения в разводку платы.

Что нового в измененной разводке?
1 Появился светодиод, светящийся при подключении к USB. Отсутствие какой либо индикации подключения очень напрягало.
2 Появилась возможность подтянуть ножку сброса к плюсу питания. Конечно, сброс можно подтянуть и внутренним резистором, но для очень «шумных» условий, я думаю, будет не лишним подтянуть внешним резистором (5-10 кОм).
3 Сделав плату немного шире, добавил к выходному разъему «землю» и плюс 5 вольт от USB. Если внешнее устройство необходимо будет запитать от USB, будет удобно это делать с одного разъема.
4 Ножки 11, 12, 13 выведены на отдельные площадки. Это сделано для того, чтобы плату можно было использовать как универсальную для различных устройств с использованием USB (термометры, даталогеры, устройства управления, сигнализации и т.д.).

Все остальное (прошивка, фьюзы, драйвер) осталось прежними.

Думаю не лишним будет еще раз описать процедуру установки драйвера и работу с преобразователем.

Этот преобразователь взят с сайта www.recursion.jp/avrcdc/ . Я немного модифицировал оригинальную схему, добавил стабилитроны в линии USB, что улучшило совместимость с подключаемыми схемами. На схеме красным показаны изменения.

1 Печатная плата односторонняя . Перемычка всего одна — для подтяжки ножки сброса — можно не ставить. Предусмотрены дополнительные площадки для того, чтобы перемычками можно было изменять схему под другие устройства с USB.

Рисунок печатной платы UART-USB на ATtiny2313

Готовая плата имеет вот такой вид:

2 Далее нужно прошить микроконтроллер. Программатор подключается прямо на разъем. Штырек сброса Рядом с UART разъмом. При программировании преобразователь нужно запитать напряжением 5v от внешнего источника. Через USB нежелательно.

Прошивка преобразователя UART to USB для ATtiny2313
- Фьюзы для микроконтроллера ATtiny2313 (преобразователь UART to USB)

3 После того как устройство собрано и прошито необходимо установить драйвер виртуального COM порта.
Качаем архив и выбираем нужный драйвер
- Драйвер «Virtual Communications Port» для Win
В архиве есть папки для разных Win:
/raw — для (Windows 2000/XP)
/w2k — для Windows 2000 (bulk mode only)
/xpvista7 — для Windows XP/Vista/7 x32
/vista64 — для Windows Vista x64 (так же работает и на Win7 x64)

Установить драйвер очень просто:


3.1 Вставляем «флешку-преобразователь» в USB порт;


3.2 Получаем в трее сообщение о том, что найдено новое устройство «USB-232»;


3.3 Запустится «Мастер нового оборудования», выбираем «Установка из указанного места», жмем «Далее»;


3.4 Выбираем «Включить следующее место для поиска» и в окошке указываем нужный путь к выбранному драйверу;
3.5 Жмем «Далее», драйвер установится, жмем «Готово»

Теперь в «Свойствах» «Моего компьютера» в закладке «Оборудование» нажимаем кнопку «Диспетчер устройств». В окошке диспетчера устройств в разделе «Порты (COM и LPT)» увидим новое устройство — «Virtual Communications Port (COM5)» — это и есть наш виртуальный COM порт.


Для каждого USB порта будет назначен свой виртуальный COM порт (COM5, COM6, COM7 и т.д.).

4 Готово! Теперь можно пользоваться преобразователем.

Проверим работоспособность преобразователя, для этого нужно закоротить вход с выходом (RxD, TxD) и посылать с компьютера сообщения по виртуальному порту. Посланные сообщения должны возвращаться как принятые.

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

Первым делом нам нужен программатор, разновидностей программаторов много, какой программатор выбрать?
Есть обычные программаторы в который нужно вставлять микроконтроллер, прошивать, вынимать микроконтроллер и потом вставлять его в нашу плату, чтобы увидеть результат и эту последовательность придется делать первое время сотни раз, этот вариант на мой взгляд не удобный.
Наш микроконтроллер ATtiny2313 поддерживает функцию внутрисхемного программирования ISP (In-System Programming) через SPI порт, этот вариант использования внутрисхемного программирования ISP на мой взгляд самый удобный и быстрый, т.к. микроконтроллер из нашей платы вынимать не нужно после каждой прошивки, можно программировать микроконтроллер сотни раз и сразу же не отключая программатор от компьютера и платы, видеть результат после прошивки микроконтроллера, процесс отладки программного обеспечения радиолюбительского устройства заметно упрощается и сокращается затрачиваемое на это время.
Внутрисхемный программатор ISP можно сделать самому, в интернете есть множество простых схем как это делается через LPT,COM порт, например программатор PonyProg в интернете можно найти схемы как его сделать.

В данной статье будет рассматриваться работа с внутрисхемным ISP программатором для микроконтроллеров AVR (PX-400) он работает через COM порт.
Если у вас нет COM порта в компьютере, нужен будет еще переходник с USB порта на COM порт, переходников таких тоже много разновидностей, я рекомендую переходник с которым я работал: UCON-232S USB to Serial port converter board
Фото программатора PX-400 , переходника UCON-232S USB , Datasheet ATTiny2313

Разберем подробнее все детали данной схемы:
(На всякий случай, все детали, программатор, переходик (с USB на COM порт) я покупал в chipdip.ru)

1 - PBD-20 гнездо на плату 2.54мм 2х10 прямое - Это я сделал для удобства, чтобы проще было проверять сигналы с выводов микроконтроллера, этот пункт можно было не делать.
2 - SCS-20 DIP панель 20 контактов - панель припаиваем к плате, чтобы была возможность заменить микроконтроллер в плате если потребуется,
ATtiny2313-20PU, DIP20, МCU, 5V, 1K-Flash, 12MHz - Микроконтроллер вставляем в DIP панель.
3 - Кварцевый резонатор 4.000 МГц (усечен.) HC-49S - Кварцевый резонатор 4 МГц
4 - Керамический конденсатор К10-17Б имп. 22пФ NPO,5%,0805 - Два керамических конденсатора по 22пФ
5 - 78M05 (+5В, 0.5А) TO220 - Стабилизатор напряжения 5В, подает на микроконтроллер стабилизированное питание не более +5В, в данном случае у меня получилось 4,4В, этого вполне хаватает.
6 - NP-116 штекер питания 1.3х3.4х9.5мм MP-331 (7-0026c) - Штекер питания припаял к старому зарядному устройству от мобильного телефона DC 5.7V/800mA
7 - DS-213 гнездо питания на плату - гдездо питания для штекера NP-116, для удобства подключения питания
8 - IDC-10MS (BH-10), вилка прямая - Вилка для подключения внутрисхемного ISP программатора
9 - Резистор постоянный 0,25Вт 150 Ом - Три резистора по 150 Ом на выводы MISO,SCK,MOSI
10 - Резистор постоянный 0,25Вт 47 Ом - Один резистора 47 Ом на вывод RESET
11 - Кнопка тактовая h=5мм, TC-0103 (TS-A2PS-130) - Кнопка сброса RESET, после нажатия на кнопку программа в микроконтроллере запускается с начала, кнопку можно было не делать.
12 - Светодиод зеленый d=3мм, 2.5В, 2мА - Выполняет функцию индикатора, этот пункт можно было не делать.
13 - Резистор постоянный 0,25Вт 110 Ом - Резистор для светодиода, чтобы на светодиоде было 2В, этот пункт можно было не делать
14 - Два провода подключенные к светодиоду, для проверки сигналов с выводов микроконтроллера, этот пункт можно было не делать
15 - Дип-Рм печатная макетная плата 100х100мм

Пункты 3 и 4 Работают как единое целое, как внешний тактовый генератор,эти пункты можно не делать, если вы не предъявляете высоких требований к точности и стабильности внутреннего RC-Генератора, внутренний RC-Генератор имеет погрешность около 10% и на точность может влиять изменение температуры.

Итак, вы скачали и установили Atmel Studio :
Запускаем Atmel Studio и напишем простейшую программу на языке Си мигание светодиодом:
Нажимаем: New project... \ AVR GCC \ C \ C Executable Project
Указываем папку где сохранить проект и название проекта например Test1 и нажимаем ОК.
Из списка выбираем наш микроконтроллер ATtiny2313 и нажимаем ОК.
Стираем все что появилось в окне и вставляем наш код программы который ниже:

#define F_CPU 4000000L //Указываем частоту нашего внешнего кварца 4 МГц
#include
#include
int main(void)
{
//Устанавливаем все выводы PORTB как выходы
DDRB=0xFF;//Регистр направления передачи информации (1-выход, 0-вход)
while(1)
{
//Регистр данных PORTB (используется для вывода информации)
PORTB=0b00000001;//Подаем 1 на 12 порт МК PB0 - включаем светодиод
PORTB=0b00000000;//Подаем 0 на 12 порт МК PB0 - выключаем светодиод
_delay_ms(1000);//Задержка 1 сек.
}
}

Заходим в меню Build \ Configuration manager \ Active solution configuration \
Выбираем Release , нажимаем Close
Это мы сделали для того, чтобы у нас появилась в проекте папка Release , о которой я расскажу ниже.

Нажимаем F7 , готово, наше приложение откомпилировалось!
Для прошивки микроконтроллера ATtiny2313 нам нужен только один файл с расширением HEX
Он находится в папке нашего проекта: ...
Обратите внимание, файл Test1.hex нуно взять именно из папки Release !
Не перепутайте, т.к. папке Debug лежит тоже файл Test1.hex , но в этом файле еще содержится отладочная информация и из-за этого вы прошить этим файлом не сможете т.к. он обычно бывает большого размера и не поместится в памяти МК.

Файл.hex нашли, теперь нужна программа для прошивки микроконтроллера ATtiny2313, программ таких много, но мы воспользуемся программой: Avr-Osp II
Скачать:

Подключаем программатор к нашей схеме, на схему обязательно подаем питание!

Запускаем программу Avr-Osp II , указываем в разделе FLASH путь к файлу...\Test1\Test1\Release\Test1.hex ,устанавливаем галочки в программе и нажимаем кнопку Program вот и все, микроконтроллер ATtiny2313 прошит!

В чем приемущество внутрисхемных программаторов ISP, теперь не отключая провода от нашей схемы, можно делать изменения в программе, и как описывалось выше прошивать микроконтроллер и сразу видеть результат.

Вопросы и комментарии оставляйте пожалуйста на нашем форуме