Микроконтроллеры avr для начинающих – 3

Микроконтроллеры AVR для начинающих – 3

В предыдущей части статьи я рассказывал про прошивку МК с помощью программы PonyProg, теперь расскажу как прошить с помощью CodeVision AVR (далее CVAVR). Честно говоря, работа в программе не сильно отличается от PonyProg.

Для начала можете микроконтроллер поставить в панельку программатора, и подключить его к LPT порту, затем подавайте питание.

Запускаем программу CVAVR

1) Сначала нам нужно настроить порт, заходим в меню Settings -> Programmer.

Откроется окошко, все настройки выставляем как на рисунке ниже

2) Нажимаем ОК, далее заходим в меню Tools -> Chip Programmer

Откроется следующее окно:

Ничего лишнего в этом окошке не трогаем, галочки не ставим и ничего не переключаем.

3) Выбираем нужный нам микроконтроллер из выпадающего меню, я выбрал ATmega8. Если у вас в названии микроконтроллера после ATmegaX стоит буква, к примеру V или L,  то в списке выбирайте такой же МК, с такой же буквой.

4) Теперь нам нужно открыть файл прошивки, в этом окошке нажимаем File -> Load FLASH

5) Откроется окно, где нужно будет выбрать файл прошивки с расширением .hex, кстати, не забудьте внизу из выпадающего меню “Тип файлов” выбрать этот тип файла.

6) Файл EEPROM выбираем точно так-же, для этого нажимаем меню File -> Load EEPROM, расширение этого файла .eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.

Имейте ввиду, что процессы прошивки программы, фьюзов и ПЗУ (EEPROM) это самостоятельные отдельные процедуры.

И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке.

7) Итак, файлы прошивки мы загрузили, теперь нам нужно выставить фьюзы, для моего проекта фьюзы следующие: BOOTSZ1, BOOTSZ0, SUT1, CKSEL3, CKSEL2, выставляем их.

8) Затем ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.

Чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиоды чтения/записи. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи.

9) Теперь можно прошить МК, нажимаем кнопку Program All, и начнется процесс прошивки.

Если вы загружали только файл прошивки FLASH, .hex, то по ходу прошивки программа предложит загрузить файл EEPROM, жмем NO, т.е. НЕТ.

После чего пробегут еще 2 полоски и процесс прошивки завершится

Во время прошивки МК нельзя выключать или перезагружать ПК!

Теперь можете проверить МК, поставив его в панельку вашего устройства. Если вы хотите записать другую прошивку на этот же МК, новую прошивку можно записать поверх старой, или же стереть сначала старую, потом записать новую, как вам удобнее, разницы особой нету.

11) Чтобы стереть данные с МК нажимаем Program -> Erase Chip.

В данной программе можно считать данные FLASH или EEPROM с МК, или просмотреть Lock биты, установленные Fuse биты. Все это в меню Read (считать).

Решение некоторых проблем с AVR

C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково. Во первых микроконтроллеры подключайте строго к указанным выводам: RESET, VCC, GND, MOSI, MISO, SCK.

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

 Напомню еще раз, что у некоторых МК, например в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1.

Напряжение питания не должно быть ниже чем нужно, иначе МК не будет программироваться, программы будут выдавать ошибки о том, что не могут обнаружить МК.

Записывать левые программы, например программу, предназначенную для ATmega8 в ATmega48 нельзя.  Бывает, что вы запрограммировали МК и файлы прошивки удалили с компьютера, а найти прошивку чтобы прошить другой МК не можете найти. В таких случаях просто считываете программу с микроконтроллера, например с помощью CVAVR и сохраняете его на ПК, затем этой прошивкой прошиваете другой МК.

Если вы случайно запрограммировали какой то фьюз, после чего МК залочился, вспомните, что это был за фьюз, некоторые МК с неправильно зашитыми фьюзами удается восстановить, есть несколько способов как это сделать.

На К155ЛА3 можно собрать генератор чтобы восстановить МК с запрограммированным RSTDSBL, если вы выставили фьюзы на работу от внешнего генератора, подавая сигнал на вывод XTAL1 некоторые умудряются таким способом восстановить МК. Также фьюзами можно выставить тактирование от внешней RC цепочки.

В таком случае придется собрать RC цепочку, чтобы опять запустить МК. Ещё есть фьюзы DWEN, SPIEN…

, установив которые, вы отключите возможность пользоваться ISP программатором, тут поможет только параллельный программатор, другие программаторы (к примеру тритон) или приборы, которые встречаются на просторах интернета: например этот, или ATmega Fusebit Doctor, данный прибор я собирал, но почему то он не заработал должным образом, плата все еще валяется где то в ящике, как нибудь снова надо взяться за него. Честно говоря, у меня до сих пор валяются три залоченных микроконтроллера, две меги48 и одна мега8, однажды мегу 8ю, которая перестала определяться в программаторе PonyProg (работает через COM порт) я восстановил собрав программатор STK200. Притом знаете ли, свой первый купленный микроконтроллер я прошил с первого раза, и он до сих пор работает у меня в лабораторном блоке питания.

Источник: http://cxem.net/beginner/beginner75.php

AVR для начинающих.Урок 2.Hello world

Урок 2

Настало время написать первую программу для нашего микроконтроллера!

Для выполнения данного урока, Вам пригодится:

  1. Микроконтроллер (Подойдет почти любой микроконтроллер семейства AVR, однако , лучшим выбором по соотношению цена/функционал станет AtMega8).
  2. Светодиод (Так же любой, однако при покупке уточните его номинальный ток, и падение напряжения).
  3. Резистор (Какой именно, рассчитаем далее).
  4. Программатор.
  5. Провода соединительные.
  6. Источник питания 5v.
  7. Плата макетная (Для Вашего удобства).

Начнем с написания прошивки.

Прошивка(Программа) — Набор инструкций(команд) микроконтроллера, представленный в виде конечного файла(специального формата), используемого в дальнейшем при работе контроллера.

1.Открываем Atmel Studio, создаем проект на языке AVR C или AVR ASSEMBLER и выбираем модель Вашего микроконтроллера.

В окне редактора исходного кода пишем:

AVR C

AVR ASM

Урок 2.AVR Assembler hello world

Нажимаем Build->Build Solution. После выполнения данных операций, в папке проекта появится файл формата .hex. Это и есть наша прошивка!

Читайте также  AVR для начинающих. Урок 14. EEPROM.

2.Далее, собираем следующую схему:

Резистор R1 необходим для ограничения тока протекающего через светодиод LED1.

R1=(Uпитания-Uпитания светодиода)/Iсветодиода

Например, возьмем светодиод с напряжением питания 2.2В и током питания 10 мА(0.01А). Напряжение питания соответственно равно 5В.

Согласно приведенной выше формуле, получим:

R1=(5-2.2)/0.01=2.8/0.01=280 Ом.

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

В данном случае берем резистор стандартного значения 330 Ом.

А теперь настало время вдохнуть жизнь в нашу схему!

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

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

Вернув контроллер на его место в схеме(Разумеется, если Вам пришлось его отсоединить), подаем 5v питания на контроллер.

Если все сделано верно, вы увидите что светодиод зажигается и гаснет с постоянной частотой.

Поздравляем, Вы только что собрали Ваше первое устройство с использованием микроконтроллера!

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

Спасибо за внимание!

Администрация сайта MKPROG.RU.

Другие уроки цикла.

Копирование, воспроизведение, цитирование данного материала или его частей разрешено только с письменного разрешения администрации сайта MKPROG.RU.

Источник: http://mkprog.ru/avr/avr-dlya-nachinayushhih-urok-2-hello-world.html

Микроконтроллеры AVR (стр. 3 из 15)

Таблица 3.1. Выбор способа активизации прерывания по входу INT0

Таблица 3.2. Выбор способа активизации прерывания по входу INT1

В ряде микроконтроллеров PIC выбор фронта для активизации прерывания по входу INT определяется состоянием разряда 6 регистра OPTION: лог. 1 в этом разряде соответствует прерывание по нарастающему, а лог. 0 – по ниспадающему фронту сигнала. Для установки этого разряда в языке С обычно используют специальные функции.

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

Перечень векторов прерывания в некоторых моделях микроконтроллеров AVR может выглядеть следующим образом (табл. 3.3).

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

Таблица 3.3. Векторы прерываний

В микроконтроллерах PIC источники прерывания, кроме RESET, не рассматриваются в отдельности, им обычно соответствует один вектор, а в некоторых моделях – два вектора для прерываний с различной приоритетностью.

Определять, какое именно прерывание требует обслуживания, – задача программиста, и многие компиляторы с языка С предоставляют для этой цели готовые функции, освобождающие от необходимости самому “вычислять” источник прерывания.

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

В результате выполнения последней ассемблерной команды подпрограммы обработки прерывания (для микроконтроллеров AVR – это команда reti, а для микроконтроллеров PIC – retfie) адрес возврата извлекается из стека в счетчик команд, и выполнение программы продолжается.

Управление прерываниями в микроконтроллерах AVR

В микроконтроллерах AVR за управление прерываниями отвечают, главным образом, четыре регистра:

-GIMSK (General Interrupt Mask Register) – разрешает или запрещает внешние прерывания по входу INT0/INT1;

-GIFR (General Interrupt Flag Register) – регистрфлаговвнешнихпрерываний;

-TIMSK (Timer/Counter Interrupt Mask Register) – регистр маскирования прерываний от таймера/счетчика Т/С0 и Т/С1;

-TIFR (Timer/Counter Interrupt Flag Register) – регистр флагов прерываний от таймеров/счетчиков.

О состоянии прерывания сигнализирует соответствующий флаг, который устанавливается или сбрасывается в регистре флагов. Даже если в регистре маски прерываний установлен соответствующий отдельный разряд разрешения прерывания, то прерывания могут активизироваться только тогда, когда в регистре состояния SREG установлен разряд общего разрешения прерываний I (разряд 7).

Если это имеет место, и наступает прерывание, то выполнение программы ответвляется по соответствующему адресу (см. табл. 1.4) и разряд общего разрешения прерываний I в регистре SREG сбрасывается в состояние лог. 0, блокируя тем самым последующие прерывания.

Если требуется прервать подпрограмму другим прерыванием, то после входа в подпрограмму обработки прерывания программа пользователя должна установить флаг I в лог. 1.

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

Регистр GIMSK

Регистр GIMSK (рис. 3.1), расположенный в области ввода/вывода по адресу 0x003В (адрес в SRAM – 0x005В), используется для разрешения внешних прерываний.

Рис. 3.1. Структура регистра GIMSK микроконтроллеров AVR

Если разряд INT1/INT0 установлен в лог. 1, то внешнее прерывание по входу INT1/INT0 будет разрешено до тех пор, пока установлен в лог. 1 разряд I в регистре состояния SREG.

Регистр GIFR

Состояние внешнего прерывания определяется по регистру GIFR (рис. 3.2), который расположен в области ввода/вывода по адресу 0х003А (адрес SRAM – 0х005А).+

Рис. 3.2. Структура регистра GIFR микроконтроллеров AVR

Флаг INTF1/INTF0 устанавливается в лог. 1, если возникает внешнее прерывание по сигналу на выводе INT1/INT0. При входе в подпрограмму обработки прерывания этот разряд переводится аппаратно в исходное состояние лог. 0.

Регистры TIMSK и TIFR

Регистр TIMSK (рис. 3.3), расположенный в области ввода/вывода по адресу 0x0039 (адрес в SRAM – 0x0059), используется для разрешения прерываний от таймеров/счетчиков.

Рис. 3.3. Структура регистра TIMSK микроконтроллеров AVR

Состояние прерываний, имеющих отношение к таймерам/счетчикам микроконтроллеров AVR, определяется по регистру TIFR (рис. 3.4), который расположен в области ввода/вывода по адресу 0x0038 (адрес SRAM – 0x0058).

Рис. 3.4. Структура регистра TIFR микроконтроллеров AVR

Когда разряд TOIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при переполнении Т/С1. В случае переполнения в регистре TIFR устанавливается флаг TOV1.

Если разряд OCIE1A и разряд I в регистре состояния SREG установлены в лог. 1, то разрешено прерывание при совпадении содержимого регистра сравнения А с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1 А.

Если разряд OCIE1B и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при совпадении содержимого регистра сравнения В с текущим состоянием Т/С1. В случае совпадения, в регистре TIFR устанавливается флаг OCF1B.

Если разряд TICIE1 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при выполнении условия захвата. Когда возникает срабатывание по захвату, в регистре TIFR устанавливается флаг ICF1.

Если разряд TOIE0 и разряд I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание при переполнении таймера/счетчика Т/СО. В таком случае, в регистре TIFR устанавливается флаг TOV0.

Установка в лог. 1 одного из флагов в регистре TIFR приводит к переходу по соответствующему вектору прерывания. При входе в подпрограмму обработки прерывания, флаг в регистре TIFR аппаратно сбрасывается в лог. 0.

В микроконтроллерах PIC управление прерываниями реализовано с помощью регистров специальных функций, и отличается от устройства к устройству. К примеру, в микроконтроллерах PIC12C6x, PIC14000, Р1С16х для этой цели используются регистры INTCON (рис. 3.5), PIE и PIR, а программы обработки прерываний всегда начинают исполняться с адреса 0x004.

Рис. 3.5. Регистр INTCON микроконтроллеров PtC12C6x, PIC14000, Р1С16х

Разряд GIE – это флаг общего разрешения прерываний. Если он установлен в лог. 1, то все немаскированные прерывания разрешены, если же он сброшен в лог. 0, то все прерывания запрещены.

Разряд PEIE регистра INTCON может использоваться в качестве флага разрешения всех прерываний от периферии, определяемых с помощью регистров PIE и PIR.

Флаг TOIE разрешает (лог. 1) или запрещает (лог. 0) прерывания при переполнении таймера TMR0), а флаг TOIF определяет запрос на соответствующее прерывание.

Разряд INTE – флаг разрешения внешнего прерывания по входу INT, а разряд INTF – флаг запроса на прерывания по этому входу. Аналогичное значение, но для порта В имеют разряды RBIE и RBIF.

Регистр PIE содержит флаги разрешения прерываний от периферийных устройств, а регистр PIR – соответствующие флаги запросов на прерывание. Позиции разрядов в этих регистрах для различных микроконтроллеров отличаются.

Источник: http://MirZnanii.com/a/113552-3/mikrokontrollery-avr-3

Микроконтроллеры AVR | avr | programming

Источник: http://microsin.net/programming/avr/getting-started.html

Обзор микроконтроллеров AVR

AVR — семейство восьмибитных микроконтроллеров компании Atmel. Год разработки — 1996.

Содержание

История создания архитектуры AVR

Идея разработки нового RISC-ядра принадлежит двум студентам Norwegian University of Science and Technology (NTNU) из норвежского города Тронхейма (Trondheim) — Альфу Богену (Alf-Egil Bogen) и Вегарду Воллену (Vegard Wollen).

В 1995 году Боген и Воллен решили предложить американской корпорации Atmel, которая была известна своими чипами с Flash-памятью, выпускать новый 8-битный RISC-микроконтроллер и снабдить его Flash-памятью для программ на одном кристалле с вычислительным ядром.

Идея была одобрена Atmel Corp., и было принято решение незамедлительно инвестировать в данную разработку. В конце 1996 года был выпущен опытный микроконтроллер AT90S1200, а во второй половине 1997-го корпорация Atmel приступила к серийному производству нового семейства микроконтроллеров, к их рекламной и технической поддержке.

Новое ядро было запатентовано и получило название AVR. Существует несколько трактовок данной аббревиатуры. Кто-то утверждает, что это Advanced Virtual RISC, другие полагают, что не обошлось здесь без Alf Egil Bogen Vegard Wollan RISC.

Описание архитектуры

Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединённых в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны:

  • три «сдвоенных» 16-битных регистра-указателя X (r26:r27), Y (r28:r29) и Z (r30:r31);
  • некоторые команды работают только с регистрами r16..r31;
  • результат умножения (в тех моделях, в которых есть модуль умножения) всегда помещается в r0:r1.

Система команд

Система команд микроконтроллеров AVR весьма развита и насчитывает в различных моделях от 90 до 133 различных инструкций. Большинство команд занимает только 1 ячейку памяти (16 бит). Большинство команд выполняется за 1 такт.

Всё множество команд микроконтроллеров AVR можно разбить на несколько групп:

  • команды логических операций;
  • команды арифметических операций и команды сдвига;
  • команды операции с битами;
  • команды пересылки данных;
  • команды передачи управления;
  • команды управления системой.

Управление периферийными устройствами осуществляется через адресное пространство данных. Для удобства существуют «сокращённые команды» IN/OUT.

Семейства микроконтроллеров

Стандартные семейства:

  • tinyAVR:
    • флеш-память 16 Кб, SRAM 512 б, EEPROM 512 б;
    • число линий ввод-вывода 4-18 (общее количество выводов 6-32);
    • ограниченный набор периферийных устройств;
  • megaAVR:
    • флеш-память 256 Кб, SRAM 8 Кб, EEPROM 4 Кб;
    • число линий ввода-вывода 23-86 (общее количество выводов 20-100);
    • аппаратный умножитель;
    • расширенная система команд и периферийных устройств;
  • XMEGA AVR:
    • флеш-память 384 Кб, SRAM 32 Кб, EEPROM 4 Кб;
    • четырёхканальный DMA-контроллер;
    • Инновационная система обработки событий.

Примечание: здесь приведены максимальные значения объёмов памяти.

На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные приложения:

  • со встроенными интерфейсами USB, CAN, контроллером LCD;
  • со встроенным радиоприёмо-передатчиком — серии ATAхxxx, ATAMxxx;
  • для управления электродвигателями — серия AT90PWMxxxx;
  • для автомобильной электроники;
  • для осветительной техники.

Версии контроллеров

ATmega/tinyXXXБазовая версия.ATXXXLВерсии контроллеров, работающих на пониженном (Low) напряжении питания, обычно 1,8 или 2,7 В.ATXXXPМалопотребляющие версии (до 100 нА в режиме Power-down), применена технология picoPower (анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.

ATXXXAУменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями).

Микроконтроллеры «А» и «не-А» с точки зрения программатора ничем не отличаются.АТmegaXXX-PIКорпус DIP.АТmegaXXX-PUКорпус DIP, бессвинцовый (Pb-free) припой.АТmegaXXX-AIКорпус TQFP.АТmegaXXX-AUКорпус TQFP, бессвинцовый (Pb-free) припой.

Цифры 8/10/16/20 перед индексом означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания.

Устройства ввода/вывода МК

МК AVR имеют развитую периферию:

  • многофункциональные, двунаправленные GPIO порты ввода/вывода со встроенными подтягивающими резисторами. Конфигурация портов в/в задаётся программно;
  • в качестве источника тактовых импульсов может быть выбран:
    • кварцевый резонатор;
    • внешний тактовый сигнал;
    • внутренний RC-генератор (частота 1, 2, 4, 8 МГц);
  • внутренняя флеш-память команд до 256 KБ (не менее 10 000 циклов перезаписи);
  • отладка программ осуществляется с помощью интерфейсов JTAG или debugWIRE:
    • сигналы JTAG (TMS, TDI, TDO, и TCK) мультиплексированы на порт ввода/вывода. Режим работы — JTAG или порт — задаётся соответствующим битом в регистре fuses. МК AVR поставляются с включённым интерфейсом JTAG;
  • внутренняя EEPROM данных до 4 КБ (100 000 циклов);
  • внутренняя SRAM до 8 KБ время доступа 1 такт;
  • внешняя память объёмом до 64 КБ (Mega8515 и Mega162);
  • таймеры c разрядностью 8, 16 бит;
  • ШИМ-модулятор (PWM) 8-, 9-, 10-, 16-битный;
  • аналоговые компараторы;
  • АЦП (ADC) с дифференциальными входами, разрядность 10 бит (12 для XMEGA AVR):
    • программируемый коэффициент усиления перед АЦП 1, 10 и 200;
    • опорное напряжение 2,56 В;
  • различные последовательные интерфейсы, включая:
    • двухпроводной интерфейс TWI, совместимый с I²C;
    • универсальный синхронно/асинхронный приёмопередатчик UART/USART;
    • синхронный последовательный порт Serial Peripheral Interface (SPI);
  • USB серия AT90USBxxxx;
  • CAN серия AT90CANxxx;
  • LCD серии ATmega169 и ATmega329;
  • Датчики температуры ATtiny25, ATtiny45, ATtiny85;

Примечание: не все периферийные устройства могут быть включены программно. Бит в регистре fuses может быть изменён только программатором.

AVR-GCCПорт GCC (компилятор) для AVR. Есть возможность интеграции с AVR Studio и Eclipse (AVR Eclipse Plugin).SimulAVRСимулятор ядра микроконтроллера AVRKontrollerLabIDE + работа с RS-232 + отладчик.Code::BlocksIDE.AVR-GDBПорт GDB (отладчик) для AVR.DDDГрафический интерфейс к avr-gdb.WinAVRКомплект разработки, включающий в себя: Programmers Notepad — программистский блокнот, компиляторный комплект AVR-GCC , avrdude для прошивки и avr-gdb для отладки (раздел на RadioProg.RU).AvrdudeПопулярное средство для прошивки микроконтроллеров.V-USBПрограммная реализация протокола USB для микроконтроллеров AVR.Загрузчики (bootloader) для микроконтроллеров AVRТехнология, позволяющая использовать стандартные интерфейсы (RS-232, CAN, USB, I2C и проч.) для загрузки программы в кристалл AVR.PonyProgУниверсальный программатор, подключение через COM-порт, LPT-порт (подерживается и USB эмулятор COM-порта) поддерживает МК AVR, PIC и др.AVR StudioIDE + ассемблер + отладчик. Freeware.CodeVisionAVRКомпилятор C и программатор — CVAVR + генератор начального кода.ICC AVRКомпилятор C + генератор начального кода.AtmanAvrКомпилятор C + отладчик + генератор начального кода.IAR AVRIDE C/C++. сайт разработчика.VMLABСимулятор AVR.ProteusМощнейший симулятор электрических цепей, компонентов, включая различные МК и др. периферийное оборудование.Bascom AVRКомпилятор Basic + отладчик + программатор.E-LAB AVRcoКомпилятор Pascal.MikroEМожество компиляторов для разных языков.Algorithm BuilderВизуальная среда разработки программ для AVR в виде блок-схем включает также эмулятор и программатор. Используемый язык программирования — псевдоассемблер. Freeware.ForthInc Forth-CompilerКомпилятор языка Forth.MPE Forth-CompilerКомпилятор языка Forth.AVRealПрограмматор, подключение LPT (практически любой адаптер, в том числе совместим с программатором в CodeVisionAVR) либо USB (адаптеры на основе FT2232C/L/D, FT2232H, FT4232H). Freeware.

Также архитектура AVR позволяет применять операционные системы при разработке приложений, например FreeRTOS, uOS, scmRTOS, ChibiOS/RT, AvrX (ядро реального времени).

Источники:

Источник: https://radioprog.ru/post/5

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

Начал изучать AVR я не сразу. Сначала работал с семейством MCS51 – Intel 8751, AT89C51, AT89C52 (где-то с 1991 года), поскольку другой альтернативы попросту не было.

Потом с появлением PIC начал облизываться и на них (плюсы известные – низкая цена, малое энергопотребление, высокая производительность на простых задачах), но из-за ужасного ассемблера, неудобства написания прошивок к ним и дороговизны внутрисхемного эмулятора PIC у меня не прижились (сильно коробило от метода отладки скомпилировал/прошил/попробовал – и то на одном-единственном PIC16F84, хотя многие энтузиасты так программы и писали). Со временем, конечно, многое изменилось к лучшему, но как говорится – осадочек остался, и поезд PIC ушел. До появления семейства ATtiny на AVR я тоже посматривал косо – несмотря на “драматическое”, как говорят америкосы, увеличение быстродействия, уменьшение энергопотребления. Под MCS51 у меня уже был купленный дорогущий эмулятор, и пока возможности старой платформы устраивали. Но вот появились ATtiny и ATmega, принеся с собой такие вкусности, как дармовые многоканальные встроенные ADC, PWM, дешевую аппаратную отладку с помощью JTAG и debugWIRE, и я не выдержал – бастион MCS51 пал. AVR оказался не так страшен, как PIC, поскольку имеет очень приятный и логичный ассемблер. Еще приятная возможность – можно подобрать модель AVR такую, что она по цоколевке будет совпадать с процессором платформы MCS51 – AT89C51, AT89C2051, так что можно сделать “апгрейд” старого устройства, практически не перепаивая схему. Потратил немного времени на изучение (не больше месяца!..), немного (по-настоящему немного!) денег на “взрослый” внутрисхемный эмулятор Atmel AVR JTAGICE mkII, см. [3] (для тех же целей можно купить намного более дешевый AVR Dragon) и теперь для меня альтернативы AVR просто нет – писать больше под MCS51 нет смысла. Итак, как лучше изучать AVR, с чего начать?

Рекомендую действовать примерно по такому плану:

1. Нужно ознакомиться с основными возможностями архитектуры, для этого начните с [1]. Без напрягов просмотрите бегло эти ссылки. Вы наверняка уже имеете некоторые требования к микроконтроллерам по ресурсам (памяти, возможностям, количеству ножек и т. п.) – выберите из таблицы один, максимально подходящий для Вас.

Я со своей стороны рекомендую те, которые поддерживают отладку debugWIRE – это семейство ATtiny и ATmega, для них есть возможность относительно недорого купить внутрисхемный эмулятор Atmel AVR JTAGICE mkII (коммерческое название AT JTAGICE2).

Я выбрал ATmega16 и ATtiny24 (потом еще зацепил и ATtiny45).

2. Скачайте из Интернета datasheet для выбранного микроконтроллера, попытайтесь найти его перевод на русский. Сейчас информацию на русском найти уже не составляет большого труда. Проштудируйте даташит, новые сведения оттуда, которые считаете важными и нужными, законспектируйте – это поможет запомнить материал, а также пользоваться потом конспектом как удобным справочником.

3. Выберите IDE и инструменты для написания программ. Советую:

AVR Studio 4AVR Studio 5, см. [2].
Позволяет писать проги на популярном C и на голом ассемблере.

Доступен для бесплатного использования, поддерживает внутрисхемный эмулятор Atmel AVR JTAGICE mkII и другие, встроенный отладчик (симулятор). Работает совместно с пакетом WinAVR, образуя мощную среду компиляции и программных библиотек.

 Доступна отладка по исходному коду C, ASM, дизассемблированным инструкциям машинного кода (см. [4]).

IAR Embedded Workbench AVR v. 4.12 (или более поздняя).
Платная программа, поддерживает внутрисхемный эмулятор AVR JTAGICE mkII и другие, есть ассемблер и C, много возможностей.

CodeVisionAVRC Compiler, Integrated Development Environment, Automatic Program Generator и In-System Programmer (ISP) для Atmel AVR Family of Microcontrollers Version:  1.25.2 Beta1 Standard

В бесплатной версии достаточно возможностей, есть поддержка Atmel’s In-Circuit Emulators: ICE200, JTAG-ICE(правда, непонятно, поддерживается ли AT JTAGICE2).

Visual Micro Lab или VMLAB Release 3.12
 Бесплатная продвинутая система отладки без внутрисхемного эмулятора.

BASCOM-AVR
Просто сказать “продвинутая IDE с языком программирования Basic” – значит не сказать ничего. Посетите сайт разработчика, скачайте, попробуйте. См. также [5].

[Ссылки]

1. AVR: полезные ссылки.
2. AVR Studio 4.13, 4.14, 4.19, 5.0 и не только. 
3. Atmel AVR JTAGICE mkII.
4. AVR JTAGICE mkII: отладка программы ATtiny24, ATtiny45 на C. AVR JTAGICE mkII: отладка программы ATmega16 на C.
5. BASCOM-AVR IDE.