Программирование attiny2313 через com порт. Программирование Attiny2313

23.12.2023

Среди радиолюбителей вот уже несколько лет заслуженной популярностью пользуются микроконтроллеры Atmel AVR. Особенностью этих МК является то, что записать «прошивку» в них можно как в параллельном, так и в последовательном режиме.

Восстановление конфигурации Fuse-битов ATtiny13

В радиолюбительской практике наибольшее распространение получили последовательные (SPI — Serial Peripheral Interface) программаторы, имеющие ряд достоинств: их схемы, как правило, проще, чем у параллельных программаторов (в крайнем случае, можно обойтись даже пятью проводниками и двумя резисторами); имеется множество вариантов как самих программаторов, так и управляющих программ под различные ОС; для подключения программатора можно выбрать практически любой порт компьютера — существуют схемы как LPT и СОМ, так и USB-программаторов. К тому же, такой программатор позволяет «прошить» МК, не выпаивая его из устройства (ISP — In System Programmable).

Тем не менее, SPI-режим программирования является, все-таки, урезанным; и некоторые возможности полноценного параллельного программирования в нем не доступны. Наиболее распространенной проблемой последовательного программирования считается невозможность произвести какие-либо действия с МК, если определенные fuse-ячейки этого МК были изменены относительно значений по умолчанию, — в таком случае чип «объявляет забастовку», и не выходит на связь с компьютером: его уже нельзя ни прочитать, ни «прошить» последовательным программатором. И он кажется вышедшим из строя, при этом программа PonyProg, например, выдает такое вот сообщение об ошибке: «Device missing or unknown device (-24), хотя в конечной схеме этот МК может работать вполне нормально.

Причиной такой «необщительности» может быть, к примеру, установка в ноль (а ноль в fuse-битах у AVR означает, что данный бит запрограммирован) бита RSTDISBL — что приводит к отключению внешнего входа сброса и превращению его в обычную линию ввода-вывода; а без внешнего сброса МК не сможет войти в SPI-режим программирования, и будет недоступен для ПК. Еще одна причина, по которой МК становится «невидимым» для SPI-программатора — отсутствие тактирования: fuse-биты, управляющие тактовым генератором (CKSEL0-3), могут быть установлены таким образом, что МК отключит внутренние цепи тактирования и будет требовать внешнего генератора — источника тактовых импульсов; а без тактирования SPI-программирование невозможно.

Причем, неправильно «зашитые» fuse- байты могут быть следствием не только невнимательности или незнания — вполне вероятны также и аппаратные сбои при «прошивании», особенно если «шьют» через одну из вариаций на тему «пяти проводков» — поэтому, от «впавших в кому» МК, лежащих на полке и ожидающих чудесного исцеления, не застрахован никто (а если верить интернету, то через это прошел чуть ли не каждый второй любитель AVR — причем, не обязательно из новичков).

Если же такая неприятность все-таки произошла, и МК перестал устанавливать связь с компьютером, то исправить неправильно выставленные fuse-байты с помощью последовательного программатора уже не удастся. Тем не менее, вовсе не обязательно делать или приобретать новый параллельный программатор (или, тем более, отладочный комплект) только для того, чтобы «вылечить» пару «коматозных» МК, тем более, если старый SPI- программатор вполне устраивает — для этого удобнее воспользоваться простым устройством, схема которого приведена на сайте

Прибор предназначен для «лечения» МК ATtiny2313, но может быть переделан и для любой другой модели AVR — как Tiny, так и Меда — для чего прилагается хорошо закомментированный «исходник» микропрограммы, что дает возможность переписать ее применительно к тому МК, которому в данный момент требуется «скорая помощь». Суть работы такого устройства заключается в том, «пациента» в режим параллельного программирования, и эмулировать на его линиях те сигналы «настоящего» программатора, которые отвечают за изменение состояния fuse-ячеек; а затем записать в этот МК значения fuse-ячеек по умолчанию.

Данное устройство выставляет заводские значения для всех fuse-байтов: старшего, младшего и дополнительного; а вдобавок еще и стирает у «пациента» память программ и данных — в результате чего он приобретает состояние «чистой» микросхемы. В радиолюбительской литера-туре и интернете уже описывались подобные устройства (под названиями Fuse Doctor, AVR Doctor, AVR Reanimator, AVR Айболит и т.п.), но данное обладает несколькими особенностями, делающими работу с ним немного приятнее. Во-первых, во всех известных автору конструкциях «доктор» и «пациент» подключались друг к другу, практически, «нога к ноге» (за исключением некоторых выводов, которые у «доктора» и «пациента», согласно схеме, не должны соединяться).

То есть, линии РВ0-РВ7 — к линиям РВ0-РВ7, линия PD6 — к линии PD6 и Т.Д- Что, в случае сборки схемы печатным способом, значительно усложняло монтаж — требовалось множество перемычек, или же двухсторонняя разводка (правда, некоторые авторы предлагали просто устанавливать микросхемы друг на друга, отгибая не соединяемые выводы в сторону и паяя на них резисторы/проводники; но надежность контакта при такой вот «микроконтроллерной камасутре» ставится под сомнение; а к чему приводит отгибание-загибание выводов у микросхем, мы все прекрасно знаем). Здесь же микросхемы расположены как бы «бок об бок», «валетом», что делает разводку печатной платы очень простой.

В авторском варианте, который приведен на рис.2, она во многом повторяет принципиальную схему, и содержит всего три небольшие перемычки. Размер платы — 60×60 мм. Во-вторых, некоторые устройства требовали двух напряжений: 5 В — для питания МК, и 12 В — на линию reset «пациента», для ввода в режим программирования. Этой схеме требуется только одно напряжение, которое может иметь разброс в достаточно широких пределах — главное, чтобы оно было не менее 12 В. В-третьих, большинство описанных устройств не допускают «горячей» замены «пациентов» в случае, если нужно «вылечить» несколько МК подряд — после каждого «прошивания» у них нужно отключить питание, заменить «больного», затем включить питание вновь и т.д. Данное устройство устанавливает все выходы в лог.

О после каждого «прошивания», что позволяет «лечить» микросхемы «конвейером» — подключил питание, установил «пациента», нажал на кнопку «старт», посмотрел результат «лечения» по HL1, снял, вставил нового «пациента», нажал, глянул HL1, снял, вставил и т.д. И все это без отключения питания (хоть «палатку» на радиорынке открывай!). Ну и, в-четвертых, часто в подобных устройствах отсутствует верификация записанных fuse- битов и индикация результата «лечения» (по типу «удачно/неудачно»).

В данной конструкции верификация предусмотрена, а для индикации ее результатов служит светодиод HL1, который может иметь три состояния:

  1. Горит непрерывно — программирование «пациента» прошло
    успешно, прочитанные fuse-байты соответствуют записанным;
    устройство ожидает очередного «пациента»;
  2. Мигает с частотой 2Гц — ошибка в
    программировании «пациента»:
    прочитанные fuse-байты не совпадают с записанными; «пациент» не вошел в режим программирования, не установлен или неисправен (в
    программе предусмотрена проверка на наличие «пациента» — исправный AVR устанавливает лог.1 на линии BSV/RDY (вывод 3 для ATtiny2313) при вхождении в режим параллельного программирования); устройство ожидает очередного
    «пациента»;
  3. Не ГОРИТ — идет процесс программирования и верификации. Программирование исправного «пациента» длится менее секунды, и это состояние светодиода в нормальных условиях не должно быть заметно. Если же светодиод находится в погашенном состоянии относительно долго, то, скорее всего, процесс «прошивания» зациклился из-за того, что неисправный «пациент» завис в режиме записи и не выставляет сигнал готовности BSY/RDY, ожидаемый «доктором».

Как уже было сказано, устройство является достаточно универсальным, и применимо для «лечения» практически любого МК серии AVR. При этом вовсе не обязательно изготавливать по отдельному экземпляру устройства для различных микроконтроллеров, отличающихся числом и расположением выводов — достаточно просто добавлять, по мере необходимости, переходники под цоколевку очередного «заболевшего», и переписывать соответствующим образом управляющую программу. Переходник представляет собой панельку DIP-20, которая вставляется своими «ножками» в панель для «пациента» на плате устройства. Сверху к такой панельке (к контактам для выводов микросхемы) подпаивают (или просто вставляют) проводники в тех местах, в которых подходят линии питания и управления к «пациенту» на плате.

Другими концами эти проводники припаиваются к выводам второй панельки — под тот МК, которому требуется «лечение» — в соответствии с расположением его управляющих линий, которое можно уточнить в фирменном даташите. Получается своеобразный разъем, штекер (просто панелька DIP-20) которого вставляется в панельку DIP-20 для «пациента» на плате, а уже в его гнездо (еще одна панелька) вставляется новый «пациент». Что же касается программы, то ей может потребоваться коррекция, т.к. разные модели МК AVR часто требуют различных действий как для входа в режим программирования, так и для изменения fuse-байтов. К тому же и сами fuse-байты (в т.ч. и их количество) у разных моделей МК различны — более подробную информацию можно получить в [Л. 1,2,3], или в фирменной документации.

А чтобы было проще разобраться в исходной программе, я снабдил ее подробными комментариями. В качестве «доктора» в данном устройстве используется такой же, как и «пациент», микроконтроллер ATtiny2313 — он так же устанавливается на панельке, чтобы после восстановления всех «заболевших» микросхем его можно было бы снять и использовать в других проектах. Для работы в этом устройстве все fuse- биты «доктора» должны быть такими, какие установлены в нем по умолчанию (с завода); единственное — для более стабильной работы (особенно при нестабильном напряжении питания), в «докторе» можно включить систему BOD, настроив на уровень 2,7 В (установкой fuse-бита BODLEVEL1 в ноль).

Внешний кварц «доктору» не требуется, он работает от встроенного RC-генератора. Микросхему DA1 (78L05) можно заменить отечественным аналогом КР1157ЕН502, либо более мощной 7805 — но она гораздо дороже, а ее мощность для данной схемы не требуется. Транзистор VT1 здесь работает в ключевом режиме, и может быть любым, структуры NPN — например, КТ315, 2SC1815, 2SC9014, 2SC1749S и др.; но для некоторых моделей придется изменить разводку платы. Предохранительный диод VD1 может быть любым, на ток не менее 150 мА. его задача — защитить схему от случайной переполюсовки питания. Все резисторы в схеме — малогабаритные, 0,125 Вт — их номинал может отличаться от указанного в довольно широких пределах. Светодиод HL1 — любой, индикаторный.

И в заключение, хочется рассказать об интересной особенности поведения некоторых экземпляров МК ATtiny2313 при их SPI-программировании с помощью программы PonyProg2000 (возможно, также ведут себя и другие модели МК, в т.ч. и с другими программами — но автору пока еще не доводилось поэкспериментировать с чем-либо, кроме связки ATtiny2313-PonyProg2000). Суть проблемы состоит в следующем: иногда, при попытке прочесть или записать МК, программа PonyProg выдает сообщение об ошибке «Device missing or unknown device (-24)» — и это притом, что никакие fuse-биты в данном МК не изменялись — более того, микросхема может быть даже новой, ни разу еще не «прошитой»! «Лечение» при помощи описанного выше устройства никаких результатов не дает — при повторной попытке чтения/записи сообщение об ошибке появляется вновь.

МК кажется вышедшим из строя, причем — ни с того, ни сего. Но если в данном сообщении нажать кнопку «Ignore», тем самым заставив «Пони» проигнорировать отсутствие ответа МК. и все равно попытаться прочитать/записать микросхему, то этот МК нормально прочитается или «прошьется». После такой вот принудительной «прошивки» большинство «прикидывающихся мертвыми» МК будут вполне нормально работать, притом без каких- либо сбоев (кроме описанного выше сообщения при попытке установить связь с ПК)!

По видимому, дело здесь в том, что некоторые экземпляры МК не генерирует корректное подтверждение в ответ на запрос программатора, в результате чего PonyProg делает вывод об их неисправности; при этом остальные команды программатора эти МК воспринимают нормально и выполнят корректно. Вполне возможно, что это является особенностью (а точнее сказать, «болезнью») МК AVR (не просто же так в PonyProg включили такую кнопочку — «Ignore») — у автора данной статьи три из десяти МК вели себя подобным образом, причем чаще начиналось это не сразу, а спустя несколько «прошивок».

А может быть, виной всему статическое напряжение, имеющееся на человеческих руках. Но, как бы там ни было, в ответственных конструкциях (вроде устройств зажигания, автоматов отопления, полива, сигнализациях и т.п.) такие ‘подорвавшие доверие» МК использовать, все-таки, не желательно. А вот в игрушках, елочных гирляндах, дверных звонках и других вспомогательных устройствах (вроде описанного выше ©) они вполне проработают много лет — и притом без каких-либо проблем.

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


Я делал без разъёма (в наличии были только мамы...), и вот что получилось:


Правда у меня 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! На форуме можно скачать программу PonyProg2000 и оригинал статьи с дополнительными рисунками. Материал для сайта Радиосхемы предоставил Ansel73.

Принципиальная схема программатора на LPT порт показана на рисунке. В качестве шинного формирователя используйте микросхему 74AC 244 или 74HC244 (К1564АП5), 74LS244 (К555АП5) либо 74ALS244 (К1533АП5).

Светодиод VD1 индицирует режим записи микроконтроллера,

светодиод VD2 - чтения,

светодиод VD3 - наличие питания схемы.

Напряжение, необходимое для питания схема берёт с разъёма ISP, т.е. от программируемого устройства. Эта схема является переработанной схемой программатора STK200/300 (добавлены светодиоды для удобства работы), поэтому она совместима со всеми программами программаторов на PC, работающих со схемой STK200/300. Для работы с этим программатором используйтепрограмму CVAVR

Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:




Для работы с программатором удобно использовать удлинитель LPT порта, который несложно изготовить самому (к примеру, из кабеля Centronix для принтера), главное "не жалеть" проводников для земли (18-25 ноги разъёма) или купить. Кабель между программатором и программируемой микросхемой не должен превышать 20-30 см.