Переходим от AT90S2313 к Attiny2313

AVR

Микроконтроллер AT90S2313 фирмы Atmel снят с производства, поэтому найти его сейчас крайне трудно.На смену ему пришел Attiny2313, который продается на каждом углу.Тем не менее, проекты под AT90S2313 присутствуют в интернетах и старой литературе по AVR.Чтобы переделать прошивку МК под attiny нужно внести некоторые изменения в программу.В этой статье мы рассмотрим эти самые изменения, так сказать «как перетащить на более новый контроллер сферический проект в вакууме»©Lifelover.

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

Список главных изменений, требующих корректировки в программе и схеме устройства под AT90S2313:
-Фьюзы(FUSE)!!! — включают в себя еще ряд новых фишек, речь о них пойдет ниже.
-Новые значения рабочего напряжения МК.
-Изменены названия некоторых регистров.
-Изменен порядок работы с прерываниями.
-Изменения в работе таймеров.

Прежде всего, нам потребуется библиотека под новый МК.Как правило, во всех более-менее современных компиляторах эта библиотека уже имеется.Подключаем ее в программе в первую очередь:
#include <tiny2313.h>

или в зависимости от названия библиотеки
#include <io2313.h>


Теперь обо всем поподробнее.
Первое нововведение, оно же является наиболее важным + с ним нужно проявлять наибольшую осторожность — фьюзы(они нужны для управления всякими фичами МК).В AT90S2313 их было всего 2, и трогать их практически не приходилось, так как один из них отвечал за время старта МК, а второй за возможность программировать контроллер.Как видно, функции очень специфические, поэтому используются редко.
В новом МК фьюзов стало на 15 больше, спектр их действия расширился, поэтому при работе с Attiny встречи с ними уже не избежать.
В каждом программаторе есть раздел настройки FUSE. В Uniprof это кнопка FUSE вверху:
FUSE в Uniprof

Нажав на нее, мы увидим табличку с фьюзами и lock-битами:таблица фьюзов
Я уже писал, что с фьюзами надо быть поосторожнее.Убить МК можно, неправильно выставив фюьзы RSTDISBL и SPIEN.Как раз тот самый, что мы не трогали в At90S2313.Впрочем, говорят, что SPIEN у attiny сбросить через последовательный программатор нельзя, но я не проверял и никому не советую.RSTDISBL, проще говоря, отвечает за роль 1ой ноги микросхемы и влияет также на возможность программирования.
Биты, находящиеся в таблице в колонке low отвечают за задержку перед запуском программы в МК и за использование встроенного тактового генератора.Это, кстати еще одно важное нововведение, у Attiny2313 есть встроенный тактовый генератор(4/8 МГц/128 кГц).Схема готового устройства может стать компактнее, паять туда кварц не надо, конечно, если не нужна более низкая/высокая частота.При изменении частоты нужно обязательно проверить частоту в проекте, при неверно выставленной частоте девайс может работать не так, как вы хотите.Возможно использовать и кварц как обычно, нужно только выставить биты по-другому.Кстати, по умолчанию включено деление тактовой частоты на 8(CKDIV8), в большинстве случаев ненужная опция, если вы ее специально включили, наверное, знаете, что делаете :-)
Биты из колонки high(помимо RSTDISBL и SPIEN, о которых уже было сказано) отвечают за управление такими штуками, как отладочный провод, собачий таймер(watchdog — перезагружает МК, если не получает от него ответ, за некоторое время), защита от низкого напряжения(не дает включится МК при напряжении ниже заданного), защита EEPROM.
Lock-биты управляют защитой от копирования прошивки МК(нужны, наверное, только если вы продаете девайс)).
Удобно рассчитывать фьюзы с помощью этого калькулятора.Только обратите внимание на то, что обозначает поставленная галочка в вашем программаторе.Например, в PonyProg она означает совсем не то, что она означает в Uniprof:Ponyprog

Что касается рабочего напряжения:
Для старого контроллера оно составляет 2,7-6,0 вольт.
Для Attiny оно ниже: 1,8-5,5.

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

Если в проекте использовались прерывания, нужно свериться с данной таблицей:
Векторы прерывания
Она показывает изменения векторов прерывания и новые векторы прерывания, которых не было в AT90S2313Следовательно, заменяем в программе векторы прерывания в соответствии с таблицей.

В работе таймеров также произведены изменения.
В таймере TCNT1 в режиме ШИМ неиспользуемые разряды теперь автоматически сбрасываются в ноль, в результате чего исключается счет до 0хFFFF там, где он не запланирован.
Очистка OCR1xH в режиме ШИМ в Attiny происходит в соответствии с разрядностью режима, а не сбрасыванием 6 значащих знаков.
Функция сброс по результату сравнения в новом МК проходит по другому алгоритму, т.е. не по первому совпадению значений, а по последнему.
OCR1x = 0x02 с разрешенным предделением на 8(расстановка флагов).
Для AT90S2313:TCNT флаги для AT90S2313
Для Attiny2313:TCNT флаги для Attiny2313

UART в новой серии микроконтроллеров заменен на USART, поддрживающих передачу данных на удвоенной скорости и работающий, как регистр FIFO(First In, First Out «первым пришёл — первым ушёл»).Включение/отключение FIFO, кстати, управляется конфигурационным битом S8515C.

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

В общем, старался, как мог интерпретировать атмеловские рекомендации и дополнить их своими пояснениями.Надеюсь хоть что-нибудь из этого кому-нибудь пригодится…

  • +2
  • 21 июня 2011, 13:13
  • rad

Комментарии (11)

RSS свернуть / развернуть
говорят, что SPIEN у attiny сбросить через последовательный программатор нельзя, но я не проверял
… а на четвертой фотке как раз видно что SPIEN неактивен
0
это фотка из ponyprog, в юнипрофе SPIEN прекрасно переставляется, не знаю только что будет, если ее поставить и write нажать
0
… в АВР Студио этот фьюз тоже неактивен в ISP режиме, насчет Uniprof не знаю
0
тут возник вопрос про совместимость вниз — из тини на ат90. если имею голый кекс для тини. что нужно переделать или проверить/заменить в кексе что бы заработал на ат90?
0
кекс заменить просто так не получится. Надо перекомпилировать с учетом различий контроллеров
0
Даже из s2313 в tiny2313 кекс переносить не рекомендуется
0
Народ нужна помощь кто может пере компилировать прошивку под 2313 тиньку с AT90S2313 ( А именно прошивку таймер на AT90S2313)
0
Хорошая статья, обращающая внимание на мелочи. Мне правда это все пока не грозит, т.к. есть тележка at90s2313, а тинек нету :)
0
SPIEN отключается в Tiny2313 когда включается DW. И наоборот соответственно. Недавно в студии отлаживал эту тиньку через дракона
0
Мне удавалось «оживить» контроллер после установки RSTDISBL. Точно уже не помню как, но что-то вроде прошивания фьюзов сразу при подаче питания (попадание на внутренний сброс). Раза с 50 фьюзы прошились и RST опять заработал как надо.
0
Народ нужна помощь кто может пере компилировать прошивку под 2313 тиньку с AT90S2313 ( А именно прошивку таймер на AT90S2313)
0
  • avatar
  • tika
  • 25 октября 2011, 17:57
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.