Программирование avr микроконтроллеров

Программирование микроконтроллеров AVR

AVR-микроконтроллеры предоставляют пользователю несколько различных интерфейсов для программирования. Это последовательное программирование при высоком напряжении, последовательное программирование при низком напряжении через SPI, параллельное программирование при высоком напряжении и программирование по интерфейсу JTAG. Первый тип программирования встречается только в моделях AVR семейства ATtiny, последний – доступен некоторым моделям старшего семейства. Модели ATmega с наиболее развитой периферией могут поддерживать до трех различных интерфейсов программирования.

Подавляющее большинство AVR-микроконтроллеров обладают также способностью самопрограммирования, благодаря чему содержимое памяти программ можно модифицировать непосредственно из пользовательской программы. Кроме этого FLASH-память может быть перепрограммирована в режиме отладки через однопроводной интерфейс dW, имеющийся в ряде моделей ATmega и во всех новых моделях ATtiny.

Программирование при высоком напряжении (параллельное и последовательное) требует значительного числа выводов микроконтроллера и дополнительного источника напряжения 12 В. По этой причине конструкция программаторов достаточно сложна. При высоковольтном программировании достигается наибольшая скорость записи и предоставляется максимальный доступ к ресурсам AVR. Чаще всего этот вид программирования применяется при крупносерийном заводском производстве.

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

Низковольтное последовательное программирование через SPI, наиболее распространено. Это способ стоит признать основным при программировании AVR-микроконтроллеров. Его поддерживают все модели с ядром AVR, за исключением двух устаревших представителей младшего семейства ATtiny11x и ATtiny28x. В данном разделе будет приведено описание двух программаторов работающих в подобном режиме. Первый из них можно рекомендовать для быстрого старта. Он имеет простую конструкцию и работает под управлением популярной радиолюбительской программы PonyProg2000. Второй, намного более совершенный, является функциональным аналогом AVR ISP фирмы ATMEL. Этот программатор интегрируется с IDE AVR Studio и позволяет реализовать алгоритмы программирования с максимально возможной точностью.

Особенности последовательного низковольтного программирования

Для взаимодействия программатора с микроконтроллером при последовательном низковольтном программировании используется аппаратный модуль SPI. Это очень практичное решение, позволяющее использовать минимальное число выводов и изменять алгоритмы работы устройства предварительно запаянного на плату. В виду последней причины программирование через SPI называют также еще внутрисхемным программированием или ISP (In System Programming).

Внутрисхемное программирование потребует задействовать у микроконтроллера в общей сложности 5 выводов. Это 3 линии модуля SPI (MISO, MOSI, SCK), вывод RESET и общий провод GND. В моделях семейства ATmega, имеющих на борту 64 и более кбайт FLASH-памяти, вместо MISO, MOSI используются выводы PDO и PDI, соответственно. В случае если программатор и микроконтроллер получают питание от одного источника, то дополнительно понадобится также вывод VCC, соединяющий шины питания. Перевод микроконтроллера в режим программирования осуществляется подачей низкого логического уровня на линию RESET. Длина шлейфа, соединяющего программатор с устройством, не должна превышать 15…20 см.


Рис.1а Схема подключения программатора при
внутрисхемном программировании одного микроконтроллера

На рис.1а показана схема соединения программатора с AVR-микроконтроллером, при программировании через ISP. Для более надежной работы последовательно линиям MISO, MOSI, SCK рекомендуется включать сопротивления небольшого номинала. Напряжение питания программатора и устройства не должно иметь больших различий. Внутрисхемное программирование двух и более микроконтроллеров также возможно (рис.1б). В этом случае необходимо помнить об одном важном условии: в момент программирования на шине должен находиться только один активный микроконтроллер. Поэтому при проектировании платы заранее нужно предусмотреть переключатели (джампера J1, J2 на рис.1б), с помощью которых можно выборочно подавать напряжение на каждый программируемый микроконтроллер. После программирования модуль SPI или линии ввода-вывода, совпадающие с MISO, MOSI и SCK, могут быть использованы по своему прямому назначению.

При внутрисхемном программировании для чтения и записи доступны FLASH–память программ, EEPROM-память данных, биты защиты и управляющие FUSE–биты. Кроме этого могут быть считаны калибровочные ячейки и ячейки идентификатора.


Рис.1а Схема подключения программатора при
внутрисхемном программировании 2-х и более микроконтроллеров

Изменения некоторых FUSE–битов необходимо производить с большой осторожностью. Особенно если демонтировать микроконтроллер уже не представляется возможным. Главным образом это касается битов RSTDISBL и DWEN (если таковые имеется). Сброс любого из них в дальнейшем сделает невозможным использование линии RESET микроконтроллера. При RSTDISBL=0 вывод RESET настраивается как линия порта ввода-вывода, а при DWEN=0 – вход RESET служит однопроводным отладочным интерфейсом dW. Естественно, что в обоих случаях работа программатора с микроконтроллером будет заблокирована. Кроме того во время внутрисхемного программирования микроконтроллеры AVR должны работать от собственного источника тактовой частоты, выбор которого осуществляется битами CKSEL3:CKSEL0. Если их настройка произведена некорректно (например, вместо внутреннего RC-генератора, выбран внешний кварцевый резонатор), то устройство может вообще отказаться работать. Еще один FUSE–бит, о котором следует помнить, – это SPIEN. SPIEN не доступен во время последовательного низковольтного программирования. Однако его установка при программировании в каком-либо другом режиме запретит работу модуля SPI. Напомним, что активизированным FUSE–битам соответствует состояние лог.0.

Все поступающие в продажу микроконтроллеры AVR изначально оптимизированы для внутрисхемного программирования. Биты DWEN, RSTDISBL, SPIEN имеют состояние 1, 1 и 0 соответственно, а CKSEL3:CKSEL0 установлены таким образом, что в качестве источника тактовой частоты запускается внутренний RC-генератор (как правило, на частоте 1 МГц), не требующий ни каких дополнительных деталей.

Мир микроконтроллеров

Популярное

  • Устройство и программирование микроконтроллеров AVR для начинающих – 143
  • Трехканальный термостат, терморегулятор, таймер на ATmega8 – 71
  • Двухканальный термостат, терморегулятор на ATmega8 – 67

Программирование микроконтроллеров AVR

Программирование микроконтроллеров AVR для начинающих

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


Рано или поздно, любой радиолюбитель (я так думаю), приходит к мысли о применении в своих разработках микроконтроллеров. Микроконтроллер позволяет существенно «облегчить» радиолюбительскую конструкцию, сделать ее проще и намного функциональнее.

Что нужно для того, чтобы начать пользоваться всеми возможностями микроконтроллеров? Я считаю, что не так уж и много. Главное в этом деле — желание. Будет желание, будет и результат.

В этом разделе (и в разделе «Устройство AVR») сайта я постараюсь помочь начинающим «микроконтроллерщикам» сделать первый, он же самый трудный шаг навстречу микроконтроллерам — попробуем разобраться в устройстве и программировании микроконтроллеров AVR семейства ATtiny и ATmega.

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

В своих статьях я буду опираться на материалы из публикаций популярных авторов микроконтроллерной тематики: Рюмика С.М., Белова А.В., Ревича Ю.В., Евстифеева А.В., Гребнева В.В., Мортона Д., Трамперта В., Фрунзе А.В. и Фрунзе А.А. (и многих других), а также материалы радиолюбительских сайтов. Ну и, может быть, немного своих «умных мыслей».

Программирование микроконтроллеров AVR фирмы Atmel

1. Микроконтроллеры — первый шаг

Эта статья, как и все последующие, — маленький шажок в мир микроконтроллеров. И таких «шажков» у нас будет много, пока не дойдем до того момента, когда сможем сказать: «Микроконтроллер — последний шаг». Но и это, скорее всего, из области фантастики — нельзя объять необъятное, — мир микроконтроллеров постоянно развивается и совершенствуется. Наша задача — сделать первый шаг, логическим итогом которого должна стать первая, самостоятельно разработанная и собранная конструкция на микроконтроллере.

2. Системы счисления: десятичная, двоичная и шестнадцатиричная

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

3. Логические операции, логические выражения, логические элементы

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

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

5. Прямой, обратный и дополнительный коды двоичного числа

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

6. USBASP программатор для микроконтроллеров AVR — идеальное решение для начинающих, и не только

Читайте также:  Usb password keeper

Сегодня мы рассмотрим как, без особых затрат и быстро, запрограммировать любой микроконтроллер AVR поддерживающий режим последовательного программирования (интерфейс ISP) через USB-порт компьютера. В качестве программатора мы будем использовать очень простой и популярный программатор USBASP, а в качестве программы — AVRdude_Prog V3.3, которая предназначена для программирования МК AVR.

7. Программа AVRDUDE_PROG: программирование микроконтроллеров AVR ATmega и ATtiny

Популярнейшая программа AVRDUDE_PROG 3.3 предназначена для программирования микроконтроллеров AVR ATmega и ATtiny

8. Основы программирования микроконтроллеров AVR

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

9. Русификация программы Atmel Studio

В этой статье мы поговорим о проблемах русификации программы Atmel Studio, как перевести программу на русский (или другой) язык, и как сделать более удобной работу программы с программатором USBASP. После установки программы Atmel Studio весь интерфейс будет на английском языке. Кому-то, кто знаком с английским, или уже привык работать с программами с английским интерфейсом, это вполне устроит. Меня лично, такой подход создателей программы к великому и могучему не устраивает, мне более комфортно работать с русскими меню.

10. Введение в язык программирования С (Си) для микроконтроллеров

В этой статье будут рассмотрены основные сведение о языке С, структура программы на языке С, дано понятие о функциях, операторах и комментариях данного языка программирования.

11. Переменные и константы в языке С (Си) для микроконтроллеров AVR

В этой статье будут рассмотрены типы переменных в языке С (Си) для микроконтроллеров AVR, объявление переменных, способы задания констант, будет дан обзор арифметических операций языка С, присваивания, инкремента и декремента.

12. Управление портами микроконтроллеров AVR на языке С (Си)

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

13. Циклы в языке С (Си) для микроконтроллеров AVR

В данной статье будут рассмотрены циклы в языке программирования Си для микроконтроллеров AVR. Будут рассмотрены циклы типа «для» (for) и циклы типа «пока» (while), будет показано как осуществить принудительное прерывание цикла и организовать бесконечный цикл.

14. Массивы в программировании микроконтроллеров AVR

В данной статье мы рассмотрим основы использования массивов в языке С для микроконтроллеров AVR и рассмотрим их практическое применение в программе для изменения цифр на семисегментном индикаторе.

(24 голосов, оценка: 4,71 из 5)

Вы еще не программируете микроконтроллеры? Тогда мы идем к вам!

Здравствуйте, уважаемые Хабражители!

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

Тема микроконтроллеров меня заинтересовала очень давно, году этак в 2001. Но тогда достать программатор по месту жительства оказалось проблематично, а о покупке через Интернет и речи не было. Пришлось отложить это дело до лучших времен. И вот, в один прекрасный день я обнаружил, что лучшие времена пришли не выходя из дома можно купить все, что мне было нужно. Решил попробовать. Итак, что нам понадобится:

1. Программатор

На рынке предлагается много вариантов — от самых дешевых ISP (In-System Programming) программаторов за несколько долларов, до мощных программаторов-отладчиков за пару сотен. Не имея большого опыта в этом деле, для начала я решил попробовать один из самых простых и дешевых — USBasp. Купил в свое время на eBay за $12, сейчас можно найти даже за $3-4. На самом деле это китайская версия программатора от Thomas Fischl. Что могу сказать про него? Только одно — он работает. К тому же поддерживает достаточно много AVR контроллеров серий ATmega и ATtiny. Под Linux не требует драйвера.

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

Слева на плате — тот самый микроконтроллер, который мы собираемся прошивать.

2. Микроконтроллер

С выбором микроконтроллера я особо не заморачивался и взял ATmega8 от Atmel — 23 пина ввода/вывода, два 8-битных таймера, один 16-битный, частота — до 16 Мгц, маленькое потребление (1-3.6 мА), дешевый ($2). В общем, для начала — более чем достаточно.

Под Linux для компиляции и загрузки прошивки на контроллер отлично работает связка avr-gcc + avrdude. Установка тривиальная. Следуя инструкции, можно за несколько минут установить все необходимое ПО. Единственный ньюанс, на который следует обратить внимание — avrdude (ПО для записи на контроллер) может потребовать права супер-пользователя для доступа к программатору. Выход — запустить через sudo (не очень хорошая идея), либо прописать специальные udev права. Синтаксис может отличаться в разных версиях ОС, но в моем случае (Linux Mint 15) сработало добавление следующего правила в файл /etc/udev/rules.d/41-atmega.rules :

После этого, естественно, необходим перезапуск сервиса

Компилировать и прошивать без проблем можно прямо из командной строки (кто бы сомневался), но если проектов много, то удобнее поставить плагин AVR Eclipse и делать все прямо из среды Eclipse.

Под Windows придется поставить драйвер. В остальном проблем нет. Ради научного интереса попробовал связку AVR Studio + eXtreme Burner в Windows. Опять-таки, все работает на ура.

Начинаем программировать

Программировать AVR контроллеры можно как на ассемблере (AVR assembler), так и на Си. Тут, думаю, каждый должен сделать свой выбор сам в зависимости от конкретной задачи и своих предпочтений. Лично я в первую очередь начал ковырять ассемблер. При программировании на ассемблере архитектура устройства становится понятнее и появляется ощущение, что копаешься непосредственно во внутренностях контроллера. К тому же полагаю, что в особенно критических по размеру и производительности программах знание ассемблера может очень пригодиться. После ознакомления с AVR ассемблером я переполз на Си.

После знакомства с архитектурой и основными принципами, решил собрать что-то полезное и интересное. Тут мне помогла дочурка, она занимается шахматами и в один прекрасный вечер заявила, что хочет иметь часы-таймер для партий на время. БАЦ! Вот она — идея первого проекта! Можно было конечно заказать их на том же eBay, но захотелось сделать свои собственные часы, с блэк… эээ… с индикаторами и кнопочками. Сказано — сделано!

В качестве дисплея решено было использовать два 7-сегментных диодных индикатора. Для управления достаточно было 5 кнопок — “Игрок 1” , “Игрок 2” , “Сброс” , “Настройка” и “Пауза” . Ну и не забываем про звуковую индикацию окончания игры. Вроде все. На рисунке ниже представлена общая схема подключения микроконтроллера к индикаторам и кнопкам. Она понадобится нам при разборе исходного кода программы:

Разбор полета

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

Рассмотрим каждую функцию в отдельности.

Настройка портов ввода/вывода происходит очень просто — в регистр DDRx (где x — буква, обозначающая порт) записивается число, каждый бит которого означает, будет ли соответствующий пин устройством ввода (соответствует 0) либо вывода (соответствует 1). Таким образом, заслав в DDRB и DDRD число 0xFF, мы сделали B и D портами вывода. Соответственно, команда DDRC = 0b11100000; превращает первые 5 пинов порта C во входные пины, а оставшиеся — в выходные. Команда PORTC |= 0b00011111; включает внутренние подтягивающие резисторы на 5 входах контроллера. Согласно схеме, к этим входам подключены кнопки, которые при нажатии замкнут их на землю. Таким образом контроллер понимает, что кнопка нажата.

Далее следует настройка двух таймеров, Timer0 и Timer1. Первый мы используем для обновления индикаторов, а второй — для обратного отсчета времени, предварительно настроив его на срабатывание каждую секунду. Подробное описание всех констант и метода настройки таймера на определенноый интервал можно найти в документации к ATmega8.

При срабатывании таймера управление передается соответствующему обработчику прерывания. В нашем случае это обработчик TIMER0_OVF_vect, который вызывает процедуру вывода времени на индикаторы, и TIMER1_COMPA_vect, который обрабатывает обратный отсчет.

Вывод на индикаторы

Функция display использует метод динамической индикации. Дело в том, что каждый отдельно взятый индикатор имеет 9 контактов (7 для управления сегментами, 1 для точки и 1 для питания). Для управления 4 цифрами понадобилось бы 36 контактов. Слишком расточительно. Поэтому вывод разрядов на индикатор с несколькими цифрами организован по следующему принципу:

Напряжение поочередно подается на каждый из общих контактов, что позволяет высветить на соответствующем индикаторе нужную цифру при помощи одних и тех же 8 управляющих контактов. При достаточно высокой частоте вывода это выглядит для глаза как статическая картинка. Именно поэтому все 8 питающих контактов обоих индикаторов на схеме подключены к 8 выходам порта D, а 16 управляющих сегментами контактов соединены попарно и подключены к 8 выходам порта B. Таким образом, функция display с задержкой в 0.25 мс попеременно выводит нужную цифру на каждый из индикаторов. Под конец отключаются все выходы, подающие напряжение на индикаторы (команда PORTD = 0; ). Если этого не сделать, то последняя выводимая цифра будет продолжать гореть до следующего вызова функции display, что приведет к ее более яркому свечению по сравнению с остальными.

Эта функция по очереди опрашивает все 5 кнопок и обрабатывает нажатие, если таковое случилось. Нажатие регистрируется проверкой bit_is_clear(BUTTON_PIN, bit) , т.е. кнопка нажата в том случае, если соответствующий ей вход соединен с землей, что и произойдет, согласно схеме, при нажатии кнопки. Задержка длительностью DEBOUNCE_TIME и повторная проверка нужна во избежание множественных лишних срабатываний из-за дребезга контактов. Сохранение статуса нажатия в соответствующих битах переменной _pressed используется для исключения повторного срабатывания при длительном нажатии на кнопку.
Функции обработки нажатий достаточно тривиальны и полагаю, что в дополнительных комментариях не нуждаются.

Читайте также:  Внешняя направленная антенна типа яги wi-fi 12дб

Прототип был собран на макетной плате:

После тестирования прототипа пришло время все это добро разместить в корпусе, обеспечить питание и т.д.

Ниже показан окончательный вид устройства. Часы питаются от 9-вольтовой батарейки типа “Крона”. Потребление тока — 55 мА.

Заключение

Потратив $20-25 на оборудование и пару вечеров на начальное ознакомление с архитектурой микроконтроллера и основными принципами работы, можно начать делать интересные DIY проекты. Статья посвящается тем, кто, как и я в свое время, думает, что начать программировать микроконтроллеры — это сложно, долго или дорого. Поверьте, начать намного проще, чем может показаться. Если есть интерес и желание — пробуйте, не пожалете!

Удачного всем программирования!

P.S. Ну и напоследок, небольшая видео-демонстрация прототипа:

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ AVR

Всем привет! Хочу рассказать о своем USB программаторе для микроконтроллеров AVR. Данная информация очень пригодится тем, кто только начинает осваивать микроконтроллеры. Когда я программировал свой первый контроллер для металлоискателя, то с большим трудом нашел нужную информацию, благодаря форуму. Теперь написал эту статью, чтобы упростить путь осваивания микроконтроллеров для других людей. Собрать его сможет любой желающий, у которого есть опыт паяния smd элементов. Программатор имеет достаточно небольшие размеры – как обычная флешка.

Данный программатор позволяет прошивать любые микроконтроллеры семейства AVR. Его главная особенность в том, что для его сборки не нужно иметь программатор. Это потому, что схема основана на микроконтроллере AT90USB162, а он в свою очередь, может быть прошит без программатора, с помощью программы FLIP, благодаря встроенному буатлодеру.

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

  1. выбираем AT90USB162 (Device->Select);
  2. открываем usb порт (Settings->Communication->USB);
  3. открываем прошивку (File->Load HEX File. );
  4. нажимаем Run (отмечены Erase, Program, Verify).

И наш программатор готов к использованию. Но без установки драйверов, программатор работать не будет. Драйвера подойдут, только те, которые идут вместе с программой AVR Studio. Я использую четвертую версию данной программы, так как её интерфейс наиболее удобен и прост для пользователя. Первым делом скачиваем и устанавливаем AVR Studio 4 с официального сайта Atmel.

Установка очень проста: соглашаемся с правилами пользования и дальше нажимаем кнопку next. После установки самой программы, на ваш компьютер будет предложено установить драйвера для программаторов, с этим ОБЯЗАТЕЛЬНО нужно согласиться, иначе программаторы не будут работать.

Далее нужно вставить программатор в компьютер и проверить правильно ли установились драйвера. Для этого заходим в диспетчер устройств(Мой компьютер – Свойства – Диспетчер устройств).

Как видим, компьютер не распознает наш программатор. Чтобы он определял устройство, как программатор, нужно указать путь к драйверам. Для этого нажимаем правой клавишей мыши по нашему устройству и выбираем пункт – Обновить драйверы.

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

В появившемся окне выбираем наш драйвер, который установился с AVR studio.

Далее нужно выбрать модель программатора и нажать кнопку «Далее»:

На этом этапе, если у вас включена функция проверки драйверов, может появиться вот такое окно:

(Выбираем второй пункт)

Если вы сделали всё так, как написано, то у вас появиться следующее:

И программатор будет правильно определяться:

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

Подключение контроллера AVR к ПК

Подключаем к нашему программатору микроконтроллер. Я это сделал с помощью проводов:

Также не забываем присоединить кварцевый резонатор с двумя керамическими конденсаторами на 22 пФ, если это нужно. (В большинстве случаев это необходимо).

Работа с программой AVR Studio

Когда аппаратная часть готова, переходим к программной. Открываем программу AVR Studio. Сначала нужно выбрать программатор. Для этого нажимаем на кнопку:

Выбираем порт и программатор и нажимаем Connect.

Появиться следующее окно:

Это главное окно, в котором вы должны выбрать микроконтроллер и загрузить файл прошивки, а также установить фьюз-биты и другое.

Для выбора микроконтроллера, есть выпадающий список:

Фьюз биты устанавливаются на вкладке Fuses, на вкладке Program вы загружаете файлы прошивки:

Как вы могли догадаться, кнопка Erase Device – предназначена для очистки памяти контроллера.

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

Как вы можете заметить на моем скриншоте, поля для выбора прошивки не активны, это связано с тем, что я не подключил микроконтроллер. При установке фьюз-битов, не убирайте галочку возле SPIEN, это очень ВАЖНО! При программировании проверьте, подключен ли кварцевый резонатор, это также очень важно, иначе ваш контроллер будет не пригоден для дальнейшего программирования. На этом всё. С вами был Кирилл.

Обсудить статью ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ AVR

Простая схема и фотки проверенного светодиодного индикатора напряжения для аккумуляторов.

ЗАМЕНА СТОП СИГНАЛА

Схема и фото самодельного устройства управления стоп сигналами автомобиля. Имеет повышенную информативность, по сравнению со штатным.

ГЕНЕРАТОР МАРКСА

Генератор Маркса – теория и практика создания импульсов высокого напряжения.

АВТОМОБИЛЬНЫЙ ПРЕОБРАЗОВАТЕЛЬ НАПРЯЖЕНИЯ 12-220В

Схема и описание сборки преобразователя напряжения бортовой сети автомобиля 12В в переменное сетевое – 220В.

Примеры на Си для микроконтроллеров Atmel AVR

Здесь представлены примеры различных программ на языке Си для микроконтроллеров Atmel AVR. Все примеры написаны под микроконтроллер ATmega16, поэтому при переносе на другие МК семейства AVR это нужно учитывать. Тактовая частота микроконтроллера во всех примерах 8 МГц (используется тактирование от внутреннего генератора). Код примеров разбит на блоки и снабжен комментариями. Проекты написаны в среде Eclipse (инструкция по установке и настройке Eclipse для AVR) и легко могут быть импортированы в Eclipse. Также можно использовать данные проекты и в среде AVR studio (изменится только структура файлов проекта). При обнаружении ошибок просьба сообщить на почту.

Blink – Самый простой пример. К порту C подключены 8 светодиодов. Светодиоды зажигаются логической единицей на линии порта. В цикле светодиоды порта включаются и выключаются. Свеобразный аналог Hello World в мире встраиваемых систем.

IO Ports – В данном примере рассматривается работа с портами ввода-вывода. К порту C подключены 8 светодиодов (линии 0-7). К линии 2 порта D подключена кнопка, с подтяжкой на землю. При нажатии кнопка выдает на линию 0 порта С уровень логической единицы. Цикл программы организован следующим образом: при запуске включается бегущий огонь, сначала загорается светодиод на линии 0 порта C, затем на линии 1 и т.д. По достижении линии 7 направление бегущего огня меняется (от 7 к 0). При нажатии на кнопку бегущий огонь останавливается и загораются одновременно все светодиоды. После повторного нажатия на кнопку бегущий огонь продолжает перемещаться с места остановки.

Dynamic Indication – В данном примере рассматривается работа с 7-сегментным индикатором. В моём случае он имеет 4 разряда (цифры). Поскольку у меня на плате установлены транзисторы для управления разрядами, то управление осуществляется выводом логической единицы и на разряды и на сегменты. Схема подключения следующая: к линиям 0-7 порта C подключены сегменты индикатора, а к линиям 0-3 порта В разряды индикатора. При запуске на индикатор выводятся цифры 1 2 3 4.

UART – В данном примере рассматривается периферийного модуля UART (универсальный асинхронный приёмопередатчик). Модуль UART можно настроить как на работу с прерываниями, так и без них (вручную, путём работы с флагами). Пример работает следующим образом: при получении байта, МК переходит в обработчик прерывания (используется только прерывание по приёму данных) и разбирает численное значение байта (0-255) на цифры, которые и выводятся на 7-сегментный индикатор. Схема подключения аналогична предыдущему примеру. Передача осуществляется по двум линиям UART (порт D линии 0-1), к которым необходимо подключить линии RX и TX преобразователя USB-UART. Для настройкки без прерываний необходимо обнулить бит RXCIE в регистре UCSRB и вручную опрашивать интерфейс в основном цикле программы.

Clock – В данном примере рассматривается реализация простых часов с 7-сегментным индикатором и парой кнопок. Только здесь уже требуется 6 разрядов, хотя секунды можно опустить. Кнопки с подтяжкой на землю. При нажатии кнопка выдает на линию высокий логический уровень. Индикатор подключается как и в предыдущих примерах (сегменты к порту C, разряды к порту B), а кнопки к линиям 2-3 порта D. Кнопка используется PD2 для установки минут, а PD3 для установки часов. По нажатию каждой из кнопок увеличивается значение соответствующего разряда (минуты или часы).

DS18B20 – В данном примере рассматривается работа с цифровым датчиком температуры DS18B20. Показания температуры выводятся на 7-сегментный индикатор. Вывод DQ датчика поключен к ноге (пину) PD5. Линия должна быть подтянута к плюсу питания резистором на 4.7-10 кОм (согласно документации). Датчик опрашивается каждые 5 секунд. Температура выводится на 4-разрядный индикатор: знак, два разряда на целуюю часть и один на вещественную. Документация к датчику здесь.

DHT11 – В данном примере рассматривается работа с датчиком температуры и влажности DHT11. Показания температуры выводятся на 7-сегментный индикатор. Вывод DATA (также SDA) датчика поключен к ноге (пину) PD5. Линия должна быть подтянута к плюсу питания резистором на 4.7-10 кОм (согласно документации). Датчик опрашивается каждые 5 секунд. Измеряются температура и влажность, но на дисплей выводится только влажность (целое двухзначное число). Документация к датчику здесь.

DHT22 – В данном примере рассматривается работа с датчиком температуры и влажности DHT22. По сравнению с DHT11 данный датчик обладает большей точностью и более широким диапазоном измерений. Показания температуры выводятся на 7-сегментный индикатор. Вывод DATA (также SDA) датчика поключен к ноге (пину) PD5. Линия должна быть подтянута к плюсу питания резистором на 4.7-10 кОм (хотя согласно документации это и необязательно). Датчик опрашивается каждые 5 секунд. Измеряются температура и влажность, но на дисплей выводится только влажность (вещественное двухзначное число с одним знаком после запятой). Документация к датчику здесь.

BMP180 – В данном примере рассматривается работа с цифровым датчиком температуры и атмосферного давления BMP180. Показания атмосферного давления выводятся на 7-сегментный индикатор. Датчик подключаетсяпо интерфейсу I2C. Линии SDA и SCL должны быть подтянуты к плюсу питания резисторами на 4.7-10 кОм. Датчик опрашивается каждые 10 секунд. Измеряются температура и давление, но на дисплей выводится только атмосферное давление в мм. ртутного столба (целое число). Документация к датчику здесь.

BH1750 – В данном примере рассматривается работа с цифровым датчиком освещенности BH1750. Показания освещенности выводятся на 7-сегментный индикатор. Датчик подключается по интерфейсу I2C. Линии SDA и SCL должны быть подтянуты к плюсу питания резисторами на 4.7-10 кОм. Датчик опрашивается каждые 5 секунд. Документация к датчику здесь.

ADC Indication – Данный пример аналогичен примеру с UART. Отличие в том, что байт берется с линии 0 порта А (линия 0 АЦП, ADC0). Микроконтроллер по таймеру производит аналого-цифровое преобразование напряжения на линии 0 порта А, (младшие 2 бита отбрасываются как шум). При измерении используется внутренняя опора 5 В. К линии PD2 порта D подключена кнопка, которая определяет режим вывода показаний. При нажатии на кнопку выводится результат измерений в виде числа от 0 до 255. Если кнопка не нажата, то результат измерений переводится в вольты и выводится на индикатор (с точностью до десятых).

Fast PWM – В данном примере показана настройка аппаратного ШИМ (широтно-импульсная модуляция, англ. PWM). К линиям 4 и 5 порта D подключены светодиоды, а к линиям 2-3 и 6-7 порта D – кнопки каналов A и B соответственно. Кнопки с подтяжкой на землю (при нажатии кнопка выдает на линию порта уровень логической единицы) Кнопки на линях 2 и 3 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ (меняется яркость светодиода) канала А. Кнопки на линях 6 и 7 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ канала B. Число сравнения для каждого из каналов меняется в диапазоне от 0 до 255. Для канала А шаг изменения равен 10, для канала В шаг равен 5.

HCSR04 – В данном примере рассматривается работа с ультразвуковым датчиком расстояния HCSR04. К линии PD3 подключен вывод Trigger датчика, а к линии PD2 вывод Echo. Поключение 7-сегментного индикатора аналогично предыдущим примерам. МК периодически опрашивает датчик и определяет расстояние до препятсвия в сантиметрах. После этого число разбивается на цифры и выводится на дисплей. Документация к датчику здесь.

Matrix Keyboard – В данном примере показана работа с матричной клавиатурой. Микроконтроллер динамически опрашивает клавиатуру, а затем определяет номер нажатой клавиатуры. Размер поля 3 на 3 – получаем 9 кнопок. Нажатие первых 8-ми приводит к зажиганию светодиода на соответствующей линии порта А, нажатие 9-ой кнопки зажигает все светодиоды порта А. Матричная клавиатура подключается к линиям 0-5 порта С (три столбца и три строки). В архиве схема и печатная плата матричной клавиатуры (Diptrace).

Shift Register – В данном примере рассматривается работа с модулем SPI на примере сдвигового регистра 74HC595. К регистру подключены светодиоды, в качестве линии CS используется линия 4 порта B (вывод not SS). Линия DS (14 нога) регистра идет к MOSI (PB5), линия SHCP (11 нога) к линии SCK (PB7), линия STCP (12 нога) к линии SS (PB4). Линии MR (10 нога) и OE (13 нога) должны быть подтянуты к высокому и низкому логическим уровням соответственно. По таймеру микроконтроллер меняет состояние светодиодов: поочерёдно горят то чётные светодиоды, то нечётные. Если при этом передать байт по UART’у, то он будет выведен в порт на светодиоды. Чтобы обратно переключиться в режим мигания необходимо послать по UART’у 0x00 (ноль). Документация к микросхеме 74HC595 здесь.

SG-90 Servo – В данном примере рассматривается работа с сервоприводом SG-90. Используется аппаратный ШИМ. Линия ШИМ сервпопривода подключена к каналу А аппаратного ШИМ. Кнопки поворота подключены к линиям PD2 и PD3. Кнопка на линии PD2 увеличивает длительность импульса, кнопка на линии PD3 уменьшает длительность импульса. Длительность импульса меняется от 1 до 2 мс. Описание сервомотора здесь.

RGB Lamp – В данном примере рассматривается работа с трехцветным RGB-светодиодом. Реализовано плавное переливание цветов с использованием программного ШИМ. Линии красного, зеленого и синего цветов подключаются соответственно к линиям 2, 3 и 4 порта D.

TSOP4836 NEC – В данном примере рассматривается работа с фотоприемником TSOP4836 и протоколом передачи NEC, который широко используется в инфракрасных пультах дистанционного управления. При получении команды на дисплей выводится ее код. Поключение 7-сегментного индикатора аналогично предыдущим примерам. Описание фотоприемника здесь.

WS2812 Ring – В данном примере рассматривается работа со светодиодами WS2812 с встроенным ШИМ-контроллером. К контроллеру подключено такое кольцо из 16 светодиодов (количество светодиодов в кольце можно указать в коде). Библиотека для работы с WS2812 не моя (взята на гитхабе и немного допилена, копирайт сохранён). В программе сначала задается массив цветов (красный, зеленый, синий), а затем в цикле реализуется их сдвиг и плавным изменением интенсивности. Линия IN первого светодиода подключается к линии PD2 порта D. Описание светодиодов здесь.

MFRC522 RFID – В данном примере рассматривается работа со считывателем RFID карточек MFRC522. Cчитыватель подключён к контроллеру по стандартной схеме. Библиотека для работы с MFRC522 не моя (взята на гитхабе и немного допилена, копирайт сохранён). При запуске контроллер определяет тип ридера и отправляет данные в UART. Затем идет непрерывная проверка обнаружения RFID устройств. При поднесении карточки или брелка считывается его адрес и отправляется в UART (адрес 32 бита, 4 байта). Описание считывателя здесь.

Программные средства для микроконтроллеров AVR фирмы Atmel

1. ПО для написания и отладки микропрограммного обеспечения

Для написания и отладки микропрограммного обеспечения (МПО) требуется ряд инструментов, в т.ч.:

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

Для ускорения процесса создания МПО также могут использоваться мастера автоматической генерации кода программы, библиотеки функций и другое вспомогательное ПО.

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

НаименованиеРазработчикОписаниеЯзык программированияОграничения бесплатной версии
AVR StudioAtmelПолностью бесплатная профессиональная IDE от производителя МК AVR.Ассемблер, Си/Си++ 1)нет
WinAVRОткрытое ПО http://winavr.sourceforge.net/Открытая IDE на основе бесплатного Си-компилятора AVR GCC.Си, Си++нет
ArduinoArduino Software http://arduino.cc/Написанная на Java и полностью бесплатная IDE, которая является частью одноименной открытой аппаратной платформы на основе МК AVR. Содержит простой редактор кода, компилятор (AVR GCC) и интерфейс программатора.Processing/ Wiring 2)нет
Algorithm Builderhttp://algrom.net/Бесплатная IDE, которая в целях сокращения сроков разработки ПО в 3-5 раз, предлагает графический способ программирования в виде блок-схемы алгоритма.Графический ассемблернет
AVRcoE-LAB http://www.e-lab.deПростая в освоении коммерческая IDE с компилятором Паскаль и удобным мастером создания проекта, который автоматически добавляет поддержку драйверов указанных внутренних и внешних аппаратных компонентов.Паскаль1) поддерживаются все МК, а код программы ограничен 4 килобайтами
2) поддерживаются только mega8/mega48, а код программы ограничен 8 килобайтами
IAR Embedded WorkbenchIAR Systems http://www.iar.com/Профессиональная коммерческая IDE.Си, Си++1) 30-дневная оценочная версия
2) версия с ограничением кода программы 4 килобайтами
Micro-IDEBiPOM Electronics http://www.bipom.com/Коммерческая недорогая IDE, поддерживающая разнообразные платформы МК. Поддержка МК AVR обеспечивается версией BASCOM-AVR со встроенным компилятором Бейсик.БейсикДемоверсия с ограничением кода программы 2 килобайтами
SwiftForthForth Inc. http://www.forth.com/Интерактивная многоплатформенная коммерческая IDE на основе кросс-компилятора языка Forth, разработанного специально для встраиваемых систем и систем реального времениForthОграничение по коду программы, невозможность сохранения объектных файлов
CodeVisionAVRHP Infotech http://www.hpinfotech.roВысококачественная IDE со встроенными ANSI Си-компилятором и мастером автоматической генерации программы.СиОценочная версия с ограничением кода программы 3 килобайтами
ProteusLabcenter Electronics http://www.labcenter.co.uk/Proteus – система для разработки электронных устройств на основе МК, в т.ч. AVR. Её схемный редактор поддерживает уникальную возможность моделирования работы электрической схемы вместе с МК, исполняющим заданную программу. При подключении специальных отладочных файлов (elf, cof) превращается в полнофункциональный отладчик программы на уровне исходного кода.Ассемблер, Си 3)Невозможность сохранения, печати и создания собственных схем на основе МК (допускается только просмотр и модификация входящих в комплект примеров)
  1. Cовместно с WinAVR.
  2. Язык Processing/Wiring – это тот же Си/Си++, но дополненный рядом простых в использовании библиотек для решения типичных задач ввода-вывода. Создан с целью быстрого освоения программирования МК даже новичками, аматерами и неспециалистами в области разработки встраиваемого ПО.
  3. В комплект не входят.
ТипНаименование
КомпиляторКомпилятор ассемблера для AVR
Утилита программированияChipBlasterAVR – универсальная утилита для внутрисистемного программирования

3. Микропрограммное обеспечение

3.1. Операционные системы

Наименование, ссылкаОписание
FreeRTOS http://www.freertos.org/Многоплатформенная открытая операционная система реального времени (ОСРВ), которую абсолютно бесплатно можно использовать в коммерческих применениях.

Библиотека для работы с числами с плавающей запятой для процессоров AVR (15 Kb)

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector