Attiny2313 программирование usb. Программирование attiny2313. Начальная подготовка к работе
Характеристики:
- AVR RISC архитектура
- AVR - высококачественная и низкопотребляющая RISC архитектура
120 команд, большинство которых выполняется за один тактовый цикл
32 8 битных рабочих регистра общего применения
Полностью статическая архитектура - ОЗУ и энергонезависимая память программ и данных
2 КБ самопрограммируемой в системе Flash памяти программы, способной выдержать 10 000 циклов записи/стирания
128 Байт программируемой в системе EEPROM памяти данных, способной выдержать 100 000 циклов записи/стирания
128 Байт встроенной SRAM памяти (статическое ОЗУ)
Программируемая защита от считывания Flash памяти программы и EEPROM памяти данных - Характеристики периферии
Один 8- разрядный таймер/счетчик с отдельным предделителем
Один 16-разрядный таймер/счетчик с отдельным предделителем, схемой сравнения, схемой захвата и двумя каналами ШИМ
Встроенный аналоговый компаратор
Программируемый сторожевой таймер со встроенным генератором
USI - универсальный последовательный интерфейс
Полнодуплексный UART - Специальные характеристики микроконтроллера
Встроенный отладчик debugWIRE
Внутрисистемное программирование через SPI порт
Внешние и внутренние источники прерывания
Режимы пониженного потребления Idle, Power-down и Standby
Усовершенствованная схема формирования сброса при включении
Программируемая схема обнаружения кратковременных пропаданий питания
Встроенный откалиброванный генератор - Порты ввода - вывода и корпусное исполнение
18 программируемых линий ввода - вывода
20 выводной PDIP, 20 выводной SOIC и 32 контактный MLF корпуса - Диапазон напряжения питания
от 1.8 до 5.5 В - Рабочая частота
0 - 16 МГц - Потребление
Активный режим:
300 мкА при частоте 1 МГц и напряжении питания 1.8 В
20 мкА при частоте 32 кГц и напряжении питания 1.8 В
Режим пониженного потребления
0.5 мкА при напряжении питания 1.8 В
Общее описание:
ATtiny2313 - низкопотребляющий 8 битный КМОП микроконтроллер с AVR RISC архитектурой. Выполняя команды за один цикл, ATtiny2313 достигает производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности.
AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.
ATtiny2313 имеет следующие характеристики: 2 КБ программируемой в системе Flash память программы, 128 байтную EEPROM память данных, 128 байтное SRAM (статическое ОЗУ), 18 линий ввода - вывода общего применения, 32 рабочих регистра общего назначения, однопроводный интерфейс для встроенного отладчика, два гибких таймера/счетчика со схемами сравнения, внутренние и внешние источники прерывания, последовательный программируемый USART, универсальный последовательный интерфейс с детектором стартового условия, программируемый сторожевой таймер со встроенным генератором и три программно инициализируемых режима пониженного потребления. В режиме Idle останавливается ядро, но ОЗУ, таймеры/счетчики и система прерываний продолжают функционировать. В режиме Power-down регистры сохраняют свое значение, но генератор останавливается, блокируя все функции прибора до следующего прерывания или аппаратного сброса. В Standby режиме задающий генератор работает, в то время как остальная часть прибора бездействует. Это позволяет очень быстро запустить микропроцессор, сохраняя при этом в режиме бездействия мощность.
Прибор изготовлен по высокоплотной энергонезависимой технологии изготовления памяти компании Atmel. Встроенная ISP Flash позволяет перепрограммировать память программы в системе через последовательный SPI интерфейс или обычным программатором энергонезависимой памяти. Объединив в одном кристалле 8- битное RISC ядро с самопрограммирующейся в системе Flash памятью, ATtiny2313 стал мощным микроконтроллером, который дает большую гибкость разработчика микропроцессорных систем.
ATtiny2313 поддерживается различными программными средствами и интегрированными средствами разработки, такими как компиляторы C, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и ознакомительные наборы.
Микроконтроллер ATTiny2313 является возрождением в новой серии старого микроконтроллера AT90S2313, который в свое время вышел довольно удачным. ATTiny2313 улучшенный вариант своего предка. Но он также унаследовал и довольно скромную периферию. Так что, в плане функциональности ATTiny2313 скромноват. Микроконтроллер выпускается в двух вариантах – обычном (ATTiny2313) и с пониженным питанием (ATTiny2313V ). За пониженное питание приходится платить понижением тактовой частоты микроконтроллера (более медленная работа).
Общие характеристики:
- 120 инструкций оптимизированных для программирования на языках высокого уровня;
- 32 регистра общего назначения (я тащусь от этого);
- почти каждая инструкция выполняется за 1 такт генератора, за счет чего быстродействие достигает 20 MIPS (20 миллионов операций за секунду);
- 2 килобайта флеш-памяти для программ. Флеш-память может программироваться прямо с контроллера (сама себя);
- 128 байт EEPROM (энергонезависимая память);
- 128 байт SRAM (оперативная память).
Что мы имеем на борту у этого чипа из периферии?
- один 8 битный таймер/счетчик;
- один 16 битный таймер/счетчик;
- четыре ШИМ канала;
- аналоговый компаратор;
- Watchdog таймер;
- USI универсальный последовательный интерфейс;
- USART (это компьютерный COM RS232).
Особые плюшки:
Питание, частота:
1.8 – 5.5В (для ATTiny2313V) до 10МГц
2.7 – 5.5В (для ATTiny2313) до 20МГц
В рабочем режиме потребляет 230 мкА при питании 1.8 В и частоте задающего генератора 1МГц. В режиме энергосбережения Power-down кушает меньше 1мкА при 1.8В
Программирование
ATTiny2313 умудрился пережить еще одну ревизию и обзавелся буковкой А
в конце. Из нововведений следует отметить:
— Появились внешние прерывания на всех ножках.
— Убрано разделение на обычное и низковольтное питание. ATTiny2313А может питаться от 1.8 до 5.5В, при этом лишь необходимо соблюдать ограничения по частоте от 4МГц (для 1.8В) до 20Мгц.
— Значительно уменьшено потребление тока, как в штатном режиме, так и в режимах энергосбережения – соответственно 190мкА и 0.1мкА.
Мало того, в результате последней ревизии — ATTiny2313 обзавелся старшим братом ATTiny4313 (без буковки А). Старший брат аналогичен ATTiny2313А за исключением в два раза увеличенной памяти (4 кбайт Flash, 256 байт EEPROM, 256 байт SRAM). Такие преобразования показывают намеренья Atmel продолжать поддерживать данный микроконтроллер.
По причине плохой доступности и непонятной цены новых версий ATTiny2313А и ATTiny4313 мои устройства будут разрабатываться на старом варианте ATTiny2313. Но так как новые версии совместимы со старыми то, теоретически, прошивки должны работать и на новых микроконтроллерах.
Выводы:
Как и все микроконтроллеры AVR серии ATTiny2313 производителен и экономичен. Имеет удобный для разводки платы и пайки корпус SOIC. Расстояния между ножками относительно большое (можно даже умудриться кинуть дорожку на плате между соседними ножками). Простой в изучении. Имеется много литературы на русском языке. Ввиду большой популярности предшественника AT90S2313 разработано много интересных схем в сети для повторения. Широко доступен в продаже. Недорог. Для начала изучения микроконтроллеров – самое то. Из недостатков стоит отметить довольно скромную периферию на сегодняшний день. И как обратная сторона достоинства — корпус SOIC немного великоват (хотя это я уже придираюсь). Небольшие объемы памяти не позволят сделать на ATTiny2313 масштабные проекты. В общем, неплохой высокопроизводительный контроллер для небольших проектов, не требующих особой периферии. В своих устройствах планирую использовать довольно широко по причине наилучшей доступности и дешевизны.
Сегодня мы попробовать воспользоваться более простым микроконтроллером ATtiny2313 и подключить к нему символьный дисплей LCD, содержащий две строки по 16 символов.
Дисплей мы будем подключать стандартным способом 4-битным способом.
Сначала начнём, конечно, с микроконтроллера, так как с дисплеем мы уже очень хорошо знакомы из предыдущих уроков.
Откроем даташит контроллера ATtiny2313 и посмотрим его распиновку
Мы видим, что данный контроллер существует в двух видах корпусов, но так как мне в руки он попал в корпусе DIP, то будем мы рассматривать именно эту версию корпуса, да и в принципе, они и не различаются особо, кроме чем по виду, так как количество ножек одинаково — по 20.
Так как ножек 20 по сравнению с 28 ножками контроллера ATMega8, к которым мы уже на протяжении всего времени занимаемся и ещё будем заниматься, то, соответственно, и возможностей также будет меньше.
В принципе, всё, что было у ATmega8, здесь есть, единственное то, что поменьше лапок портов. Но так как задача перед нами стоит попробовать соединить его по шине SPI с другим контроллеров, то нас это удручает не сильно.
Есть ещё некоторые отличия, но они незначительны и мы с ними познакомимся по мере необходимости.
Соберём вот такую вот схемку (нажмите на картинку для увеличения изображения)
Дисплей подключен к ножкам порта D. PD1 и PD2 — к управляющим входам, а остальные к ножкам модуля дисплея D4-D7.
Проект создадим с именем TINY2313_LCD, перенесём в него всё кроме главного модуля из проекта по подключению дисплея к Atmega8.
Конечно, некоторые вещи надо будет переделать. Для этого нужно внимательно изучить, к какой ножке что подключено. Шина E дисплея подключена к PD2, а шина RS — к PD1, поэтому внесём изменения в файл lcd.h
#define e1 PORTD |=0b000001 00 // установка линии E в 1
#define e0 PORTD &=0b111110 11 // установка линии E в 0
#define rs1 PORTD |=0b0000001 0 // установка линии RS в 1 (данные)
#define rs0 PORTD &=0b1111110 1 // установка линии RS в 0 (команда)
Как мы видим из выделения жирным шрифтом, не такие уж и кардинальные изменения у нас произошли.
Теперь информационные входы. Здесь у нас используются ножки PD3-PD6, то есть на 1 пункт сдвинуты по сравнению с подключением к Atmega8, поэтому исправим ещё и кое что в файле lcd.c в функии sendhalfbyte
PORTD &=0b1 0000 111; //стираем информацию на входах DB4-DB7, остальное не трогаем
Но это ещё не всё. Мы раньше передаваемые данные сдвигали на 4, а теперь нам в связи с вышеуказанными изменениями придётся их сдвигать только на 3. Поэтому в той же функции исправим ещё и самую первую строку
c <<=3 ;
Вот и все изменения. Согласитесь, не так уж они и велики! Это достигнуто тем, что мы всегда стараемся код писать универсальный и пользоваться именно макроподставновки. Если бы мы в своё время не потратили на это время, то нам пришлось бы исправлять код почти во всех функциях нашей библиотеки.
В главном модуле инициализацию порта D мы не трогаем, пусть весь встаёт в состояние выхода, как и в уроке 12.
Давайте попробуем собрать проект и посмотреть сначала результат в протеусе, так как для него я также сделал проект, который будет также находиться в приложенном архиве с проектом для Atmel Studio
У нас всё прекрасно работает! Вот как можно, оказывается быстро переделать проект для одного контроллера под другой.
Протеус — это очень хорошо, но на настоящие детальки посмотреть всегда приятнее. Схема вся была собрана на макетной плате, так как отладочной платы для данного контроллера я не делал и не собирал. Программатор мы подключим через стандартный разъём вот такой вот
Вот вся схема
Здесь всё стандартно. Подтягивающий резистор на RESET и т.д.
Теперь, прежде чем прошивать контроллер в avrdude, нам неоходимо выбрать контроллер и считать его флеш-память
Затем зайти во вкладки FUSES и установить правильно фьюзы. Так как у нас нет кварцевого резонатора, то мы устанавливаем фьюзы именно так
Как собрать простейшую схему, как подключить программатор к микроконтроллеру 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, теперь не отключая провода от нашей схемы, можно делать изменения в программе, и как описывалось выше прошивать микроконтроллер и сразу видеть результат.
Вопросы и комментарии оставляйте пожалуйста на нашем форуме