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

МИКРОКОНТРОЛЛЕРЫ AVR

Микроконтроллеры AVR являются разработкой и продуктом фирмы Atmel. Отличие данных микроконтроллеров от аналогичных, в довольно удачной архитектуре ядра процессора и широкому набору периферийных модулей, что облегчает процесс программирования устройства. Эти микросхемы производятся по технологии 0,35 мкм, и работают с тактовой частотой от - 16 МГц, обеспечивая производительность до 16 MIPS.

В основе микроконтроллеров семейства AVR лежит 8-ми битное центральное процессорное устройство, построенное по принципу RISK-архитектуры. Базой данного блока является арифметико-логическое устройство - АЛУ. По тактовому сигналу из памяти программ в соответствии с содержимым счетчика команд, выбирается нужная команда и выполняется вычисление. При выборе команды из памяти программ происходит выполнение предыдущей выбранной команды, это позволяет получить быстродействие на уровне 1 MIPS на 1 МГц. АЛУ подключено к 32-м регистрам общего назначения. РОН находятся в начале адресного пространства оперативной памяти, но не являются ее частью физически . Поэтому к ним идёт обращение и как к регистрам, и как к памяти.

Фирма ATMEL выпускает такие семейства 8-битных микроконтроллеров: tiny и mega. Микроконтроллеры tiny имеют Флэш -ПЗУ по 1 и 2 кбайт в корпусе на 8 -20 выводов, а микроконтроллеры mega соответственно: Флэш-ПЗУ 8 -128 кбайт в корпусе на 28 -64 вывода.

Технические характеристики микроконтроллеров AVR:
- частота до 16 МГц с временем выполнения команды 62,5 нс;
- встроенный програмируемый RC-генератор, частота 1, 2, 4, 8 МГц;
-
Флэш -ПЗУ программ,программируемое в системе, до 128 кбайт;
- двухпроводный интерфейс TWI, совместимый с интерфейсом I2C;
- многоканальный 8-, 9-, 10-, 16-битный ШИМ-модулятор;
- 10-битный АЦП со временем преобразования 70 мкс и дифференциальными входами;
- программируемый коэффициент усиления — 1; 10 или 200;
- встроенный источник опорного напряжения;
- аналоговый компаратор;
- настраиваемая схема задержки запуска после подачи питания;
- схема слежения за напряжением питания;
- JTAG-интерфейс для подключения эмулятора;

- электрически перепрограммируемое ПЗУ данных до 4 кбайт;
- внутреннее ОЗУ со временем доступа 1 такт, до 4 кбайт;
- мощный набор команд (более 120 инструкций);
- 6 аппаратных команд умножения (для семейства mega);
- развитая система адресации, оптимизированная для работы с С-компиляторами;
- 32 регистра общего назначения (аккумулятора);
- синхронный (USART) или асинхронный (UART) последовательные порты;
- синхронный последовательный порт (SPI);
- потребление тока 0.1 мА в активном режиме.

Типы микроконтроллеров AVR:

ТИП память программ,КБайт EEPROM данных,байт ОЗУ данных,байт Такт.частота,МГц
ATTiny11 1 - - 6 6
ATTiny11L 1 - - 2 6
ATTiny12 1 64 - 8 6
ATTiny12L 1 64 - 4 6
ATTiny12V 1 64 - 1,2 6
ATTiny13 1 64 64 20 6
ATTiny15L 1 64 - 1,2 6
ATTiny28L 2 - - 4 19
ATTiny28V 2 - - 1,2 19
AT90S2313 4 256 512 10 15
ATMega16 16 512 1024 16 32
ATMega48 4 256 512 20 40

Более подробно читайте об AVR микроконтроллерах в специальном

Так-же микроконтроллеры AVR семейства Mega имеют возможность самостоятельного изменения содержимого своей памяти программ. Это позволяет создавать на их основе гибкие системы, алгоритм работы которых будет изменяться самим микроконтроллером в зависимости от внутренних условий и внешних событий. Микроконтроллеры AVR имеют встроенный 8-канальный 10-битный аналого-цифровой преобразователь. Режим энергосбережения позволяет отключить неиспользуемые модули и в результате снизить энергопотребление.

Микроконтроллеры AVR могут работать при напряжениях питания 2 - 6 Вольт. Ток потребления в активном режиме составляет около 1 мА для работы на частоте 500 кГц, 6 мА для 5 МГц и до 10 мА на частоте 12 МГц. Есть возможность переводить их программным путем в такие режимы пониженного энергопотребления:

1.Экономичный режим. Продолжает работать только генератор таймера обеспечивая сохранность временной базы, остальные функции отключены.
2.Режим холостого хода. Прекращает работу только процессор и фиксируется содержимое памяти данных, внутренний генератор синхросигналов, таймеры, система прерываний и сторожевой таймер продолжают работать, при этом ток потребления в районе 2,5 мА на частоте 12 МГц.
3.Стоповый режим. Сохраняется содержимое регистрового файла, останавливается внутренний генератор синхросигналов, и останавливаются все функции, до поступления сигнала внешнего прерывания или аппаратного сброса, ток потребления составляет 80 мкА.

Для программирования микроконтроллеров AVR есть такие системы: AVR Studio - официальная система программирования от Atmel, позволяет писать и отлаживать программы, написанные на ассемблере, С и С++. IAR - коммерческая система программирования на C, С++ и ассемблере. WinAVR - компилятор с открытыми исходниками, поддерживающий множество самых разных языков, и AtmanAVR - система программирования для AVR с интерфейсом аналогичным, как у Visual C++ 6. Ещё одну простую и популярную программу можно скачать в разделе софт.

Предположим вам поставили задачу — заставить мигать светодиод.
Рассуждаем, как решить эту задачу:

Вариант 1 — самое простое, взять тумблер/кнопку, рядом посадить раба, который тумблером будет включать/выключать светодиод. Обычно в России большинство задач именно так и решается. А что ведь мигает)))
Вариант 2 — собрать мультивибратор. Уже интереснее. Для того чтобы помигать, одним светодиодом вполне даже хорошее решение. К тому же просто, дешево, надежно.
Вариант 3 — собрать на микроконтроллере. Дороже чем собрать мультивибратор, но на мой взгляд проще. Написал программу, прошил, получил результат. Без настройки. Конечно это идеальный случай.

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

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

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

Программируют микроконтроллеры обычно на языке Си или на ассемблере. На чем писать по большому счету разницы нет. Из-за большого количества готовых примеров, я свой выбор сделал в пользу Си. Кроме того, существует несколько программ позволяющих писать на Си. Например бесплатная, фирменная AVR Studio, CodeVision, WinAVR и т.п. Несмотря на то, что я пишу в CodeVision, очень активно использую AVR Studio как отладчик.

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

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

Со времени появления первых микропроцессоров в 1970-х годах их сложность постоянно возрастала за счет появления новых аппаратных решений и добавления новых команд, предназначенных для решения новых задач. Так постепенно сложилась архитектура, получившая впоследствии название CISC (Complete Instruction Set Computers – компьютеры со сложным набором команд). В дальнейшем обозначилось и нашло активное развитие еще одно направление: архитектура RISC (Reduced Instruction Set Computers – компьютеры с сокращенным набором команд). Именно к этой архитектуре относятся микроконтроллеры AVR от компании Atmel и PIC от компании Microchip, которым посвящена эта книга.

Основное преимущество RISC-процессоров заключается в том, что они просты, выполняют ограниченный набор команд, и, как следствие, очень быстродействующие. Это позволяет снизить стоимость и сложность их программирования.

Обратной стороной RISC-архитектуры стала необходимость создания дополнительных команд на ассемблере, которые у CISC-устройств реализованы в аппаратной части. Например, вместо того, чтобы просто вызвать команду деления, которая характерна для устройств CISC, разработчику, имеющему дело с RISC-процессором, приходится применять несколько последовательных команд вычитания. Однако подобный недостаток с лихвой компенсируется ценой и скоростью работы RISC-устройств. Кроме того, если создавать программы на языке С, то подобные проблемы вообще перестают иметь какое-либо значение для разработчика, поскольку они решаются компилятором, который автоматически генерирует весь недостающий ассемблерный код.

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

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


Архитектура микроконтроллеров AVR и PIC

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

Рис. 1.1. Обобщенная структура микроконтроллера

Будем рассматривать микроконтроллеры в общем, не привязываясь к какому-либо конкретному типу микроконтроллеров AVR, поэтому ниже будут рассмотрены только общие для большинства микроконтроллеров особенности архитектуры памяти, вопросы ввода/вывода, обработки прерываний, сброса и др.

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

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

Память данных

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


Рис. 2.1. Структура памяти данных в микроконтроллерах AVR и PIC

Область статической памяти SRAM (Static Random Access Memory) обозначена на рис. 2.1 пунктиром, поскольку используется не всеми микроконтроллерами AVR (это относится как к внутренней, так и к внешней SRAM). Ее начальный адрес – 0x060, а верхний адрес – разный в различных устройствах.

В некоторых микроконтроллерах AVR можно увеличивать пространство памяти SRAM посредством подключения внешних блоков памяти вплоть до 64 Кбайт, однако для этого приходится пожертвовать портами А и С, которые в этом случае применяются для передачи данных и адресов.

Регистры общего назначения

Область регистров общего назначения (рабочих регистров) предназначена для временного хранения переменных и указателей, используемых процессором для выполнения программ. В микроконтроллерах AVR она состоит из 32 восьмиразрядных регистров (диапазон адресов 0x000 – 0x01F). В микроконтроллерах PIC регистры общего назначения также восьмиразрядные, однако их количество и диапазон адресов зависят от конкретного типа устройства.

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

Регистры специальных функций микроконтроллеров PIC

Регистры специальных функций используются в микроконтроллерах PIC для управления различными операциями. Как и в случае с регистрами общего назначения, их количество и адресация отличаются от устройства к устройству. В программах, написанных на языке С, непосредственное обращение к регистрам специальных функций обычно не требуется, если только не используются фрагменты на языке ассемблера.

Область ввода/вывода микроконтроллеров AVR

Область ввода/вывода микроконтроллеров AVR содержит 64 регистра, используемых для управления или хранения данных периферийных устройств. К каждому из этих регистров можно обращаться по адресу ввода/вывода (начиная с 0x000) или по адресу SRAM (в этом случае к адресу ввода/вывода следует прибавить 0x020). В программах на языке С обычно используются условные имена регистров ввода/вывода, а адреса имеют значение только для программ на языке ассемблера.

Имена, адреса ввода/вывода и SRAM, а также краткое описание регистров из области ввода/вывода микроконтроллеров AVR представлены в табл. 2.1. При этом следует отметить, что в различных моделях микроконтроллеров некоторые из перечисленных регистров не используются, а адреса, не указанные в табл. 2.1, зарезервированы компанией Atmel для использования в будущем.

Таблица 2.1. Описание регистров из области ввода/вывода

Имя регистра Адрес ввода/ вывода Адрес SRAM Описание
ACSR 0x08 0x28 Регистр управления и состояния аналогового компаратора
UBRR 0x09 0x29 Регистр скорости передачи данных через UART
UCR 0х0А 0х2А Регистр управления приемопередатчиком UART
USR 0x0В 0x2В Регистр состояния приемопередатчика UART
UDR 0х0С 0х2С Регистр данных приемопередатчика UART
SPCR 0x0D 0x2D Регистр управления интерфейсом SPI
SPSR 0х0Е 0х2Е Регистр состояния интерфейса SPI
SPDR 0x0F 0x2F Регистр ввода/вывода данных интерфейса SPI
PIND 0x10 0x30 Выводы порта D
DDRD 0x11 0x31 Регистр направления передачи данных порта D
PORTD 0x12 0x32 Регистр данных порта D
PINC 0x13 0x33 Выводы порта С
DDRC 0x14 0x34 Регистр направления передачи данных порта С
PORTC 0x15 0x35 Регистр данных порта С
PINB 0x16 0x36 Выводы порта В
DDRB 0x17 0x37 Регистр направления передачи данных порта В
PORTB 0x18 0x38 Регистр данных порта В
PINA 0x19 0x39 Выводы порта А
DDRA 0x1А 0х3А Регистр направления передачи данных порта А
PORTA 0x1В 0х3В Регистр данных порта А
EECR 0x1С 0х3С Регистр управления памяти EEPROM
EEDR 0x1D 0x3D Регистр данных памяти EEPROM
EEARL 0x1Е 0х3Е Регистр адреса памяти EEPROM (младший байт)
EEARH 0x1F 0x3F Регистр адреса памяти EEPROM (старший байт)
WDTCR 0x21 0x41 Регистр управления сторожевым таймером
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Регистр захвата таймера/счетчика Т/С1 (младший байт)
OCR1BL 0x28 0x48 Регистр сравнения В таймера Т/С1 (младший байт)
OCR1BH 0x29 0x49 Регистр сравнения В таймера Т/С1 (старший байт)
OCR1AL 0х2А 0х4А Регистр сравнения А таймера Т/С1 (младший байт)
OCR1AH 0x2В 0x4В Регистр сравнения А таймера Т/С1 (старший байт)
TCNT1L 0х2С 0х4С Счетный регистр таймера/счетчика Т/С1 (младший байт)
TCNT1H 0x2D 0x4D Счетный регистр таймера/счетчика Т/С1 (старший байт)
TCCR1B 0x2Е 0х4Е Регистр управления В таймера/счетчика Т/С1
TCCR1A 0x2F 0x4F Регистр управления А таймера/счетчика Т/С1
TCNT0 0x32 0x52 Счетный регистр таймера/счетчика Т/С0
TCCR0 0x33 0x53 Регистр управления таймера/счетчика Т/С0
MCUCR 0x35 0x55 Регистр управления микроконтроллером
TIFR 0x38 0x58 Регистр флагов прерываний от таймеров/счетчиков
TIMSK 0x39 0x59 Регистр маскирования прерываний от таймеров
GIFR 0х3А 0х5А Общий регистр флагов прерываний
GIMSK 0х3В 0x5В Общий регистр маскирования прерываний
SPL 0x3D 0x5D Указатель стека (младший байт)
SPH 0х3Е 0х5Е Указатель стека (старший байт)
SREG 0x3F 0x5F Регистр состояния

Регистр состояния SREG микроконтроллеров AVR

Регистр состояния содержит флаги условий микроконтроллеров AVR и располагается в области ввода/вывода по адресу $3F (адрес SRAM – $5F). После подачи сигнала сброса он инициализируется нулями.

Микроконтроллеры (далее МК) прочно вошли в нашу жизнь, на просторах интернета можно встретить очень много интересных схем, которые исполнены на МК. Чего только нельзя собрать на МК: различные индикаторы, вольтметры, приборы для дома (устройства защиты, коммутации, термометры…), металлоискатели, разные игрушки, роботы и т.д. перечислять можно очень долго. Первую схему на микроконтроллере я увидел лет 5-6 назад в журнале радио, и практически сразу же перелистнул страницу, подумав про себя "все равно не смогу собрать". Действительно, в то время МК для меня были чем то очень сложным и непонятым устройством, я не представлял как они работают, как их прошивать, и что делать с ними в случае неправильной прошивки. Но около года назад, я впервые собрал свою первую схему на МК, это была схема цифрового вольтметра на 7 сегментных индикаторах, и микроконтроллере ATmega8. Так получилось, что микроконтроллер я купил случайно, когда стоял в отделе радиодеталей, парень передо мной покупал МК, и я тоже решил купить, и попробовать собрать что-нибудь. В своих статьях я расскажу вам про микроконтроллеры AVR , научу вас работать с ними, рассмотрим программы для прошивки, изготовим простой и надежный программатор, рассмотрим процесс прошивки и самое главное проблемы, которые могут возникнуть и не только у новичков.

Основные параметры некоторых микроконтроллеров семейства AVR:

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

Память FLASH

Память ОЗУ

Память EEPROM

Порты ввода/вывода

U питания

Дополнительные параметры МК AVR mega:

Рабочая температура: -55…+125*С
Температура хранения: -65…+150*С
Напряжение на выводе RESET относительно GND: max 13В
Максимальное напряжение питания: 6.0В
Максимальный ток линии ввода/вывода: 40мА
Максимальный ток по линии питания VCC и GND: 200мА

Расположение выводов моделей ATmega 8X

Расположение выводов моделей ATmega48x, 88x, 168x

Расположение выводов у моделей ATmega8515x

Расположение выводов у моделей ATmega8535x

Расположение выводов у моделей ATmega16, 32x

Расположение выводов у моделей ATtiny2313

В конце статьи прикреплён архив с даташитами на некоторые микроконтроллеры

Установочные FUSE биты MK AVR

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

Самыми популярными микроконтроллерами у радиолюбителей являются ATmega8, затем идут ATmega48, 16, 32, ATtiny2313 и другие. Микроконтроллеры продаются в TQFP корпусах и DIP, новичкам рекомендую покупать в DIP. Если купите TQFP, будет проблематичнее их прошить, придется купить или и паять плату т.к. у них ножки располагаются очень близко друг от друга. Советую микроконтроллеры в DIP корпусах, ставить на специальные панельки, это удобно и практично, не придется выпаивать МК если приспичит перепрошить, или использовать его для другой конструкции.

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

Для программирования используется 6 выводов:
RESET - Вход МК
VCC - Плюс питания, 3-5В, зависит от МК
GND - Общий провод, минус питания.
MOSI - Вход МК (информационный сигнал в МК)
MISO - Выход МК (информационный сигнал из МК)
SCK - Вход МК (тактовый сигнал в МК)

Иногда еще используют вывода XTAL 1 и XTAL2, на эти вывода цепляется кварц, если МК будет работать от внешнего генератора, в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. При соединении микроконтроллера с программатором, соединяющие провода должны быть как можно короче, а кабель идущий от программатора на порт LPT так-же не должен быть слишком длинным.

В маркировке микроконтроллера могут присутствовать непонятные буквы с цифрами, например Atmega 8L 16PU, 8 16AU, 8A PU и пр. Буква L означает, что МК работает от более низкого напряжения, чем МК без буквы L, обычно это 2.7В. Цифры после дефиса или пробела 16PU или 8AU говорят о внутренней частоте генератора, который есть в МК. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц для ATmega48/88/168, и 16МГц для остальных атмег.

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


В соответствии с единой базовой архитектурой эти МК делятся на три больших семейства:


Tiny AVR – дешевые и довольно простые по конструкции микроконтроллеры в 8-выводном корпусе
Classic – основная базовая линейка микроконтроллера;
Mega AVR – МК для сложных задач, требующих значительного объема памяти программ и данных.

AVR Classic – самая массовая линейка среди остальных Flash-МК корпорации Atmel. Последняя представила первый 8-разрядный Flash-МК в таком далеком 1993 году и с тех пор только совершенствует технологию. Компания постоянно работает над совершенствованием своей производственной линии в следующих основных направлениях: снижении удельного энергопотребления; увеличение диапазона питающих напряжений и быстродействия; возможность легкой встройки в изделия реально-временных отладчиков; реализации функции самопрограммирования; расширения количества и модернизация периферийных модулей; встройки различных специализированных устройств (передатчиков, USB-контроллеров, драйверов ЖКИ и др.

Успех AVR-микроконтроллеров кроется в простоте выполнения поставленной задачи с достижением требуемого результата, чему способствует доступность огромного числа инструментальных средств, как разработанных корпорацией Atmel, так и сторонними производителями ПО. Многие сторонние фирмы выпускают полный спектр необходимых компиляторов, программаторов, отладчиков, ассемблеров, адаптеров и разъемов. Отличительной чертой програмных средств от AVR является их низкая стоимость.

Они необходимы для обмена данными с различными подключенными к нему устройствами, например, реле, световыми и звуковыми индикаторами, датчиками и т.п. С помощью АВР портов, осуществляется не только обмен данными, но и синхронизация схемы в целом. Количество AVR портов зависит от модели МК. В среднем имеется (1-7) портов. Обычно, порты AVR восьмиразрядные, если разрядность не ограничена количеством выводов на корпусе МК.

Давайте попробуем написать простую программу для "Мигания светодиодом". Писать программу для простоты понимания будем на языке С для этого нам понадобится специальная утилита CodeVisionAVR.

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

Вы узнаете как можно управлять ЖК дисплеем с помощью команд имеющихся в компиляторе CodeVisionAVR, на примере МК семейства ATmega8 и алфавитно-цифровым ЖК экраном со встроенным чипом HD44780

Любой микроконтроллер способен “воспринимать” только цифровые сигналы – логический ноль или единицу. Например, у МК ATmega8 при напряжении питания 5 В логический ноль – это напряжение лежащие в интервале от 0 до 1,3 В, а единица – от 1,8 до 5 В. Довольно часто в радиолюбительской практике возникает необходимость измерять напряжения, которое может принимать любое значение в диапазоне от нуля до уровня напряжения питания. Для этих задач в составе всех микроконтроллеров АВР имеется аналого-цифровой преобразователь.


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

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

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

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

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

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

Помимо структурирования используйте наиболее эффективные типы данных. Так, разные архитектурные решения имеют разные размеры баз данных. То есть в 8-разрядном микроконтроллере не стоит по возможности использовать 32-разрядными int-переменные. Лучше заменить их на переменные типа byte, если конечно это возможно. Кроме того не применяйте переменные с плавающей точкой при программировании микроконтроллеров.