Attiny2313 программирование usb. ATTiny2313-дешевый и доступный

Описан простой эксперимент с подключением кнопки к AVR микроконтроллеру, разобрана не сложная программа на языке Си для обработки нажатий кнопки. Разберемся с особенностями подключения кнопки к портам МК, а также с методами считывания состояний кнопки на языке Си.

В предыдущих статьях были рассмотрены эксперименты со светодиодами, которые подключались к портам микроконтроллера, сконфигурированных на вывод (Output).

В этой статье мы подключим к микроконтроллеру кнопку, контакты которой при нажатии замыкаются, а при отжатии - размыкаются (замыкающая кнопка).

Принципиальная схема эксперимента

Для того чтобы можно было хоть как-то наблюдать и управлять чем-то с помощью кнопки мы подключим к микроконтроллеру еще два светодиода. Схемка очень простая, вот она:

Рис. 1. Принципиальная схема эксперимента с микроконтроллером ATtiny2313 и кнопкой.

Как видим, к двум портам PB0 и PB1 через ограничивающие резисторы подключены два светодиода, а к порту PD2 - кнопка и она также с ограничивающим резистором. Для подключения программатора к МК используется разъем Conn 1 (AVR-ISP), а для подключения схемы к отдельному источнику питания +5В предназначены два контакта - P1 и P2.

Рис. 2. Собранная на беспаечной макетной панели схема эксперимента с микроконтроллером и кнопкой.

Важно заметить что для безопасного использования порта с кнопкой, последовательно ей подключен резистор с сопротивлением на 1 КОм (можно подключить и на другое сопротивление 600 Ом - 2 КОм). Примите это как правило хорошего тона в работе с пинами, которое обережет порт МК от выхода из строя в случае ошибочной подачи на пин высокого уровня и при замкнутой кнопке.

Структура портов ввода-вывода в AVR микроконтроллерах

Пины микроконтроллера являются универсальными GPIO (General Purpose Input Output), к ним можно подключать как исполнительные устройства (индикаторы, силовые ключи), так и разнообразные цифровые датчики (кнопки, переключатели).

Несколько пинов в МК могут быть подключены к АЦП/ЦАП (Аналогово-Цифровой-Преобразователь и наоборот), с их помощью можно выполнять анализ и генерацию аналоговых сигналов. Обычные GPIO не умеют работать с аналоговыми сигналами, у них на входе/выходе может быть только 0 (0В) или 1 (+5В).

К каждому пину GPIO внутри микроконтроллера подключены несколько блоков и электронных компонентов, о которых полезно знать:

  • Между пином порта и каждой из шин питания (GND и VCC) подключено по диоду . Они используются для "гашения" кратковременных помех, скачков напряжения относительно пина и каждой из шин питания;
  • Также между пином и GND включен конденсатор . Точно не знаю зачем он нужен, возможно для защиты от помех, для предотвращения дребезга контактов при использовании кнопок и переключателей подключенных к пину, или еще для чего-то;
  • К каждому пину подключен электронный ключ с резистором - это подтяжка пина к напряжению источника питания (Pull-UP) . Данный электронный ключ включается программно и служит для установки по умолчанию высокого логического уровня 1 (+5В) при работе с пином в режиме ввода (Input);
  • Между пином и каждой из шин питания (GND и VCC) включены еще два электронных ключа (без резисторов), они нужны для установки на пине высокого (+5В) или низкого (0В) логического уровня при работе пина в режиме вывода (Output).

Для программного управления и конфигурирования каждого из портов применяются три специальных регистра, к примеру для порта "B":

  • DDRB - регистр (8 бит) для установки режимов работы пинов - на ввод или вывод. Осуществляется установкой соответствующих бит в регистре;
  • PORTB - регистр для управление состоянием пинов порта в режиме вывода - высокий или низкий уровень. Также используется в режиме ввода, применяется для включения подтягивающих резисторов (Pull-UP) и установки высокого уровня на входе по умолчанию;
  • PINB - регистр, который содержит логические состояния пинов в порте, используется для чтения значений портов, которые сконфигурированы в режиме ввода.

Более детально узнать об устройстве портов для конкретной модели микроконтроллера можно из его даташита, в разделе "I/O-Ports", также там могут быть приведены примеры кода на Си и Ассемблере для работы с портами.

Пин RESET в качестве порта ввода-вывода

Полезно знать что пин "RESET" микросхемы (у нас на схеме это пин под номером 1), который предназначен для сброса выполнения программы микроконтроллера (перезагрузки), также можно использовать для подключения кнопок, светодиодов и других устройств ввода-вывода, то есть он может быть превращен в обычный GPIO.

Это может быть полезно если у микросхемы не хватает пинов для вашей конструкции. Например при сборке какого-то устройства на чипе ATtiny13 (8 выводов, 2шт - питание, 5шт - порты ввода-вывода, 1шт -для RESET) у вас оказалось что не хватает одного пина для светодиода. Здесь может быть несколько вариантов решения проблемы:

  1. Перепрограммирование пина с RESET под порт ввода-вывода;
  2. Подключение светодиода к одному из соседних уже использованных пинов, применив некоторые хистросты в схемном решении и с учетом возможности его общего использования;
  3. Использование другого МК у которого больше пинов, например ATtiny2313.

Что из этих вариантов проще и дешевле по финансам/времени - судите по своему случаю.

Для превращения пина "RESET" в порт ввода-вывода придется изменить специальный фьюз - RSTDISBL (Reset Disable). Но прежде чем это сделать нужно помнить что после данной операции перепрограммировать микроконтроллер станет возможным только с применением высоковольтного программатора (на 12В), обычный USB ISP или другой программатор с питанием от 5В сделать свою работу уже не сможет.

Программа на Си

Итак, у нас есть одна кнопка и два светодиода которые подключены к микроконтроллеру, что же с ними можно сделать? - а сделаем мы вот что (алгоритм):

  1. После включения питания светодиоды будут мигать попеременно и с задержкой в 300 миллисекунд;
  2. При нажатии и удержании кнопки будет светиться только синий светодиод;
  3. После отжатия кнопки синий светодиод мигнет 3 раза с задержкой 500 миллисекунд, после чего светодиоды снова будут мигать поочередно и с задержкой 300 миллисекунд.

Пример реализации такого алгоритма на языке Си под AVR приведен ниже. Создадим новый файл для нашей программы и откроем его для редактирования:

Nano /tmp/avr-switch-test.c

Поместим следующий код в тело файла:

/* Эксперимент с кнопкой на ATtiny2313 * https://сайт */ #define F_CPU 1000000UL // Частота ядра = 1 МГц #include #include // -- Макросы для управления светодиодами -- #define LED_BLUE_ON PORTB |= (1 << PB0) // Засвечиваем синий диод #define LED_BLUE_OFF PORTB &= ~(1 << PB0) // Гасим синий диод #define LED_RED_ON PORTB |= (1 << PB1) // Засвечиваем красный диод #define LED_RED_OFF PORTB &= ~(1 << PB1) // Гасим красный диод // Основная программа void main(void) { DDRD |= (0 << PD2); // Пин 6 - на вход PORTD |= (1 << PD2); // Включаем подтягивающий (Pull-UP) резистор для пина 6 DDRB |= (1 << PB0); // Пин 12 - на вывод DDRB |= (1 << PB1); // пин 13 - на вывод // -- Бесконечный цикл -- while(1) { _delay_ms(300); // Задержка 300 мс LED_BLUE_ON; // Включаем синий диод LED_RED_OFF; // Гасим красный диод _delay_ms(300); LED_RED_ON; // Включаем красный диод LED_BLUE_OFF; // Гасим синий диод if(!(PIND & (1 << PD2))) { // Проверяем нажата ли кнопка _delay_ms(50); // Задержка 50 мс (дребезг контактов) LED_RED_OFF; LED_BLUE_ON; while(!(PIND & (1 << PD2))); // Ждем пока кнопка не будет отпущена _delay_ms(500); // Дальше мигаем синим диодом LED_BLUE_OFF; _delay_ms(500); LED_BLUE_ON; _delay_ms(500); LED_BLUE_OFF; _delay_ms(500); LED_BLUE_ON; _delay_ms(500); LED_BLUE_OFF; _delay_ms(200); } // Конец блока работы с кнопкой } // Конец блока с вечным циклом }

Первым делом мы задаем константу F_CPU , которая укажет компилятору рабочую частоту ядра микроконтроллера, это нужно чтобы некоторые подпрограммы и функции работали корректно. В нашем примере используется функция задержки по времени - "_delay_ms" из библиотеки "util/delay.h", которая просчитывает время затраченное на холостые такты, опираясь на значение в константе F_CPU.

Посмотреть код библиотеки "delay" для организации задержки по времени и в котором используется константа F_CPU, можно в GNU Linux при помощи любого текстового редактора, к примеру можно выполнить вот такую команду:

Nano /usr/lib/avr/include/util/delay.h

Заводская установленная частота внутреннего RC генератора в микроконтроллере ATtiny2313 равняется 8000000Гц (8МГц), также по умолчанию установлен фьюз деления частоты - CKDIV8 (Clock Divide by 8), поэтому реальная рабочая частота кристалла = 8000000Гц / 8 = 1000000Гц = 1МГц.

Посмотреть какие фьюзы установлены в микроконтроллере можно при помощи avrdude или же графической оболочке к нему под названием AVR8 Burn-O-Mat .

Дальше в программе определены макросы для управления состоянием портов к которым подключены светодиоды: LED_BLUE_ON, LED_BLUE_OFF, LED_RED_ON, LED_RED_OFF. Вызвав подобный макрос в любом месте программы мы очень просто можем зажечь или погасить каждый из светодиодов, не придется повторять его код, что в свою очередь упростит программу и сделает ее более наглядной.

В основной программе "void main(void)" мы начинаем работу с конфигурации портов:

  • DDRD |= (0 << PD2) - установка разряда PD2 регистра DDRD на ввод, к нему подключена кнопка (пин 6);
  • PORTD |= (1 << PD2) - включение подтягивающего резистора для пина к которому привязан разряд PD2 регистра PORTD (пин 6);
  • DDRB |= (1 << PB0) - установка разряда PB0 в регистре DDRB на вывод, к нему подключен СИНИЙ светодиод (пин 12);
  • DDRB |= (1 << PB1) - установка разряда PB1 в регистре DDRB на вывод, к нему подключен КРАСНЫЙ светодиод (пин 13).

Дальше, используя макросы, мы гасим красный светодиод и зажигаем синий. Теперь при помощи еще одного вечного цикла но у же с условием мы выполним ожидание до того момента, пока кнопка не будет отжата: "while(!(PIND & (1 << PD2)));".

При отжатой кнопке на пине 6 появится высокий уровень (это сделает внутренний подтягивающий резистор, который мы включили раньше), а в разряде PD2 регистра PIND будет установлена логическая 1.

После этого выполняется трехразовое мигание (включение-выключение) синего светодиода с задержкой в 0,5 секунды и основной вечный цикл начинает работу по новому - будут поочередно зажигаться два светодиода.

Очень простая программа, но тем не менее, она является хорошим примером и почвой для дальнейших экспериментов.

Настройка Geany под ATtiny2313

В предыдущих публикациях я проводил эксперименты с микроконтроллером ATMega8, здесь же используется менее "нафаршированный" МК - ATTiny2313.

Для компиляции программы и прошивки ее в МК следует немножко перенастроить команды для сборки в интегрированной среде программирования Geany.

Идем в меню Build - Set Build Commands. В команде для компиляции (C commands) нужно изменить модель применяемого чипа: "-mmcu=attiny2313". В команде для прошивки МК нужно изменить тип чипа для avrdude: "-p t2313".

Рис. 3. Перенастройка Geany для работы с микроконтроллером ATTiny2313.

Все команды приведены для ОС GNU Linux, если у вас Windows то возможно придется прописать полные пути к бинарным файлам "avr-gcc.exe", "avr-objcopy.exe", "avrdude.exe".

Более подробно о том как настроить Geany в GNU Linux я рассматривал в одной из предыдущих статей цикла.

Компиляция и прошивка программы в МК

Компиляцию, сборку и прошивку программы можно выполнить нажав в среде Geany поочередно три кнопки: "Compile", "Build" и "Run". Также все эти операции можно выполнить из консоли, вот команды для данных действий (выполнять последовательно):

Avr-gcc -mmcu=attiny2313 -Os /tmp/avr-switch-test.c -o /tmp/avr-switch-test.o avr-objcopy -j .text -j .data -O ihex /tmp/avr-switch-test.o /tmp/avr-switch-test.hex avrdude -c usbasp -p t2313 -P usb -U flash:w:/tmp/avr-switch-test.hex

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

Заключение

Несмотря на простоту эксперимента я также постарался осветить некоторые очень важные технические моменты работы с портами, приведенные знания и опыт будут полезны в дальнейшем изучении и работе с микроконтроллерами ATMEL.

Пример работы программатора AVR ISP USB L с микроконтроллером ATtiny 2313 A .

Введение

AVR ISP USB L является STK500 совместимым программатором и предназначен для программирования (совместно с программой AVR Studio) всех 8-разрядных микроконтроллеров с RISC-архитектурой серии AVR, обладающих возможностью внутрисхемного программирования (интерфейс ISP).

Характеристики AVR ISP USB L

Совместим с AVR Studio (AVR Studio 4.12 и более поздними версиями);

Поддерживает все 8-разрядные AVR микроконтроллеры с возможностью внутрисхемного программирования (интерфейс ISP);

Поддержка программирования Flash и EEPROM;

Поддержка программирования битов конфигурации (fuses ) и битов блокировки (lockbits);

Регулируемая скорость программирования (1.2кГц, 4.0кГц, 57.6 кГц, 115.2кГц, 460.8кГц и 1.845МГц частоты SCK);

Питание от шины USB, не требует внешнего источника питания;

Два напряжения питания процессора 3.3 В и 5.0 В (выбирается перемычкой);

Защита от короткого замыкания (самовосстанавливающийся предохранитель), допускается питать программируемый микроконтроллер в схеме, которая потребляет не более 50 мА.

Начальная подготовка к работе

Для начала работы с AVR ISP USB L выполните следующие шаги:

    Установите AVR Studio.

    Установите USB драйвер.

    Подключите AVR ISP USB L к компьютеру, компьютер должен обнаружить и автоматически

установить новое оборудование.

    С помощью диспетчера устройств определите номер виртуального компорта, который должен находится в приделах от (COM1) до (COM8) . Перенумеруйте компорт если его номер выше чем (COM8).

    Подключите микроконтроллер к программатору (в данном примере это ATtiny2313A-PU). Микроконтроллер используется новый, который ни разу не программировался.

Начало работы (проверка связи с программатором)

Запускаем AVR Studio и нажимаем кнопку () на панели инструментов, эта кнопка позволяет выбрать, к какому программатору и коммуникационному порту следует подключиться. Выбираем STK500 (внутрисхемный программатор AVR ISP USB L командно совместим с STK500) и

виртуальный компорт, в данном примере это (COM4). Нажимаем кнопку () :

Если программатор не будет найден (данный виртуальный порт не существует, программатор подключен к другому порту, программатор не подключен):

Внимание! Программатор может работать только с виртуальными портами от COM1 до COM8.

В случае успешного соединения появится окно:

Программатор успешно подключен, можно приступать непосредственно к программированию.

Программирование микроконтроллера (чтение байт сигнатуры)

После успешного соединения программатора и компьютера, проверим связь с микроконтроллером. Микроконтроллер ATtiny2313A должен быть подключен к программатору согласно схеме:

Наличие кварцевого резонатора необязательно, если планируется работать от встроенного RC-генератора.

Для проверки связи с микроконтроллером ATtiny2313A переходим на вкладку (Main).

Вкладка (Main) содержит две группы настроек:

    Device and Signature Bytes

    Programming Mode and Target Settings

Device and Signature Bytes (Устройство и Байты сигнатуры)

В этой группе располагаются две кнопки:

Кнопка (), при нажатии на которую выполняется полное стирание выбранного устройства. При этом стираются Flash и EEPROM, а также биты блокировки.

Кнопка (), при нажатии на которую выполняется чтение байт сигнатуры микроконтроллера.

Pr ogramming Mode and Target Settings (Режим программирования и частоты сигнала SCK)

В этой группе располагается одна кнопка (), при нажатии на которую появляется окно выбора частоты сигнала SCK.

У нового микроконтроллера ATtiny2313A тактовая частота равна 1МГц, следовательно, частота SCK должна быть не выше 250кГц. Ближайшая подходящая скорость 115.2 кГц. Конечно, можно программировать и на скорости SCK равной 4кГц, но тогда процесс программирования сильно затянется. Выбираем тактовую частоту 115.2кГц и нажимаем () для записи настройки. Настройка сохраняется в энергонезависимой памяти программатора:

В этой группе также располагается список режимов программирования, проследим, чтобы был выбран “ISP mode”. Режим ”PP/HVSP mode” данным программатором не поддерживается:

Непосредственно для чтения сигнатурных байтов, из выпадающего списка, выбирается нужный микроконтроллер, в нашем случае это ATtiny2313A:

Нажимаем кнопку (). Если связь с микроконтроллером отсутствует (неправильное подключение), появится окно “ISP Mode Error”:

Окно “ISP Mode Error” также может появится, если частота SCK завышена.

Частота сигнала SCK должна быть в четыре раза ниже тактовой частоты микроконтроллера!

В случае успешного чтения байт сигнатуры:

Непосредственно байты сигнатуры микроконтроллера ATtiny2313A (данные из документации на микроконтроллер) :

0x000: 0x1E (код производителя Atmel).

0x001: 0x91 (размер Flash памяти 2KB).

0x002: 0x0A (это микроконтроллер ATtiny2313/A, если байт 0x001 равен 0x91).

Связь с микроконтроллером установлена, приступаем к программированию битов конфигурации.

Программирование микроконтроллера (запись конфигурационных бит)

На вкладке (Fuses) представлены доступные для выбранного типа микроконтроллера (ATtiny2313A) конфигурационные биты.

Конфигурационными битами называют особую область памяти (3 байта) в AVR микроконтроллерах отвечающую за начальную (глобальную) конфигурацию. Этими битами мы указываем микроконтроллеру, с каким задающим генератором ему работать (внешним / внутренним), делить частоту генератора на коэффициент или не нужно, использовать ножку сброса как сброс или как дополнительный порт ввода-вывода, количество памяти для загрузчика и многое, многое другое. У каждого контроллера свой набор бит конфигурации. Все биты конфигурации прописаны в документации на микроконтроллер. С завода, по умолчанию, биты конфигурации выставлены для работы микроконтроллера от внутреннего задающего генератора. Ничего довешивать не нужно подал питание, и он работает. Если нужно как-то изменить работу микроконтроллера, например, заставить его работать от внешнего кварцевого резонатора, нужно изменить соответствующие биты.

Обратите внимание, что полное стирание микроконтроллера () не влияет на конфигурационные биты.

Описание конфигурационных бит микроконтроллера ATtiny2313A. Новый микроконтроллер имеет следующие настройки:

Внимание! Не выключайте бит SPIEN. Выключение этого бита, запретит последовательный режим программирования и микроконтроллер не будет отвечать.

Внимание! Не включайте бит RSTDISBL. В последовательном режиме программирования необходима нога RESET. Включение этого бита, выключит ногу RESET и микроконтроллер не будет отвечать.

Пример настроек бит конфигурации для нашего примера:

BODLEVEL - 2.7 вольт

CKDIV8 - выключен

По окончании установки настроек нажимаем кнопку ().

Успешное программирование оканчивается сообщением (поле внизу вкладки):

После записи настроек микроконтроллер работает от внутреннего RC-генератора частотой 8МГц. Порог срабатывания RESET – 2.7 вольта.

Программирование микроконтроллера (прошивка Flash и EEPROM)

До начала работы нужно скачать пример проекта на ассемблере (микроконтроллер ATtiny2313A) для AVR Studio. Ссылка: TEST _ ATtiny 2313 A _01. zip

Распакуйте архив в произвольную папку или корневой каталог. В данном примере это D:\TEST_ATtiny2313A_01\

Внимание! Имена папок и файлов должны быть только на латинице.

Для программирования Flash и EEPROM памяти микроконтроллера, переходим на вкладку (Program).

На этой вкладке нас интересуют следующие группы настроек:

Device (Устройство)

Flash (Память программы)

EEPROM (Энергонезависимая память)

Для непосредственного программирования указываем путь к *.hex и (при необходимости) к *.eep файлам.

Далее нажимаем кнопку (), которая находится в группе ”Flash”, если хотим запрограммировать Flash память микроконтроллера.

В случае успешного программирования Flash памяти микроконтроллера:

Также, в случае ошибки программирования Flash, появляется окно (нет связи с микроконтроллером или частота SCK завышена):

Для программирования EEPROM нажимаем кнопку (), которая находится в группе ”EEPROM”.

В случае успешного программирования EEPROM памяти микроконтроллера:

В случае ошибки программирования:

Также, в случае ошибки программирования EEPROM, появляется окно (нет связи с микроконтроллером или частота SCK завышена):

Дополнительно на вкладке (Program) присутствует группа настроек (ELF Production File Format ):

Файл с расширением.elf может содержать в себе содержимое обоих FLASH и EEPROM, а также биты конфигурации и блокировки. Этот формат удобен в использовании при производстве, когда нужно программировать большое количество микроконтроллеров одной прошивкой.

Чтобы создать *.elf файл нужно:

    Указать путь к *.hex файлу.

    Указать путь к *.eep файлу.

    Установить и запрограммировать биты конфигурации и защиты.

    Установить флажки.

Успешное сохранение *.elf файла оканчивается сообщением:

Для программирования микроконтроллера файлом *.elf нужно:

Программирование микроконтроллера (запись LockBits)

LockBits (Биты блокировки) – предназначены для защиты Flash и EEPROM памяти микроконтроллера от несанкционированного считывания. Биты защиты программируются последними. Для чтения и программирования защитных бит, переходим на вкладку (LockBits). Вкладка (LockBits) показывает какие режимы защиты программы доступны для выбора при заданном типе микроконтроллера. Биты защиты вычитываются из микроконтроллера и отображаются:

В нашем случае доступны три режима:

No memory lock features enabled” – биты защиты не установлены.

Further programming disabled – программирование микроконтроллера запрещено, чтение разрешено.

Further programming and verification disabled – программирование и чтение микроконтроллера запрещены.

Как только включен уровень защиты “Further programming and verification disabled”, понизить его выбором более низкой степени защиты “Further programming disabled” невозможно. Единственный способ удалить установленные биты блокировки – это выполнить полное стирание микроконтроллера, при этом Flash и EEPROM тоже стираются.

Дополнительные возможности (чтение калибровочного байта)

Байт калибровки содержит подстроечное значение, которое необходимо записать в регистр OSCCAL для настройки частоты внутреннего RC-генератора (если вы планируете еге использовать). Байт калибровки генератора записывается в микроконтроллер в процессе производства и не может быть стёрт или изменён пользователем.

    Oscillator Calibration Byte

В этой группе располагаются:

Для чтения содержимого калибровочного байта, из выпадающего списка, выбираем частоту RC-генератора 8 МГц и нажимаем ().

Значение калибровочного байта равно 0x60.

Значение калибровочного байта непосредственно из программы недоступно. Но при помощи программатора его можно записать в любую ячейку памяти микроконтроллера (Flash или EEPROM) и затем прочитать его из программы и записать в регистр OSCCAL.

Пример записи байта калибровки в EEPROM по адресу 20 (десятичное) для RC-генератора частотой 8МГц.

Из выпадающего списка выбираем () частоту RC-генератора 8 МГц. В текстовое поле “Address”” вводим 20. Устанавливаем переключатель (). Нажимаем кнопку ().

Успешная запись калибровочного байта оканчивается сообщением:

Дополнительные возможности (Автоматический режим)

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

После нажатия кнопки (), выполнится следующая последовательность операций:

“Erase Device” – стереть микроконтроллер.

“Program Flash” – запрограммировать Flash память.

“Verify Flash” – сравнить Flash и *.hex файл.

“Program EEPROM” – запрограммировать EEPROM память.

“Verify EEPROM” – сравнить EEPROM и *.eep файл.

“Program Fuses” – запрограммировать биты конфигурации.

“Verify Fuses” – сравнить биты конфигурации (с ранее установленными).

”Program lock bits” – запрограммировать биты защиты.

“Verify lock bits ” – сравнить биты защиты (с ранее установленными).

Внимание! Для первого программируемого микроконтроллера нужно установить биты конфигурации и биты защиты.

При необходимости в текстовый файл можно записать протокол выполнения команд, включив

флажок (), "Запись протокола в файл ". После установки флажка "Log to file " весь вывод от команд будет записываться в текстовый файл. Файл выбирается/создаётся нажатием кнопки "Browse " ("Обзор ") и выбором места, где он размещается или должен быть создан. Вывод будет сохраняться в этот файл и в последствии его можно будет посмотреть в текстовом редакторе.

Однажды настроенная, одна и та же последовательность программирования будет выполняться по каждому нажатию на кнопку ().

Дополнительные вкладки (HW Settings )

Вкладка (HW Settings) только для программатора STK500.

Дополнительные вкладки (HW Info )

Вкладка (HW Info) отображает версию прошивки программатора.

Микроконтроллер 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 масштабные проекты. В общем, неплохой высокопроизводительный контроллер для небольших проектов, не требующих особой периферии. В своих устройствах планирую использовать довольно широко по причине наилучшей доступности и дешевизны.

8 битный AVR микроконтроллер с 2 КБ программируемой в системе Flash памяти

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

  • 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:


Общее описание:

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, LPT порт (обязательно нужен железный, никакие USB-2-LPT не работают), несколько проводов (длиной не больше 10 см) и разумеется паяльник. Лучше, чтобы был разъём DB - 25M (папа), с его помощью будет гораздо удобней подсоединять микроконтроллер, но можете обойтись и без него. Припаиваете провода к выводам 1, 10, 17, 18, 19, 20 вашего микроконтроллера. Получится что то вроде этого, как на фотографии:

Затем, в случае если имеется разъём DB-25M, то припаяйте провода к нему в соответствии с таблицей, которая показана ниже. А если отсутствует, тогда просто втыкайте провода в разъём на компе.

Здесь делали без разъёма (просто под рукой были лишь только мамы), и вот что из этого вышло:

Здесь LPT порт был вынесен на стол при помощи кабеля длиной в 1.5 м. Кабель обязательно должен быть экранированный, в противном случае будут наводки, помехи и тогда ничего не выйдет. Схема данного устройства программирования микроконтроллера выглядит вот так:

Лучше конечно сделать «правильный» программатор, поскольку так будет проще и порт целее. В данном случае использовался STK200/300. Затем нужна программа PonyProg2000. После того, как программа запустится она «заржёт» прям как настоящий пони:). Для того, чтобы этот звук впредь не напрягал ваши уши нужно в появившемся окне поставить галочку «Disable sound». Нажмите «ОК». Выскочит окно, которое говорит о том, что необходимо откалибровать программу. Компьютеры же бывают разные, и медленные, и быстрые. Нажмите «ОК». Выскочит ещё одно окно, оно говорит, что необходимо произвести настройку интерфейса (какой программатор и куда подключён). Итак, теперь заходите в меню: Setup -> Calibration. В появившемся окне:

Жмите «YES». Пройдёт пара секунд и программа скажет «Calibration OK». Потом заходите в меню: Setup -> Interface Setup. В появившемся окне настраивайте, как это указано на рисунке.

Теперь заходите в меню: Command -> Program Options. В появившемся окне настраивайте, как это указано на рисунке.

Теперь всё готово для программирования! Итак, этапы действий:

  1. Выберите из списка «AVR micro»
  2. Из другого списка нужно выбрать «ATtiny2313»
  3. Теперь загружайте файл прошивки (File -> Open Device File), выбирайте нужный файл, к примеру «rm-1_full.hex».
  4. Жмите кнопку «Launch program cycle». Когда программирование закончится программа скажет «Program successful»
  5. И в завершении нужно запрограммировать так называемые Фьюзы (fuses). Для этого жмите кнопку «Security and Configuration Bits». В появившемся окошке жмите «Read», затем выставите галочки и нажмите «Write».

    ВНИМАНИЕ! В случае если вы не знаете, что значит тот или иной конфигурационный бит, тогда не трогайте его. Вот теперь наш контроллер ATtiny2313 к работе готов!

    Это всё. Всего вам доброго.