Учимся создавать проекты с помощью avr микроконтроллера

Введение

Прежде чем разбирать, какие бывают источники тактирования, чем они отличаются, их плюсы и минусы и тд,  нам нужно определиться, что вообще означает словосочетание тактовая частота. Да и вообще, что означает термин “частота”?

Как нам говорит учебник физики, частота – это количество колебаний, произведенных за определенный промежуток времени. Чаще всего этот промежуток времени называют периодом и для удобства измерений его берут равным одной секунде.

Какие можно привести примеры подобных колебаний? Это могут быть часы с кукушкой, маятник, качели

и даже круги на воде от камушка, который мы кинули в воду:

Более подробно про частоту и период можно прочитать в статье Электрические сигналы и их виды.

Так, теперь ближе к делу. Что же такое тактовая частота?

Любая операция МК или его мегакрутого брата-микропроцессора состоит из отдельных элементарных действий, то есть тактов.

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

В МК AVR тактовая частота в основном измеряется в МегаГерцах. Как помните, приставка “Мега” означает один миллион. Если у нашего МК тактовая частота 8 МегаГерц, то это означает, что он может выполнять 8 000 000 тактов в секунду, или, грубо говоря,  около 8 000 000  различных операций в секунду ;-). Пусть вас не пугает это число, потому что ваши настольные компьютеры, телефоны и планшеты уже работают на частоте в несколько ГигаГерц. Гига – это уже миллиард! Например, если частота процессора вашего компа 2 ГГц, это означает, что он может произвести 2 миллиарда операций в секунду). Мало? Как оказалось на практике, уже стает мало)).

Вернемся к нашим баранам), а именно, к тактовой частоте. Допустим, мы имеем МК Tiny 2313, сконфигурированный на работу 8 МегаГерц и который  может выполнять при этом 8 миллионов тактов в секунду. Каждая операция процессора состоит из тактов. А когда процессор выполняет нашу программу, записанную во Flash память, он тоже производит определенные операции которые указаны в программе. Граничная частота МК Tiny 2313, как говорит нам Datasheet, довольно высокая и составляет аж целых 20 МГц! Это довольно много по меркам МК

Правда, это только с применением внешнего кварцевого резонатора.

Кварцевый резонатор, называемый часто просто кварц, может выглядеть по-разному:

На схемах он обозначается так:

На кварце часто указана частота, на которой он работает. Ниже на фото мы видим кварц, который работает на частоте 8 МегаГерц (8.000MHz)

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

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

Этот способ мы использовали при прошивке МК в прошлой статье.

Существуют 4 варианта, которые применяются для тактирования МК:

– тактирование от внутреннего RC-генератора

– тактирование от внешнего кварца

– тактирование от внешнего генератора

– тактирование от RC-цепочки

Распиновка Atmega8

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

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

Внимание!

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

Изготовители микроконтроллеров рекомендуют подключать соответствующие выводы вместе, т.е., минус подавать на все выводы, помеченные как Gnd (Ground — Земля), плюс — на все выводы помеченные как Vcc.

При этом через одинаковые выводы МК не должны протекать токи, так как внутри корпуса МК они соединены тонкими проводниками! То есть при подключении нагрузки эти выводы не должны рассматриваться как «перемычки».

Supported clock frequencies

MegaCore supports a variety of different clock frequencies. Select the microcontroller in the boards menu, then select the clock frequency. You’ll have to hit «Burn bootloader» in order to set the correct fuses and upload the correct bootloader.
Make sure you connect an ISP programmer, and select the correct one in the «Programmers» menu. For time critical operations an external crystal/oscillator is recommended.

You might experience upload issues when using the internal oscillator. It’s factory calibrated but may be a little «off» depending on the calibration, ambient temperature and operating voltage. If uploading failes while using the 8 MHz internal oscillator you have these options:

  • Edit the baudrate line in the file, and choose either 115200, 57600, 38400 or 19200 baud.
  • Upload the code using a programmer (USBasp, USBtinyISP etc.) or skip the bootloader by holding down the shift key while clicking the «Upload» button
  • Use the 4, 2 or 1 MHz option instead
Frequency Oscillator type Speed Comment
16 MHz External crystal/oscillator 115200 Default clock on most AVR based Arduino boards
20 MHz External crystal/oscillator 115200
18.4320 MHz External crystal/oscillator 115200 Great clock for UART communication with no error
14.7456 MHz  External crystal/oscillator 115200 Great clock for UART communication with no error
12 MHz External crystal/oscillator 57600 Useful when working with USB 1.1 (12 Mbit/s)
11.0592 MHz External crystal/oscillator 115200 Great clock for UART communication with no error
8 MHz External crystal/oscillator 57600 Common clock when working with 3.3V
7.3728 MHz External crystal/oscillator 115200 Great clock for UART communication with no error
4 MHz External crystal/oscillator 9600
3.6864 MHz External crystal/oscillator 115200 Great clock for UART communication with no error
2 MHz External crystal/oscillator 9600
1.8432 MHz External crystal/oscillator 115200 Great clock for UART communication with no error
1 MHz External crystal/oscillator 9600
8 MHz Internal oscillator 38400 Might cause UART upload issues. See comment above
4 MHz Internal oscillator 9600 Derived from the 8 MHz internal oscillator
2 MHz Internal oscillator 9600 Derived from the 8 MHz internal oscillator
1 MHz Internal oscillator 9600 Derived from the 8 MHz internal oscillator

WinAVR

Мощная среда разработки с открытым исходным кодом, созданная с целью написания программ для микроконтроллеров серии AVR от компании Atmel.

WinAVR состоит из GNU GCC компилятора, поддерживающего языки C, C+ и Objective-C, обеспечивая полный цикл разработки для AVR/AVR32 и дополнительных инструментов, каждый из которых выполняет определенную задачу, помогая написанию программного обеспечения для микроконтроллеров. Наиболее важные из них: • Programmers Notepad – текстовый редактор для создания программ; • AVR-LibC – библиотека микроконтроллеров AVR; • AVRDUDE – утилита, предназначенная для программирования микросхем и использующая SPI-интерфейс; • GNU Debugger (GDB) – отладчик с командной строкой; • Insight – отладчик с графическим интерфейсом; • Simulavr – симулятор микроконтроллеров AVR с поддержкой отладчика GDB; • SRecord – целый набор утилит для работы с загрузочными файлам EPROM разных форматов.

Работать с WinAVR очень просто, в возникающих вопросах помогает разобраться полный набор документации. Программа создает компактный, довольно приличный код, по синтаксису напоминающий классический язык С. Среди недостатков – отсутствие настройки аппаратуры AVR с помощью исходного кода и интерфейса с другими устройствами. WinAVR может объединяться с фирменным программным обеспечением микроконтроллеров Atmel Studio. Вместе эти пакеты позволяют проводить разработку и интуитивную отладку программ, поддерживая все возможности чипов Atmel.

Программное обеспечение выпущено под лицензией GNU и распространяется абсолютно бесплатно. Каждый пользователь может изменить или доработать программу по своему усмотрению. Кроме этого существует портативная версия пакета, не требующая установки, для хранения на внешнем носителе информации. Адресная строка места инсталляции WinAVR не должна содержать пробелы и кириллические символы. После установки программы появляется целая коллекция ярлыков, запускающая различные утилиты пакета. Основным из них является «Programmers Notepad». Инструкция и примеры лежат в папке WinAVR\doc\avr-libc. Разработчик программного комплекса – Eric B. Weddington. Его сайт http://winavr.sourceforge.net/ содержит всю необходимую информацию по WinAVR. В настоящее время дальнейшее развитие программы была приостановлено в связи с тем, что Эрик работает над Atmel Studio, являющейся прямым продолжением WinAVR.

Язык интерфейса WinAVR английский и русификатора к нему нет.

Программа поддерживает все 32-битные операционные системы Windows. Существует версия для работы в Linux-системах.

Распространение программы: Freeware (бесплатная)

Источник

Ардуино своими руками

Atmega2560 – хоть и мощный и продвинутый контроллер, но проще и быстрее собрать первую плату на atmega8 или 168.

Левая часть схемы – это модуль связи по USB, иначе говоря, USB-UART/TTL конвертер. Его, вместе с обвязкой, можно выбросить из схемы, для экономии места, собрать на отдельной плате и подключать только для прошивки. Он нужен для преобразования уровней сигнала.

DA1 – это стабилизатор напряжения L7805. В качестве основы можно использовать целый ряд avr микросхем, которые вы найдете, например, серии, arduino atmega32 или собрать arduino atmega16. Для этого нужно использовать разные загрузчики, но для каждого из МК нужно найти свой.

Можно поступить еще проще, и собрать всё на беспаечной макетной плате, как это показано здесь, на примере 328-й атмеги.

Микроконтроллеры – это просто и весело – вы можете сделать кучу приятный и интересных вещей или даже стать выдающимся изобретателем, не имея при этом ни образования, ни знаний о низкоуровневых языках. Ардуино – шаг в электронику с нуля, который позволяет перейти к серьезным проектам и изучению сложных языков, типа C avr и других.

Применение

Даже и не знаю с чего начать. Иногда у нас, особенно гиков, к коим я себя все же отношу, возникает потребность в некой автоматизации различных технических процессов: ‘умный’ дом, управление отоплением, вентиляцией, освещением и еще масса других вариантов, которые можно только представить. Например – робот, приносящий вам свежесваренный кофе с кухни. Следующий вопрос, который мы задаем себе: ‘Куда пойти? Куда податься?’. Многие, в том числе и я, сразу думаем о компьютере.

Вашему вниманию подборка материалов:

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

Но тут возникает масса отрицательных моментов:

  • габариты устройства (это немного поправимо, с появлением микрокомпьютеров типа Raspberry Pi)
  • энергопотребление
  • все меньший выбор интерфейсов, к которым придется стыковать некие исполнительные устройства, а это требует написания собственных драйверов и стыковочных интерфейсов. В нынешних компьютерах выбор вообще может ограничиться только USB портом
  • низкая надежность при режиме работы 24х7х365
  • избыточность исполняемого кода и аппаратной платформы. Представьте – для управления лампочкой установим линукс, сделаем собственную программу, сделаем собственный драйвер. Кроме того нужно еще было приобрести компьютер с ОЗУ, жестким диском, кучей фактически ненужных микросхем и интерфейсов на плате. Абсурд!

Тогда мы, и я в том числе, начинаем поиски какого-то чудо-устройства, которое лишено всех этих недостатков и, после обращения ко ‘всемогущему Гуглу’, находим нечто под названием ‘микроконтроллеры’.

И, Вы знаете, преинтереснейшие устройства, оказывается. Когда я на них наткнулся, то понял, что моя задача может быть решена очень небольшими средствами в достаточно приемлемый промежуток времени. А задача была, в общем, весьма серьезная. Управление освещением, считывание влажности, температуры помещения, считывание температур с 6 контуров, управление сервоприводами подачи теплоносителя, управление режимами вентиляции, формирование сигналов тревоги, плюс, конечно же, отображение текущих параметров и управление настройками и т. д. В целом – нетривиальная задача с увязкой всех взаимовлияющих параметров.

Что же они из себя представляют, эти микроконтроллеры? Физически – это микросхема с микрокомпьютером RISC-архитектуры внутри, в ней есть все, необходимое для нормальной работы. Ну, почти все.

Она обладает собственной памятью – постоянной перепрограммируемой флэш-памятью, пользовательской программируемой (ЭСППЗУ — EEPROM), оперативной, регистрами (они же могут быть напрямую адресованы как ячейки памяти), собственный калиброванный RC генератор частоты, таймеры, счетчики. А еще вдобавок Универсальный синхронный и асинхронный последовательный приемопередатчик (УСАПП — USART), последовательный интерфейс, Аналого-цифровой преобразователь (АЦП), входы для внешних прерываний, порты SPI, порты отладки, компаратор и всякая другая всячина. Вы даже можете безо всяких усилий соорудить штатными средствами настоящий терминал для ввода/вывода информации. Уууух…

Как видим – чем не компьютер!!? И это всего лишь в одной маленькой микросхемке! Просто здорово.

Средства разработки

Свободные

AVR-GCC
Порт GCC (компилятор) для AVR. Есть возможность интеграции с AVR Studio и Eclipse (AVR Eclipse Plugin).
SimulAVR
Симулятор ядра микроконтроллера AVR
KontrollerLab
IDE + работа с RS-232 + отладчик.
Code::Blocks
IDE.
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 Studio
IDE + ассемблер + отладчик. Freeware.
CodeVisionAVR
Компилятор C и программатор — CVAVR + генератор начального кода.
ICC AVR
Компилятор C + генератор начального кода.
AtmanAvr
Компилятор C + отладчик + генератор начального кода.
IAR AVR
IDE 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 (ядро реального времени).

Установка WinAVR в Atmel Studio

1. В пункте меню “Tools (Инструменты)” выберите “External Tools (Внешние инструменты)”.

2. У вас откроется окно, где вы должны будете ввести имя вашего инструментального средства.

3. В пункте “Title (название)” введите имя вашего внешнего инструментального средства. Можно выбрать любое имя, но в рассматриваемом примере мы выбрали имя “USBasp”. Поставьте галочку в пункте ”Use Output Window” и снимите галочку с пункта “Prompt for arguments” как показано на нижеприведенном рисунке.

4. Теперь ведите “Command”. Там будет необходимо указать путь к “avrdude.exe” – его вы можете найти в папке где установлена WinAvr. Просто найдите “WinAVR-20100110” на диске “C” вашего компьютера – куда вы устанавливали WinAvr.

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

6. Больше аргументов можно найти по этой ссылке.

7. Введите аргументы в поле для ввода аргументов. Оставьте поле “Initial directory (Начальный директорий)” без изменений.

8. После заполнения всех полей нажмите “Apply” и затем “Ok”.

В результате этих шагов вы сможете использовать внешние инструментальные средства чтобы загружать программы в микроконтроллер. Проверим это с помощью тестового проекта (программы) “blink.c”. Файл main.c вы можете найти в конце этой статьи. Теперь скопируйте main.c в Atmel studio.

История семейства

Семейство микроконтроллеров AVR было создано в 1996 г. корпорацией Atmel, а разработчиками архитектуры микроконтроллеров являются Alf-Egil Bogen и Vegard Wollan. Отсюда и происходит название семейства – от первых букв имен разработчиков – A и V, и первой буквы аббревиатуры RISC – типа архитектуры, на которой базируется архитектура микроконтроллера. Также эту аббревиатуру часто расшифровывают как Advanced Virtual RISC (модернизированный эффективный RISC).

Первым микроконтроллером в серии был AT90S8515, однако первым микроконтроллером, выпущенным на рынок, стал AT90S1200. Это случилось в 1997 г.

На сегодняшний день доступны 3 линейки микроконтроллеров:

TinyAVR – небольшой объем памяти, небольшие размеры, подходит для самых простых задач.

Внешний вид микроконтроллера TinyAVR

MegaAVR – наиболее распространенная линейка, имеющая большой объем встроенной памяти (до 256 КБ), множество дополнительных устройств и предназначенная для задач средней и высокой сложности.

Внешний вид микроконтроллера MegaAVR

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

Пример микроконтроллера XmegaAVR

Сравнительные характеристики различных линеек:

Название серии Число контактов Объем флэш-памяти Особенность
TinyAVR 6-32 0,5 – 8 КБ Небольшой размер
MegaAVR 28-100 4-256 КБ Периферийные устройства
XmegaAVR 44-100 16-384 КБ Система прерываний, поддержка DMA

AQUA RTOS

Статусы задач AQUA RTOS

OSTS_UNDEFINEOSTS_STOPготова к исполнениюOSTS_READYOSTS_RUNOSTS_STOP, OSTS_READY, OSTS_DELAY, OSTS_WAIT, OSTS_PAUSEOSTS_DELAY задержкуOSTS_WAIT ожидают семафора, события или сообщенияOSTS_STOP OSTS_PAUSEDOSTS_STOPOSTS_READYOSTS_PAUSE

OS_

OS_сервисOS_сервисTask OS_InitTaskOS_Init OS_сервис OS_сервисTask

Семафоры

ждать освобождениясвободенготова OSTS_READY

создатьOS_CreateBSemaphorehBSemOSERR_BSEM_MAX_REACHEDOS_WaitBSemaphore | OS_WaitBSemaphoreTaskждать освобождения семафораhBSemOS_BusyBSemaphore OS_FreeBSemaphore hBSem занят свободен

События

ожидать некоторое событиесигналить готова к исполнениюOSTS_READY

  • прерывание;
  • возникновение ошибки;
  • освобождение ресурса (иногда для этого удобнее использовать семафор);
  • изменение состояния линии ввода-вывода или нажатие клавиши на клавиатуре;
  • прием или посылка символа по RS-232;
  • передача информации от одной части приложения к другой (см. тж. сообщения).

создатьOS_CreateEventhEventOSERR_EVENT_MAX_REACHEDhEventOS_WaitEventтаймаутомOS_WaitEventTOготова к исполнениюOS_TIMEOUTСигналить OS_SignalEventготова к исполнению

Сообщения

тему сообщенияOS_CreateMessagehTopicOSERR_TOPIC_MAX_REACHEDhTopicOS_WaitMessageждать сообщения по теме hTopicOS_WaitMessageTO OS_WaitEventTO OS_SendMessagewordуказатель на строкуvarptr

OS_WaitMessagewordOS_GetMessage OS_PeekMessage OS_GetMessageStringOS_PeekMessageString

Аппаратные и программные средства поддержки разработок

Программные и аппаратные средства поддержки разработок для AVR всегда разрабатывались и продолжают разрабатываться параллельно с самими микроконтроллерами и корпорацией Atmel, и сторонними фирмами. Они включают в себя компиляторы, внутрисхемные эмуляторы, отладчики, программаторы и отладочные платы практически на любой вкус. Немаловажную роль играет и открытая политика Atmel Corp. в вопросах развития и распространения разнообразных доступных средств поддержки разработок. Это позволяет разработчикам и производителям электронной техники надеяться на сохранение полноценной поддержки для перспективного семейства микроконтроллеров AVR, закладываемых в новые изделия. Сама корпорация Atmel выпускает профессиональную интегрированную программную среду разработки приложений (IDE) — AVR Studio, которая распространяется свободно, недорогие стартовые наборы и эмуляторы, программатор для внутрисхемного программирования

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

Одной из последних разработок, которая планируется к выпуску во втором квартале 2004 года, является новая версия внутрисхемного эмулятора JTAGICE — JTAGICE mkII (читается как «mark two»), работающего под управлением AVR Studio. Он разработан для поддержки нового однопроводного интерфейса фоновой отладки debugWIRE. В режиме фоновой отладки программный код исполняется самим целевым микроконтроллером, таким образом, достигается полное совпадение временных и электрических параметров системы в отладочном и рабочем режимах. Новый JTAGICE mkII выглядит так же, как и его предшественник и будет иметь такую же цену. Помимо управления интерфейсами debugWIRE и JTAG, эмулятор JTAGICE mkII может использоваться и в качестве внутрисхемного программатора для микроконтроллеров, имеющих на кристалле интерфейсы JTAG или debugWIRE. JTAGICE mkII будет иметь возможность подключаться к компьютеру не только через COM-порт, но и через интерфейс USB.

Рис. 8. Демонстрационная плата AVRBRLY

Новый демонстрационный набор AVR Butterfly (ATAVRBFLY) на базе микроконтроллера mega169 является отладочным средством нового поколения, имеет небольшие габариты 65 x 45 мм (рис. 8), низкую стоимость и питается от литиевой батарейки. Набор компонентов на плате позволяет достаточно полно оценить все характеристики кристалла mega169. AVR Butterfly поставляется с прошивкой программы, которая поддерживает функции измерения температуры, напряжения от 0 до 5 В, освещенности а также проигрывание простых мелодий. Перепрограммирование кристалла осуществляется непосредственно на плате под управлением AVR Studio (рис. 9).

Рис. 9. Подключение AVRBFLY к PC через RS-232

Для поддержки микроконтроллера mega128CAN11 с CAN-интерфейсом выпущен специальный модуль расширения ATADAPCAN01, который подключается к стандартным отладочным платам STK500 и STK501 производства Atmel (рис. 10). Модуль разработан в соответствии со стандартом Bosch CAN 2.0A/B и реализует функции, необходимые для присоединения отладочной платы STK500 к шине CAN для разработки и отладки конечного приложения.

Рис. 10. Подключение ATADAPCAN01 к STK500/STK501

Новый внутрисхемный эмулятор ICE40 поддерживает работу в реальном времени микроконтроллеров tiny26 и mega8. ICE40 может подключаться к компьютеру через COM-порт или через USB, позволяет осуществлять запись трассы и использовать неограниченное число программных точек останова. Для поддержки микроконтроллеров mega8515, mega8535 и tiny13 с помощью эмулятора ATICE40 выпущен также Upgrade Kit ATICE 40 UPGR. Последняя версия интегрированной среды разработки AVR Studio 4.08 поддерживает Upgrade Kit для ATICE40 в дополнение к совместной работе с внутрисхемными эмуляторами реального времени ICE40, ICE50 и ICE200, JTAG-эмулятором JTAGICE, а также с отладочными наборами STK500/501/502 и кабелем для внутрисхемного программирования AVRISP.

________________________________________________________

   Для каждого типа микроконтроллера есть свой заголовочный файл. Для ATMega8535 этот файл называется iom8535.h, для ATMega16 – iom16.h. По идее мы должны в начале каждой программы подключать заголовочный файл того микроконтроллера, который мы используем.  Умные люди немного облегчили нам жизнь и написали заголовочный файл ioavr.h. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл. Итак, следущая строчка программы #include <ioavr.h>    В нашей программе мы будем использовать задержку. Задержку можно реализовать программно и аппаратно. Сейчас нас интересует программная задержка. IAR содержит библиотеку, в которой уже есть готовая функция задержки. Нам нужно подключить к нашей программе эту библиотеку. Как это сделать? Каждая библиотека имеет свой заголовочный файл в котором описано какие фукции она содержит. Этот файл мы и должны включить в программу. Делается это, как вы догадались с помощью директивы #include.#include <intrinsics.h>       Основу любой сишной программы составляют функции, и любая  программа на Си имеет хотя бы одну функцию – main().Вообще-то на примере main() не хотелось бы объяснять синтаксис функций, потому что main() хоть и является функцией, но вызывается не как обычно, а автоматически. С этой функции микроконтроллер начинает выполнение написанной нами программы. Вызовы всех других функций, наших или библиотечных, должны быть записаны в коде. Как вызывается функция, мы увидим дальше.У функции есть заголовок – int main(void) и тело – оно ограниченно фигурными скобками {}. В тело функции  мы и будем добавлять наш код.

Управление микроконтроллером

Микроконтроллеры AVR оснащены Гарвардской архитектурой. Каждая из областей памяти располагаются в своем адресном пространстве. Память данных в контроллерах осуществляется посредством регистровой, энергонезависимой и оперативной памяти.

Микроконтроллер AVR

Регистровая память предусматривает наличие 32 регистров общего назначения, которые объединены в файл, а также служебные регистры для ввода и вывода. И первые, и вторые располагаются в пространстве ОЗУ, однако не являются его частью.

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

Установка драйвера для USBASP в Windows 10

Если вы используете интерфейс JTAG, вам может потребоваться установка драйвера для USBASP если он не установился автоматически. Если вы не установите этот драйвер, то вы не сможете найти порт USBASP в программе Atmel Studio. Скачать драйвер USBASP можно по этой ссылке — http://www.mediafire.com/file/z576zrku371qyjs/windows-8-and-windows-10-usbasp-drivers-libusb_1.2.4.0-x86-and-x64-bit.zip/file.

После скачивания драйвера выполните следующую последовательность действий:

1. Распакуйте из архива скачанные файлы и поместите их на рабочий стол.

2. Подсоедините модуль USBASP v2.0 к своему компьютеру.

3. Откройте в Windows диспетчер устройств (Device Manager).

4. Теперь вы можете увидеть подсоединенный USBASP в списке устройств.

5. Кликните правой кнопкой мыши по “USBasp” и выберите “Обновить драйвер (Update Driver)”.

6. Select “Произвести поиск драйвера на своем компьютере (Browse my computer for driver software)”.

7. Найдите в открывшемся окне распакованную папку с драйвером для USBASP и щелкните «Открыть».

8. Если установка драйвера прошла успешно, то вы увидите сообщение примерно такое же как на нижеприведенном рисунке – в этом случае вам уже не нужно выполнять дальнейшие инструкции в этом разделе статьи.

9. Если вы увидите сообщение об ошибке как на приведенном рисунке, то вы в этом случае должны отключить цифровую подпись драйвера.

Чтобы сделать выполните следующие шаги:

— нажмите кнопку Shift и удерживая ее нажатой перезагрузите свой компьютер (кликните Restart в меню Windows пока держите ее нажатой);

— когда ваш компьютер перезагрузится не отпускайте кнопку Shift до тех пор пока не увидите “Advanced Options (Расширенные настройки)” на синем экране;

— отпустите кнопку Shift и кликните на “Startup Settings”;

— кликните на “Troubleshoot (Устранение проблем)”;

— выберите “Advanced Options (Расширенные настройки)”;

— после этого вы увидите на экране список расширенных опций и кнопку “Restart” в правом нижнем углу – кликните на ней;

— подождите пока компьютер снова перезагрузится. После этого вы увидите на экране ряд настроек;

— в открывшемся списке настроек выберите пункт “Disable Driver Signature Enforcement (Отключить цифровую подпись драйвера)”. Чтобы ее выбрать просто нажмите кнопку «7» на вашей клавиатуре (не путать с кнопкой «F7»);

— после нажатия этой кнопки компьютер перезагрузится и цифровая подпись драйвера будет отключена;

— после этого снова выполните шаги 1-8 из данного раздела статьи и драйвер для программатора USBASP будет успешно установлен.

Добавление устройств АТмега

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

Вносим следующие изменения в файл hardware/arduino/boards.txt:

atmega8o.name=ATmega8 (optiboot 16MHz ext)
atmega8o.upload.protocol=arduino
atmega8o.upload.maximum_size=7680
atmega8o.upload.speed=115200
atmega8o.bootloader.low_fuses=0xbf
atmega8o.bootloader.high_fuses=0xdc
atmega8o.bootloader.path=optiboot50
atmega8o.bootloader.file=optiboot_atmega8.hex
atmega8o.bootloader.unlock_bits=0x3F
atmega8o.bootloader.lock_bits=0x0F
atmega8o.build.mcu=atmega8
atmega8o.build.f_cpu=16000000L
atmega8o.build.core=arduino:arduino
atmega8o.build.variant=arduino:standard

##############################################################

a8_8MHz.name=ATmega8 (optiboot 8 MHz int)
a8_8MHz.upload.protocol=arduino
a8_8MHz.upload.maximum_size=7680
a8_8MHz.upload.speed=115200
a8_8MHz.bootloader.low_fuses=0xa4
a8_8MHz.bootloader.high_fuses=0xdc
a8_8MHz.bootloader.path=optiboot
a8_8MHz.bootloader.file=a8_8MHz_a4_dc.hex
a8_8MHz.build.mcu=atmega8
a8_8MHz.build.f_cpu=8000000L
a8_8MHz.build.core=arduino
a8_8MHz.build.variant=standard

##############################################################

a8_1MHz.name=ATmega8 (optiboot 1 MHz int) 
a8_1MHz.upload.protocol=arduino 
a8_1MHz.upload.maximum_size=7680 
a8_1MHz.upload.speed=9600 
a8_1MHz.bootloader.low_fuses=0xa1 
a8_1MHz.bootloader.high_fuses=0xdc 
a8_1MHz.bootloader.path=optiboot 
a8_1MHz.bootloader.file=a8_1MHz_a1_dc.hex 
a8_1MHz.build.mcu=atmega8
a8_1MHz.build.f_cpu=1000000L 
a8_1MHz.build.core=arduino 
a8_1MHz.build.variant=standard

##############################################################

a8noboot_8MHz.name=ATmega8 (no boot 8 MHz int)
a8noboot_8MHz.upload.maximum_size=8192
a8noboot_8MHz.bootloader.low_fuses=0xa4
a8noboot_8MHz.bootloader.high_fuses=0xdc
a8noboot_8MHz.build.mcu=atmega8
a8noboot_8MHz.build.f_cpu=8000000L
a8noboot_8MHz.build.core=arduino
a8noboot_8MHz.build.variant=standard

Таким образом, если мы перейдем в меню Сервис → Плата, то увидим устройства:

  • ATmega8 (optiboot 16MHz ext)
  • ATmega8 (optiboot 8 MHz int)
  • ATmega8 (optiboot 1 MHz int)
  • ATmega8 (no boot 8 MHz int)

Разветвленная шинная топология и энергопотребление

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

Рис. 11. Схема шин и периферии AP7000

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

Заключение

Начало работы с устройствами AVR может показаться несколько сложным, если вы не используете официальный программатор, который может работать «из коробки» с Atmel Studio 7. Однако в инструментах программирования требуется определить только одну командную строку (тип устройства, биты и т.п.). И все будущие проекты могут использовать один и тот же инструмент/компилятор, который нужно настроить только один раз.

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

Выводы

Кроме упомянутых выше производителей есть много других: Intel, Renesas Electronics, Texas Instruments и прочие. Но в сообществе электронщиков-любителей они не прижились, хоть и активно используются в промышленности.

Новичкам я рекомендую AVR в виде Arduino: по нему много информации на русском, а порог вхождения невелик. Но засиживаться на них не стоит, а то так и будешь до конца дней собирать и пересобирать этот конструктор.

После Arduino стоит перейти на STM. Для простеньких проектов бери восьмибитные чипы, для более сложных — 32-битные, и будет тебе счастье. И помни, что микроконтроллер — это уже не процессор, но еще не компьютер.

Статьи на сайте о ESP32

  • Программирование на ESP32
  • Создание сниффера на ESP32

Статьи на сайте об STM32 и проектах на его основе

  • Как реализовать шифрование для самодельного гаджета
  • Заводим и разгоняем оперативную память на STM32 и Arduino
  • Как собрать свой мобильник и почему это проще, чем кажется
  • Собираем программно определяемый радиоприемник своими руками