Поиск по этому блогу

Показаны сообщения с ярлыком программатор. Показать все сообщения
Показаны сообщения с ярлыком программатор. Показать все сообщения

19 июл. 2014 г.

Программатор 24cXX

Пришла, как то пора переделывать наш боевой программатор для чипов 24cXX, старый отработал несколько лет и порядком поизносился, стало пропадать питание, разболтался разъем и т.д. Собирать опять такой же, на микросхеме 155ЛН2, не хотелось, а захотелось, чего то более нового,  современного и вместе с тем максимально простого.  Посмотрим на схему классического программатора на микросхеме 155ЛН2:
программатор чипов на микросхеме 155лн2
Кроме самой микросхемы, которую сейчас уже и не достать (по крайней мере, я обзвонил несколько крупных магазинов, торгующих электроникой и там такой не было), на схеме присутствуют  еще несколько элементов, диоды и резисторы, что сильно затрудняет помещение конструкции в малогабаритный корпус, например, COM-разъема. То есть, стояла задача изготовить программатор, который, без труда поместился бы в корпус COM разъема и при этом обладал достоинством программатора на 155ЛН2, таким как развязка между чипом и портом компьютера, что позволяет подключать чип на «горячую». Итак, после небольшого поиска обнаружился претендент на замену 155ЛН2 - импортная микросхема CD4050BT, которую можно без труда приобрести и к тому же она обладает рядом некоторых преимуществ.
Не буду растекаться мыслью по древу и сразу приведу принципиальную схему программатора на этой микросхеме:
программатор на микросхеме 4050
Вот собственно и вся схема,  она так же надежна и неприхотлива, как и на 155лн2, но из нее исключены все навесные элементы, которые теперь совсем не нужны.  Длинна выводов к чипу может достигать 50-70 сантиметров, и более, без ухудшения работы.
Схема настолько проста, что хочется ее немного усложнить. Поставим цель, поскольку питание программатора идет от USB порта компьютера и короткое замыкание, которое может случайно произойти от соприкосновении зажима  плюса и земли, может вывести из строя USB порт ПК, реализовать защиту от короткого замыкания. Причем защита должна быть максимально простая и  надежная. Защиту от короткого замыкания реализуем с помощью постоянного резистора, который поставим в разрыв цепи питания. При коротком замыкании этот резистор выполнит токоограничивающую функцию. Рассчитаем сопротивление этого резистора. Как известно из спецификации порта USB, порт может отдавать ток не более 500 миллиампер, напряжение выдаваемое портом равно 5 вольт. Рассчитываем токоограничивающий резистор – R=U/I=5/0.5=10 Ом. Это минимальное значение, на практике я советую ставить резистор 20-30 Ом. Рассчитываем мощность резистора P=U*I=5*0.5=2.5 W. Но на самом деле, поскольку резистор будет большего сопротивления, то соответственно его мощность будет меньше, например, при сопротивлении резистора 30 Ом его мощность равна – 0.8 W. При такой мощности размер резистора уже будет мал и достаточен для его помещения в корпус COM разъема.
Итак, схема с токоограничительным резистором имеет вид:
программатор с токоограничительным резистором
Программатор, собранный по этой схеме, уже не боится короткого замыкания между любыми выводами. Эту схему я могу рекомендовать к повторению, как простую и, вместе с тем, безопасную для USB порта компьютера и чипа. Но можно ли еще усовершенствовать схему? Можно. Добавим в схему индикатор записи-чтения чипа и индикатор наличия питания:
программатор для чипов 24хх
Большинство деталей для изготовления программатора я использовал в smd варианте, монтаж-навесной.
Используемые детали:
Детали программатора
Программатор чипов 24XX Работу программатора иллюстрирует видео, процесс записи-чтения можно контроллировать по свечению зеленого светодиода, красный индицирует питание. Так же на видео показана защита от короткого замыкания.

Готовый программатор - Программатор в сборе.
Можно ли еще улучшить программатор? Можно. Я добавил в программатор еще и интегральный стабилизатор L78L33 напряжения питания чипа: (И, кстати, сам стабилизатор имеет свою, внутреннюю, защиту от короткого замыкания, что делает программатор еще надежней)
L78
программатор с интегральным стабилизатором
По такой схеме этим программатором можно прошивать уже чипы S3CC921, AT88SC0204CA, AT88SC0204C, SS02-1 и 24C04. Естественно, при наличии соответствующего программного обеспечения.
P.S. Ради интереса измерил напряжение, при котором нормально прошиваются микросхемы AT88SC0204 (те, что мне попадались)
Серия CA  2.55-4.2 вольта
Серия С  2.5-6.0 вольт

Так же, с помощью этого программатора (с доработкой), можно прошивать и микросхемы 93cXX:
93cxx
Думаю, что и дебаг собрать на этой микросхеме тоже получится:)
Да, кстати, чтобы программатор работал с пони-прог нужно выставить такие настройки:
Настройка ponyprog
Очередное спасибо нашему посетителю С.Н.Н. за рисунок печатной платы для программатора:
И рисунок печатной платы программатора с расположением деталей:

9 янв. 2014 г.

Самодельный программатор для AT

Делаем самодельный программатор для микроконтроллеров семейства AT - AT89C51, AT89C52, AT89C55. Программатор подключается к последовательному порту компьютера. При управлении программатором используются только стандартные функции Windows API, поэтому программа должна работать под всеми версиями Windows. Преобразователь уровня выполнен на транзисторах VT1 иVT2. Конденсатор С7 служит аккумулятором отрицательного напряжения -12 В, получаемого через диод VD1 из приемной линии. Это напряжение используется для передачи данных от программатора. Такая схема не требует отрицательного источника напряжения -12В. Транзистор VT1 служит для передачи данных от программатора в компьютер. Такая схема имеет один недостаток: уровень логического "0" будет не +12В, а +5В. Но по стандарту RS232 уровень может составлять +3...+12 В. Так что стандарту соответствует. Но некоторые старые платы портов могут не работать с таким уровнем. В таком случае придется или сменить плату илииспользовать специализированную микросхему преобразователя уровня RS232 - ТТЛ.  Управляющую программу и прошивку для контроллера программатора качаем здесь.
Самодельный программатор для AT - схема
   Микросхемы КРЕН8Б и КРЕН5А служат стабилизаторами напряжения. Напряжение +12В используется только для программирования высоковольтных версий контроллеров. Транзисторы VT4 и VT3 составляют ключ, который управляет подачей напряжения программирования на контроллер. Так как падение напряжения на транзисторе VT3 и диоде VD4 составит примерно 1.5 вольта, то для компенсации этого падения уровень стабилизации +12В повышен диодом VD3 примерно на 0.6В. В этом случае напряжение программирования составит примерно 11.5 В, что соответствует нижнему уровню напряжения программирования.
Самодельный программатор для AT - плата
   Для проверки вы можете сначала собрать только преобразователь уровня и установить запрограммированный контроллер AT90S4414. Подав +5 вольт, вы можете уже проверить работоспособность программатора без установки программируемого контроллера. Для этого подключите его к компьютеру, запустите программу, выберите нужный порт и попробуйте выполнить операцию чтения сигнатурных байтов. Если линия связи с компьютером исправна, то в результате должны прочитаться байты FFh. Если же вы получите сообщение, что компьютер не получает отклика от компьютера, то видимо, вы что-то сделали неправильно. Так же вы можете попробовать выполнить операцию чтения.
Самодельный программатор для AT
   Для этого снимите флажок "Автоматическая установка параметров". Результатом чтения должны быть байты FFh. Также вы можете попробовать закорачивать линии порта P0.0-P0.7 (контакты 39 - 32 соответственно на панели для программируемого контроллера) на корпус. Выполняя операцию чтения, вы будете видеть, что будут читаться байты не FFh, а например, FEh, EFh, F7h, 7Fh ... в зависимости от заземленного вывода. Если это все работает, вы можете установить контроллер AT89C51 в панель и выполнить операцию чтения сигнатурных байтов. Если они прочитаются правильно - ваш программатор работоспособен.

8 янв. 2014 г.

Программатор для ATMega

Предлагаю простую и проверенную схему программатора, от COM порта ПК. При помощи данного программатора Pony Prog можно запрограммировать: ATtiny2313, AT89C2051, и 28ми пиновой панельке – микропроцессоры: ATMega 8, ATMega 48, ATMega 88, ATMega 168. Схему программатора Pony Prog смотрим ниже.
Программатор для ATMega - схема
   Коротко о возможных заменах радиокомпонентов:
- кварцевый резонатор от 4 до 10Mhz, иногда можно и более (при сборе программатора Pony Prog под определенный микроконтроллер посмотрите его рабочую частоту в datasheet). Чем больше частота кварца, тем микроконтроллер шьется быстрее;
- транзистор можно брать КТ315, KT3102, ВС817, BC337, BC847, ВС547, 2T312, C945 и т.д.

   Печатную плату программатора в формате *.lay можно скачать тут.

Печатная плата программатора
   Питается данный программатор Pony Prog от 5v. Программатор Pony Prog прошивается программой PonyProg2000. Все достаточно легко, главное правильно выставлять фузы.

Самый миниатюрный USB-программатор MicroProg для контроллеров AVR

В настоящее время контроллеры AVR фирмы Atmel имеют большую популярность среди радиолюбителей. Они функциональны, дешевы, просты в освоении и достаточно выносливы. Одновременно с этим растет потребность в программаторах для этих контроллеров.

В литературе уже опубликовано большое количество разнообразных схем, как простых, так и сложных, подключаемых к различным портам компьютера (LPT, COM, USB) [1-3]. Из USB-программаторов наибольшее распространение получили USBasp [4] и AVR910 [5]. Они относительно просты, миниатюрны, поддерживают большую номенклатуру контроллеров.

Задачей автора стала разработка еще более простого, миниатюрного, дешевого, функционального и универсального программатора, в результате чего и появилась на свет данная конструкция. Схема устройства представлена на рисунке 1.

Рисунок 1 – Схема программатора

За основу был взят проект CDC-SPI японского автора Osamu Tamura [6]. В отличие от оригинала, напряжение питания программатора и программируемого микроконтроллера составляет не 3,3 В, а 5 В, что позволяет расширить ряд программируемых контроллеров. Кроме того, были внесены некоторые изменения в программу прошивки контроллера.

Ядром программатора является микроконтроллер DD1 ATTiny45. Изюминкой схемы является то, что в качестве тактового генератора контроллера используется генератор системы ФАПЧ частотой 16,5 МГц, что позволило отказаться от применения уже привычного в данных схемах внешнего кварцевого резонатора. Конденсатор С1 снижает пульсации по питанию. Резисторы R2, R3 токоограничительные (величиной 68 – 82 Ом), работают в паре со стабилитронами VD1, VD2 и служат для защиты компьютера от высокого напряжения (по стандарту не более 3,6 В) Они могут быть заменены отечественными КС136 либо импортными с маркировкой 3V3, 3V6. Резистор R1 указывает компьютеру, что подключенное устройство работает на скорости LS, его номинал может изменяться в диапазоне 1,5 – 2,2 кОм. Резисторы R4-R7 служат для защиты выходов контроллера от короткого замыкания и согласования логических уровней в случае раздельного питания контроллера и программатора, их величина может изменяться от 270 до 560 Ом. Для соединения программатора и компьютера используется пятипиновое гнездо mini-USB (XS1). Это сделано для уменьшения размеров печатной платы, а также исходя из того, что кабель mini-USB имеется практически у каждого. Подключение программатора к программируемому контроллеру осуществляется при помощи 10-контактного разъема XS2, распиновка которого соответствует стандарту STK200/300 (рис. 2). Можно использовать другую стандартную распиновку либо придумать свою, но тогда придется изменить печатную плату.
Рисунок 2 – Распиновка ISP-разъема.

Программатор собран на плате из одностороннего фольгированного стеклотекстолита размером 14х28 мм. Внешний вид дорожек платы представлен на рис. 3, а расположение деталей на ней – на рис. 4. При этом синим цветом обозначены детали, устанавливаемые со стороны монтажа, а зеленым – с верхней стороны платы. Файл с печатной платой в формате программы DipTrace можно скачать здесь.


Рисунок 3 – Разводка печатной платы

Рисунок 4 – Расположение деталей на плате

Внешний вид программатора со стороны монтажа и общий вид программатора представлены на рисунках 5 и 6 соответственно.


Рисунок 5 – Внешний вид программатора со стороны монтажа

Рисунок 6 – Общий вид программатора

Для тех, кому сложно достать не слишком пока распространенный контроллер ATTiny45, автором была разработана схема на более широко используемом контроллере ATTiny2313 (рис. 7)

Рисунок 7 – Схема программатора на ATTiny2313

Схема отличается от предыдущей только наличием кварцевого резонатора ZQ1, частота которого должна равняться 12 МГц и конденсаторами C1 и C2, емкость которых может изменяться в пределах 18 – 24 пФ. И кроме того, в схеме вместо сложного в распайке гнезда mini-USB применено так называемое «принтерное» гнездо типа USB-B. Печатная плата для данной схемы разработана на обычных деталях, что несколько увеличило ее размеры, но позволило отказаться от сложных для пайки многими радиолюбителями smd-компонентами. 

Плата также выполнена из одностороннего фольгированного стеклотекстолита размером 30х50 мм. Внешний вид дорожек платы представлен на рис. 8, а расположение деталей на ней – на рис. 9. Файл с печатной платой в формате программы DipTrace можно скачать здесь.

Рисунок 8 – Разводка печатной платы программатора на ATTiny2313

Рисунок 9 – Расположение деталей на плате программатора на ATTiny2313

Внешний вид программатора со стороны монтажа и общий вид программатора представлены на рисунках 10 и 11 соответственно.


Рисунок 10 – Внешний вид программатора со стороны монтажа


Рисунок 11 – Общий вид программатора

Теперь что касается программной части. Файлы прошивки контроллера можно скачать вот тут: tiny45.hex и tiny2313.hex. После программирования flash-памяти контроллера для ATTiny45 необходимо установить следующие конфигурационные биты: CKSEL3, CKSEL2, CKSEL1 (тактирование от схемы ФАПЧ), BODLEVEL0 (детектор пониженного напряжения на 1,8 В), RSTDSBL (поскольку количество выводов микроконтроллера невелико, то вывод RESET используется в качестве обычного порта ввода-вывода). Для ATTiny2313 необходимо запрограммировать только бит BODLEVEL0, а остальные сбросить (естественно, SPIEN должен остаться установленным) (в журнале напечатали с ошибкой).

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

Для этой цели можно применить любую схему из описанных, например, в [1]. Простейший программатор, именуемый в народе «5 проводков», подключается к LPT-порту компьютера и состоит из всего 4 сопротивлений, но сейчас это порт является скорее архаизмом, чем нормой. Сам автор для первоначальной прошивки использовал программатор, представленный на рис. 7 в [1]. Он подключается с СОМ-порту компьютера и имеет ряд панелек для установки различных микроконтроллеров, что позволяет с легкостью запрограммировать контроллер перед его монтажом в устройство. Управляется программатор от известной программы PonyProg. Небольшой нюанс. PonyProg не знает ни ATTiny2313, ни ATTiny45, поэтому выберите любой контроллер с объемом памяти не меньше, чем 4 кб, например, ATMega8. При прошивке программатор выдаст ошибку о неверном типе контроллера. Выберите «Ignore» и контроллер все равно будет прошит.

Кроме того, поскольку прошивка контроллера ведется через интерфейс внутрисхемного программирования SPI, то возможно (и даже желательно для ATTiny45) прошивать его непосредственно в устройстве уже после распайки.

Программирование можно осуществлять либо подпайкой к соответствующим выводам контроллеров проводков и дальнейшим их сопряжением с программатором, либо используя разъем XS2. Соответствие выводов контроллера и их назначения приведено в таблице 1.

Таблица 1 – Выводы для программирования контроллеров
Номер вывода Обозначение Описание 
 ATtiny45ATtiny2313 
20VCC Питание контроллера 
410GND Общий вывод
618MISO Выход данных контроллера
517MOSI Вход данных контроллера
719SCKВход тактовых импульсов
11RESВход сброса

При использовании для программирования разъема XS2 необходимо учесть следующий нюанс. При прошивке контроллера он выступает ведомым, и для него вывод MISO является выходом, а MOSI – входом. Когда же контроллер сам выступает в роли программатора, то он сам является ведущим, и входы MISO и MOSI меняются местами (сравните рисунки 1 и 7 с таблицей 1).

При программировании контроллера ATTiny45 все необходимые выводы подведены к разъему XS2, в этом случае схема подключения будет иметь следующий вид (рис. 12). Поскольку обе части разъемов XS2 и XS3 представляют собой гнезда, то можно либо спаять кабель со штекерами с обеих сторон, либо выполнить соединения проводками, втыкая их в соответствующие контакты гнезд. На разъеме внешнего программатора не проставлены номера выводов – они могу быть различными для разных типов программаторов, и их следует уточнить в документации для каждого конкретного программатора.

При программировании же контроллера ATTiny2313 сигнал сброса, подводимый к выводу RESET, формируется линией РВ0 (см. рис. 7). В этом случае сигнал сброса от внешнего программатора необходимо подключать непосредственно к выводу RESET контроллера ATTiny2313 (вывод 1), подпаяв к нему дополнительный проводок (рис. 13). Можно обойтись и вовсе без него, но тогда необходимо перед подачей питания на контроллер замкнуть вывод RESET на землю, однако в данном случае возможны сбои, и этот вариант не рекомендуется для повторения.

Рисунок 12 – Подключение внешнего программатора при прошивке ATTiny45

Рисунок 13 – Подключение внешнего программатора при прошивке ATTiny2313

Еще одно замечание. COM- и LPT-программаторы обычно не имеют вывода питания, поэтому питание платы с контроллером может осуществляться от шины USB через разъем XS1. В этом случае перемычка VCC-VCC не требуется.

ВНИМАНИЕ!!! Перед установкой бита RSTDISBL убедитесь в работоспособности схемы, иначе после его установки дальнейшее программирование микроконтроллера через ISP становится невозможным.

Схема на микроконтроллере ATTiny2313 при правильном монтаже начинает работать сразу же без дополнительной настройки. 

Для проверки работоспособности схемы на микроконтроллере ATTiny45 можно поступить следующим образом: в flash-память контроллера записать файл tiny45.hex, установить все конфигурационные биты кроме RSTDISBL, собрать схему, подключить ее к USB-порту компьютера. Если все сделано верно, то появится надпись о том, что обнаружено новое устройство MICROPROG (рис. 14) и система попросит установить драйвера на него. 

Рисунок 14 – Подключение программатора в первый раз

Для пользователей систем MS Windows 2000, ME, XP необходимо выбрать «Установка из указанного места» и указать в качестве директории с драйверами папку \avrcdc_inf\raw\ из архива, лежащего здесь

Рисунок 15 – Установка драйвера на ОС Windows XP

На сообщение системы о том, что программное обеспечение не тестировалось на совместимость с Windows XP необходимо выбрать «Все равно продолжить» (рис. 16)

Рисунок 16 – Предупреждение ОС

Для пользователей других версий Windows необходимо выбрать папку с соответствующим названием (\vista64, \xpvista7). Следует заметить, что драйвера взяты из оригинальной конструкции Osamu Tamura [7]. 
После установки драйверов в системе появится новый виртуальный COM-порт, в чем можно убедиться, зайдя в диспетчер устройств (рис. 17)

Рисунок 17 – Появление нового виртуального порта в системе

Если посмотреть свойства данного порта, то можно видеть, что это как раз наш программатор MICROPROG (рис. 18)

Рисунок 18 – Программатор определился в системе

Итак, мы убедились, что аппаратная часть программатора исправна. Теперь можно смело устанавливать конфигурационный бит RSTDISBL. Более никаких настроек для работы с программатором на контроллере ATTiny45 не требуется. Если монтаж выполнен правильно, то устройство начинает работать сразу же. Все вышеописанные действия в равной степени относятся и к программатору, собранном на базе ATTiny2313, за исключением установки бита RSTDISBL

Для работы с программатором MICROPROG автором была разработана специальная программа MicroProg.exe. Главное окно программы представлено на рис. 19.

ВНИМАНИЕ!!! Программатор необходимо подсоединять к компьютеру до запуска программы. При перестыковке программатора необходимо перезапустить программу.

Рисунок 19 – Главное окно программы MICROPROG

Разберемся с назначением основных элементов интерфейса программы. Для автоматического определения типа подключенного к программатору микроконтроллера служит кнопка «Автоопределение». При этом автоматически считываются идентификатор микроконтроллера, калибровочные и конфигурационные ячейки и биты защиты. 

Если же по каким-то причинам автоопределение контроллера дает неверные результаты, то можно установить тип контроллера вручную при помощи выпадающего списка «Ручной выбор контроллера». При этом конфигурационные биты и биты защиты устанавливаются по умолчанию для данного типа контроллера, поэтому стоит быть внимательным, чтобы не ошибиться. Следует заметить, что номенклатура поддерживаемых контроллеров несколько отличается от таковой у программатора AVRDUDE [8]. Во-первых, MICROPROG не поддерживает контроллеры семейства Classic и контроллеры с объемом памяти больше 128 кБ. Во-вторых, им поддерживаются новые чипы, еще не включенные в список AVRDUDE. Кроме того, этот список будет постоянно обновляться автором по мере выхода новых контроллеров.

Следующая, и одна из наиболее полезных особенностей данного программатора – это программное изменение частоты тактовых импульсов SCK. При этом имеется на выбор 5 фиксированных частот (1 МГц, 250 кГц, 50 кГц, 10 кГц, 2 кГц). Выбор частоты осуществляется из выпадающего списка «Частота тактового сигнала». По умолчанию при подключении программатора у него всегда устанавливается частота 1 МГц, поэтому будьте внимательны: если подключенный контроллер не определяется устройством, возможно, что для него установлена слишком высокая частота импульсов SCK. Попробуйте снизить ее и повторить попытку.

Возможно, у кого-то возникнет вопрос, зачем нужна столь низкая частота, как 2 кГц. Автор однажды столкнулся со следующей проблемой. При тактировании контроллера ATtiny13 внутренним генератором частотой 128 кГц и запрограммированном фьюзе CKDIV8 реальная тактовая частота контроллера установилась на уровне 16 кГц. При этом как следует из инструкции к контроллерам AVR, частота импульсов SCK должна быть меньше тактовой как минимум в 2,5 раза, то есть на уровне 6 кГц. Минимальная же частота импульсов SCK для того же программатора USBasp составляет 8 кГц, чего как оказалось, недостаточно. Таким образом, абсолютно рабочий контроллер оказался негодным к употреблению, пока не был создан программатор MICROPROG, который таки смог вернуть его к жизни. Но вернемся к описанию.

В поле «Идентификатор» указывается трехбайтовый шестнадцатеричный код, уникальный для каждого типа контроллера. Это поле доступно только для чтения.

В поле «Калибровочные ячейки» указываются значения, занесенные заводом-изготовителем при калибровке внутреннего RC-генератора контроллера. Количество значений зависит от количества фиксированных  тактовых частот микроконтроллера (на рис. 15 для ATTiny13 таких значений два – для 4,8 МГц и для 9,6 МГц). Это поле также доступно только для чтения.

В блоке «Конфигурационные ячейки» задаются конфигурационные биты, или фьюзы. Всего в микроконтроллерах AVR имеется три конфигурационных байта – старший (High Fuse, HF), младший (Low Fuse, LF) и дополнительный (Extended Fuse, EF). В представленной программе имеется двойная возможность задавать значения этих байтов.

1. Побитно, устанавливая или снимая флажки с соответствующих битов (важно помнить, что установленный флажок сбрасывает соответствующий бит в 0)

2. Побайтно, задавая сразу значение всего конфигурационного байта в правой части окна программы. Значение байта задается в шестнадцатеричном коде.

Оба способа задания конфигурационных ячеек равноценны. Изменения, созданные одним способом тут же отображаются и другим способом.

Кнопка «Чтение» позволяет считать фьюзы из контроллера. Кнопка «Запись» – записать выбранные в программе фьюзы в контроллер. Кнопка «Верификация» сравнивает выбранные в программе фьюзы с теми, которые записаны в контроллер. Кнопка «По умолчанию» устанавливает фьюзы по умолчанию для данного типа контроллера согласно инструкции (при этом биты устанавливаются только в программе, для их записи в контроллер необходимо воспользоваться кнопкой «Запись»).

В блоке «Ячейка защиты» задаются биты защиты. Их установка позволяет защитить программный код от несанкционированного чтения или записи. Все компоненты этого поля аналогичны таковым для блока «Конфигурационные ячейки».

В блоке «Программирование» осуществляются операции с flash- и eeprom-памятью контроллера. Кнопка «Стирание кристалла» предназначена для стирания всех областей памяти, включая биты защиты, flash и eeprom (последняя не стирается при установленном бите EESAVE). При этом конфигурационные ячейки остаются без изменения.

Под кнопкой расположено два почти идентичных подблока «Программирование FLASH» и «Программирование EEPROM». По нажатию на кнопку «Файл НЕХ» открывается диалоговое окно выбора файла с расширением *.hex. Имя выбранного файла и путь к нему отображаются в поле справа от кнопки. При этом поле является редактируемым, то есть путь можно прописать и вручную. 

Кнопка «Чтение» позволяет считать flash-память контроллера в выбранный HEX-файл. По окончанию считывания на экране появится соответствующее сообщение. При этом в поле выбора файла можно указать имя несуществующего файла – он будет автоматически создан.

Кнопка «Запись» позволяет записать выбранный HEX-файл в flash-память контроллера. По окончанию программирования на экране появится соответствующее сообщение. ВАЖНО!!! Перед выполнением команды «Запись Flash» автоматически осуществляется выполнение команды «Стирание кристалла».

Кнопка «Верификация» позволяет сверить выбранный HEX-файл с содержимым flash-памяти микроконтроллера. По окончании процесса на экране появится сообщение об успешной верификации или об ошибке. Ошибка может быть вызвана установленными битами защиты или неверно выбранным для верификации файлом.

Назначение кнопок с идентичными названиями в подблоке «Программирование EERPOM» аналогично таковым для подблока «Программирование FLASH» за исключением того, что все операции здесь относятся к области eeprom-памяти, а файлы имеют расширение *.eep.

В нижней части экрана имеется полоса, отображающая ход выполнения процесса.

Для обсуждения работы программатора создана ветка на форуме сайта автора по адресу [9].

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

Литература

1. Рюмик С.М. Микроконтроллеры AVR. Ступень 1. – Радиоаматор. 2005. №1. с. 35-39.
2. Хлюпин Н. Два универсальных программатора. – Радио. 2006. №5. с. 27-30.
3. Котов И. Программатор микроконтроллеров AVR. – Радио. 2009. №1. с. 23-24.
4. Thomas Fischl. USBasp - USB programmer for Atmel AVR controllers. http://www.fischl.de/usbasp/ 
5. Рыжков А. USB программатор микроконтроллеров AVR и AT89S, совместимый с AVR910. – Радио. 2008. №7. с. 28-29.
6. Osamu Tamura. Virtual COM Port over Low-Speed USB AVR-CDC
http://www.recursion.jp/avrcdc/cdc-spi.html
7. Osamu Tamura. Virtual COM Port over Low-Speed USB AVR-CDC. Downloads. – http://www.recursion.jp/avrcdc/download.html
8. AVRDUDE - AVR Downloader/UploaDEr. – http://www.nongnu.org/avrdude/
9. Сайт Сокола Сергея. Форум. Программатор MICROPROG. – http://sokolsp.at.ua/forum/2-3-1

Как правильно прошить AVR фьюзы (fuse bit)

 уже писал про фьюз биты / байты (fuse bits / bytes) микроконтроллеров AVR много статей назад. Но, судя по большому количеству вопросов от читателей, тема не раскрыта полностью.
В чем же проблема с установкой фьюз бит? Вроде бы есть картинка, на которой нарисовано какие галочки ставить, какие снимать – должно быть все просто. Но разработчики различных программ для программирования микроконтроллеров в своих программах используют настолько разнообразные варианты установки фьюз бит, что нетрудно запутаться. Чтобы как то прояснить вопрос установки фьюз бит (по крайней мере, касательно моих проектов в этом блоге) я взялся обобщить информацию по различным программам и свести все в одном месте.

для начала –
1 ОБЩАЯ ИНФОРМАЦИЯ.
Fuse bits называют область (4 байта) в AVR микроконтроллерах отвечающую за начальную (глобальную) конфигурацию. Этими битами мы указываем микроконтроллеру, с каким задающим генератором ему работать (внешним / внутренним), делить частоту генератора на коэффициент или не нужно, использовать ножку сброса как сброс или как дополнительный порт ввода-вывода, количество памяти для загрузчика и многое, многое другое. У каждого контроллера свой набор фьюзов. Все фьюзы прописаны в даташите на микроконтроллер.
С завода, по умолчанию, фьюзы выставлены для работы микроконтроллера от внутреннего задающего генератора. Ничего довешивать не нужно подал питание, и он работает. Если нужно как-то изменить работу микроконтроллера, например, заставить его работать от внешнего задающего генератора, нужно изменить соответствующие фьюзы.
Физически фьюз биты расположены в четырех специальных байтах:
- Lock Bit Byte – лок биты для защиты программы от копирования;
- Fuse Extended Byte – дополнительный байт – особые функции;
- Fuse High Byte – старший байт;
- Fuse Low Byte – младший байт.
Вот как распределены фьюз биты по байтам для ATtiny2313 (взято из даташита):
лок биты
расширенные биты
старший фьюз байт
младший фьюз байт
Важно знать!
Исторически так сложилось, что если фьюз равен:
0 – значит, запрограммирован / прошит / активен
1 – значит, НЕ запрограммирован / НЕ прошит / Не активен
Это нужно запомнить!
Почему так? Объясню. Сейчас конфигурационные байты записываются во флеш памяти и поменять их можно сколько угодно раз. Раньше, когда флеш памяти еще не было, для конфигурации какого-либо чипа в его архитектуре имелись специальные перемычки (fuse) которые разово физически сжигались. Вот поэтому, по старинке, если перемычка цела – «1» значит эта функция не задействована и наоборот – перемычку сожгли – «0» значит функция задействована.
Вот такая логика и является источником проблем с установкой фьюз бит.

2 НЕБОЛЬШОЙ ЛИКБЕЗ ПО НАЗНАЧЕНИЮ ФЬЮЗОВ.
Здесь описаны не все фьюзы – только основные. Подробнее (и правильнее) о фьюзах нужно смотреть в даташитах на каждый конкретный микроконтроллер.
CKSEL – выбор тактового генератора для микроконтроллера.
Для работы микроконтроллера (как и для любого процессора) нужны тактовые импульсы. Источником тактового сигнала может быть:
– внутренний RC генератор. Никаких дополнительных элементов не нужно. Удобно, но RC генератор имеет небольшую точность работы (вплоть до 10% погрешности) и, кроме того, «плывет» от температуры. Для некритичных по времени приложений вполне годиться.
– внешний кварцевый (или керамический) резонатор. Нужен сам резонатор, плюс два конденсатора на 15-30пФ. Соответственно, будут заняты две ножки микроконтроллера – XLAT1 и XLAT2. Применяется там, где нужны точные замеры времени или частота работы микроконтроллера выше, чем может дать внутренний RC генератор.
– еще можно тактировать микроконтроллер от внешнего источника тактового сигнала. Это может быть другой микроконтроллер (для синхронизации работы) или внешняя схема, дающая нужный сигнал. Тактовый сигнал подается на ножку XLAT1.
Источник тактового сигнала для микроконтроллера задается комбинацией битов CKSEL3…0.
Это может быть (для ATTiny2313, выборочно):
CKSEL3…0 = 0000 – Внешний тактовый сигнал;
CKSEL3…0 = 0010 – Внутренний тактовый генератор – частота 4 МГц;
CKSEL3…0 = 0100 – Внутренний тактовый генератор – частота 8 МГц;
CKSEL3…0 = 1101 – Внешний тактовый генератор – кварц частотой от 3 до 8 МГц;
CKSEL3…0 = 1111 – Внешний тактовый генератор – кварц частотой больше 8 МГц.
Как оживить микроконтроллер, если неправильно установлены CKSEL?Если Вы выставили фьюз биты на внешний генератор, а его нет, то микроконтроллер «пропадет» для программатора. В этом случае придется припаять кварц к соответствующим ножкам или подать тактовые импульсы на ножку XLAT1 микроконтроллера.
В «боевых» условиях получить тактовый сигнал можно несколькими способами:
– собрать несложный генератор на логике – паять можно прямо на ножках логики;

– если рядом имеется осциллограф, то у него есть источник образцового сигнала. Частота его, обычно, не большая, но фьюзы исправить хватит;
– если есть еще один микроконтроллер – делаем выход тактового сигнала на ножку микроконтроллера (нужно запрограммировать фьюз CKOUT) и подаем этот сигнал на XLAT1;
– есть еще «метод пальца» – крайне не рекомендую…
CKOUT – разрешает вывод тактовой частоты на ножку CLKO микроконтроллера (для тактирования других устройств).CKOUT = 1 – ножка микроконтроллера работает как обычный порт ввода-вывода;
CKOUT = 0 – на ножку микроконтроллера выдается сигнал тактового генератора.
CKOPT – задает размах тактового сигнала на внешнем генераторе.CKOPT = 1 – размах небольшой – генератор работает в экономном режиме. Нормально генератор может работать лишь при небольших частотах и в условиях близким к идеальным. При значительных помехах, большой тактовой частоте, перепадах (скачках) напряжения питания, микроконтроллер может работать нестабильно;
CKOPT = 0 – задающий генератор работает на полную мощность, устойчив к помехам и может работать во всем диапазоне частот. Если нет особых требований к энергосбережению – советую всегда программировать этот бит.
SCKDIV8 – деление тактовой частоты на 8.Тут все просто:
SCKDIV8= 1 – микроконтроллер работает на частоте задающего генератора;
SCKDIV8= 0 – микроконтроллер работает на частоте в 8 раз меньше частоты задающего генератора;
SUT – задает скорость запуска микроконтроллера.После снятия «сброса» (или подачи питания) программа, записанная в микроконтроллер, начинает работать не мгновенно. Микроконтроллер выжидает некоторое время, для того, чтобы нормально запустился тактовый генератор, установилось напряжение питания и т.д. Время ожидания до запуска программы и задают биты SUT1…0. Чаще всего нам не критична скорость запуска, поэтому советую ставить на максимум.
SUT1..0 = 11 – максимальное время запуска (чуть больше 65 mS).
На время запуска еще влияет CKSEL0, но это уже детали …
RSTDISBL –разрешает использовать ножку Reset как еще один порт ввода-вывода.Иногда нужная вещь, но нужно знать -
после программирования RSTDISBL микроконтроллер уже нельзя будет прошить последовательным программатором! Поэтому без особой надобности не трогайте его.
RSTDISBL = 1 – ножка сброса работает как сброс;
RSTDISBL = 0 – ножка сброса работает как еще один порт ввода-вывода, последовательное программирование отключено.
SPIEN – разрешение на последовательное программирование.По умолчанию запрограммирован (0) – разрешено последовательное программирование.
SPIEN = 0 – разрешено последовательное программирование;
SPIEN = 1 – запрещено последовательное программирование.
WDTON – включает Watch Dog Timer.Для ответственных приложений, там, где недопустимо зависание программы (будь то ошибка программы или злостная помеха), применяют Watch Dog Timer. Это внутренний таймер микроконтроллера, работающий от своего независимого генератора. При переполнении этого таймера микроконтроллер сбрасывается и начинает выполнять программу с начала. Программист должен в тесте программы (обычно в главном цикле) вставить специальную команду обнуления этого таймера (WDR). Команда периодически выполняется и обнуляет таймер, не давая ему переполнится. Если микроконтроллер «повис» перестают выполняться команды обнуления, таймер переполняется и сбрасывает микроконтроллер.
WDTON = 1 – Watch Dog Timer – отключен (можно включить программно);
WDTON = 0 – Watch Dog Timer – включен (программно выключить нельзя).
В обычных приложениях не нужен.
BODLEVEL и BODEN – контроль напряжения питания микроконтроллера (Brown-out Detector)
Если питание микроконтроллера опуститься к минимально допустимому или чуть ниже, то работа микроконтроллерабудет нестабильной. Возможны ошибочные действия, потеря данных, случайное стирание EEPROM. Микроконтроллер умеет следить за уровнем своего питания (BODEN=0) и когда оно достигает уровня, который задается битами BODLEVEL, сбрасывается и держится в ресете пока уровень не поднимется до рабочего уровня. В некритических приложениях можно не использовать.
JTAGEN – разрешает интерфейс JTAG (внутрисхемный отладчик). 
При активации некоторые линии микроконтроллера отдаются под интерфейс. Но зато можно подключать JTAG отладчик и с его помощью легко отладить любую программу прямо в схеме – удобно.
JTAGEN = 1 – запрещен JTAG;
JTAGEN = 0 – разрешен JTAG.
DWEN – бит, разрешающий работу DebugWire – еще одного отладочного интерфейса. DebugWire однопроводный отладочный интерфейс работающий через ножку сброса, поэтому «не отнимает» у микроконтроллера ножки портов ввода-вывода.
DWEN= 1 – запрещен DebugWire ;
DWEN= 0 – разрешен DebugWire .
AVR микроконтроллеры могут во время своей работы изменять содержимое области программ (программировать сам себя).
SELFPRGEN – бит, разрешающей программе производить запись в память программ.
SELFPRGEN = 1 – изменение области программ запрещено;
SELFPRGEN = 0 – разрешено изменение области программ.
EESAVE – защита EEPROM от стирания. 
При подаче команды полного стирания микроконтроллера (обычно осуществляется при каждом программировании кристалла) стирается и EEPROM. Если Вы хотите чтобы EEPROM оставалось нетронутой – активируйте этот фьюз. Это актуально если в EEPROM хранятся важные данные.
EESAVE = 1 – стирать EEPROM вместе с Flash;
EESAVE = 0 – оставлять EEPROM при очистке нетронутым.
AVR микроконтроллеры могут иметь бутлоадер – это область в конце памяти, в которой можно разместить загрузчик, который предназначен для загрузки и запуска основной программы.
BOOTRST – как раз и заставляет микроконтроллер запускаться с области бутлоадера.
BOOTRST = 1 – микроконтроллер запускает программу с нулевого адреса;
BOOTRST = 0 – микроконтроллер запускает программу с бутлоадера.
BOOTSZ0..1 – задает размер бут сектора (области памяти программ для бутлоадера).
Lock Bits – Это отдельный фьюз байт который предназначен для защиты области программ и/или EEPROM от копирования. Полное стирание восстанавливает эти биты в исходное состояние.
Еще раз повторюсь, это не полный перечень фьюз бит, для каждого конкретного микроконтроллера смотрите даташит.

3 ЧАСТО ИСПОЛЬЗУЕМЫЕ КОНФИГУРАЦИИ ФЬЮЗ БИТ.
Для примера приведу некоторое количество конфигураций для микроконтроллеров. Картинки фьюзов сняты с Algorithm Builder’а.
Во всех картинках фьюзы как по даташиту:- снятая галочка– fuse bit = 0, фьюз запрограммирован / активный;
- установленная галочка– fuse bit = 1, фьюз НЕ запрограммирован / НЕ активный.
Для UniProf - ставить как на картинке;
Для PonyProg, CVAVR, AVR Studio – ставить инверсно.
3.1 ATtiny13
ATTiny13.pdf - Даташит для ATTiny13/13V
ATtiny13_default_internal_RC_1.2 - Фьюзы ATtiny13 заводские настройки внутренний RC генератор на 1.2МГц
ATtiny13_internal_RC_4.8 - Фьюзы ATtiny13 внутренний RC генератор на 4.8МГц
ATtiny13_internal_RC_9.6 - Фьюзы ATtiny13 внутренний RC генератор на 9.6МГц
ATtiny13_internal_RC_0.128 - Фьюзы ATtiny13 внутренний RC генератор на 128кГц
3.2 ATtiny2313
ATTiny2313.pdf - Даташит ATTiny2313
ATtiny2313_default_internal_RC_1.0 - Фьюзы ATtiny2313 заводские настройки внутренний RC генератор на 1.0МГц
ATtiny2313_internal_RC_4.0 - Фьюзы ATtiny2313 внутренний RC генератор на 4.0МГц
ATtiny2313_internal_RC_8.0 - Фьюзы ATtiny2313 внутренний RC генератор на 8.0МГц
ATtiny2313_external_0.9_3.0 - Фьюзы ATtiny2313 внешний генератор на 0.9-3.0МГц
ATtiny2313_external_3.0_8.0 - Фьюзы ATtiny2313 внешний генератор на 3.0-8.0МГц
ATtiny2313_external_8.0_20.0 - Фьюзы ATtiny2313 внешний генератор на 8.0-20.0МГц
3.3 ATmega8
ATmega8.pdf - Даташит на ATmega8
ATmega8_default_internal_RC_1.0 - Фьюзы ATmega8 заводские настройки внутренний RC генератор на 1.0МГц
ATmega8_internal_RC_2.0 - Фьюзы ATmega8 внутренний RC генератор на 2.0МГц
ATmega8_internal_RC_4.0 - Фьюзы ATmega8 внутренний RC генератор на 4.0МГц
ATmega8_internal_RC_8.0 - Фьюзы ATmega8 внутренний RC генератор на 8.0МГц
ATmega8_external_1.0_16.0 - Фьюзы ATmega8 внешний генератор на 1.0-16.0МГц
3.4 ATmega48/88/168
ATMegaX8.pdf - Даташит ATMega48/88/168/V
ATmega48_88_168_default_internal_RC_1.0 - Фьюзы ATmega48/88/168 заводские настройки внутренний RC генератор на 1.0МГц
ATmega48_88_168_internal_RC_8.0 - Фьюзы ATmega48/88/168 внутренний RC генератор на 8.0МГц
ATmega48_88_168_internal_RC_0.128 - Фьюзы ATmega48/88/168 внутренний RC генератор на 128кГц
ATmega48_88_168_external_0.4_25.0 - Фьюзы ATmega48/88/168 внешний генератор на 0.4_25.0МГц

А теперь то, для чего писалась эта статья –
4 УСТАНОВКА ФЬЮЗ БИТ В РАЗЛИЧНЫХ ПРОГРАММАХ.
Общий алгоритм установки фьюз бит должен быть следующим:
- прошиваем Flash и, если нужно, EERROM;
– открываем окно прошивки фьюзов, считываем текущие фьюзы микроконтроллера;
– модифицируем только те фьюзы которые нам нужны;
– обращаем внимание на критичные для последовательного программирования фьюзы RSTDISBL, SPIEN, др.

4.1 Начнем, пожалуй, с Algorithm Builder’а. 
http://algrom.net/russian.htmlРаз я выкладываю картинки именно с него, нужно знать как устанавливаются в нем фьюзы.
Логика установки фьюзов в Algorithm Builder’а, я считаю, самая правильная – строго по даташиту.
Установка фьюз в алгоритм билдере

4.2 UniProf. 
http://avr.nikolaew.org/progrЛогика установки фьюз аналогична Algorithm Builder.
фьюзы в юнипрофе

4.3 PonyProg.
http://www.lancos.com/prog.html 
Еще одна хорошая программа для программирования микроконтроллеров. Логика обратная двум пред идущим.
фьюзы в понипрог

4.4 AVR Studio.
http://www2.atmel.com/Не совсем программа для программирования, но прошить HEX сможет.
Фьюзы в авр студии

4.5 Code VisionAVR.
http://www.hpinfotech.ro/html/cvavr.htmЕще одна популярная программа – обязательно нужно показать.
КодеВижинАВР

4.6 SinaProg.
Оболочка для AVRDUDE. Удобная и приятная в управлении программа.  AVRDUDE обеспечивает большое число поддерживаемых программаторов и кристаллов.
фьюзы СинаПрог
Я выбирал программы с которыми удобно работать и они доступны и популярны.

5 ФЬЮЗ КАЛЬКУЛЯТОР ДЛЯ AVR.
Если Вам нужна определенная конфигурация микроконтроллера, а изучение даташита ни к чему не приводят (и не удивительно, информация по фьюзам, там старательно размазана по всему документу), есть выход – Fuse Calculator!Фьюз калькулятор – это специальная программа (или on line сервис) призванная помочь в конфигурации микроконтроллера. Как правило они просты и доступны в использовании. По большому счету, каждая среда программирования уже содержит в себе фьюз калькулятор, но есть универсальные с большими возможностями и более удобные. Хотелось бы рассказать об одном из популярных on line калькуляторе – Engbedded Atmel AVR® Fuse Calculator.
http://www.engbedded.com/fusecalc/
Все очень просто – небольшие комментарии на картинке помогут.
Engbedded Atmel AVR® Fuse Calculator
Вот такие инструменты есть для работы с фьюз битами. Выбирайте!