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

Что такое АЦП (аналого-цифровой преобразователь)

В электронике под АЦП (в переводе с англ. от ADC — analog-to-digital converter) понимают устройство которое конвертирует аналоговый сигнал (например, ток или напряжение) в цифровой код (двоичную форму). В реальном мире большинство сигналов являются аналоговыми, но все микроконтроллеры и микропроцессоры способны понимать только двоичные (бинарные) сигналы – 0 или 1. То есть чтобы заставить микроконтроллер понимать аналоговые сигналы необходимо конвертировать их в цифровую форму – это и делает АЦП. Существуют различные типы АЦП, каждый тип удобен для конкретных приложений. Наиболее популярные типы АЦП используют такие типы аппроксимаций как приближенная, последовательная и дельта-аппроксимацию. 

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

Мы в данной статье будем использовать встроенный в микроконтроллер AVR ATmega16 аналого-цифровой преобразователь – практически все микроконтроллеры семейства AVR оснащаются встроенным АЦП. Но вместе с тем следует помнить о том, что существуют и другие типы микроконтроллеров, у которых нет собственных АЦП – в этом случае необходимо использовать внешний АЦП. Как правило, внешние АЦП сейчас выпускаются в виде одной микросхемы.

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

Микроконтроллер Atmega8 довольно часто используется в радиолюбительских схемах,сделан он с использованием технологии CMOS на AVR RISC архитектуре. За один такт выполняется одна инструкция, на микроконтроллера ATmega8 достигается производительность в 1MIPS на МГц, и тем самым достигается наиболее оптимальная производительность и потребляемая энергия.

Технические характеристики:

  • Программная память равна 8 кБ, цикл составляет 10000 раз;
  • объем флеш памяти 512 байт который хранит переменные (цикл перезаписи 100 000);
  • Оперативная память (ОЗУ) 1кб;
  • 32 регистра общего назначения;
  • Два 8-ми разрядных таймера/счетчика с раздельным прескалером, режим сравнения, режим захвата;
  • таймер реального времени с независимым генератором;
  • три канала ШИМ;
  • шесть каналов АЦП, канал 10-ти разрядный;
  • последовательный интерфейс двухпроводной;
  • USART;
  • SPI ;
  • Сторожевой таймер с независимым генератором;
  • аналоговый компаратор;
  • внутренний RC генератор;
  • возможность обработки внешних и внутренних прерываний;
  • режимы с пониженным энергопотреблением: Idle,Power-save,Power-down,Standby,ADC Noise Reduction;
  • напряжение от 4.5 В до 5.5 В;
  • тактовая частота от 0-16 МГц.

Расположение выводов микроконтроллера Atmega8

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

Порты микроконтроллера сгруппированы в 3 группы:

Порт D

  • PD0 — цифровой вход/выход, RxD — вход приемника USART;
  • PD1 — цифровой вход/выход, TxD — выход передатчика USART;
  • PD2 — цифровой вход/выход, INT0 — внешнее прерывание нулевого канала;
  • PD3 — цифровой вход/выход, INT1 — внешнее прерывание первого канала;
  • PD4 — цифровой вход/выход, XCK — внешний такт для USART, T0 — внешний вход Timer0;
  • PD5 — цифровой вход/выход, T1 — внешний вход Timer1;
  • PD6 — цифровой вход/выход, AIN0 — вход аналогового компаратора канал 0;
  • PD7 — цифровой вход/выход, AIN1 — вход аналогового компаратор канал 1.

Порт C

  • PС0 — цифровой вход/выход, ADC0 — аналоговый вход канал 0;
  • PС1 — цифровой вход/выход, ADC1 — аналоговый вход канал 1;
  • PС2 — цифровой вход/выход, ADC2 — аналоговый вход канал 2;
  • PС3 — цифровой вход/выход, ADC3- аналоговый вход канал 3;
  • PС4 — цифровой вход/выход, ADC4- аналоговый вход канал 3;
  • PC5 — цифровой вход/выход, SDA- двух проводной последовательный интерфейс (канал данных);
  • PС6 — цифровой вход/выход, RESET- внешний сброс.

Порт B

  • PB0 — цифровой вход/выход, ICP1 — захват входа 1;
  • PB1 — цифровой вход/выход, OC1A — выход сравнения/ШИМ 1A;
  • PB2 — цифровой вход/выход, OC1B — выход сравнения/ШИМ 1B;
  • PB3 — цифровой вход/выход, OC2 — вход сравнения/ШИМ2, MOSI
  • PB4 — цифровой вход/выход, MISO
  • PB5 — цифровой вход/выход, SCK — тактовый вход;
  • PB6 — цифровой вход/выход, XTAL1- тактовый вход для резонатора;
  • PB7 — цифровой вход/выход, XTAL2- тактовый вход для резонатора, TOSC2 — тактовый вход в случае работы от встроенного резонатора.

Выводы для питания микроконтроллера

  • VCC — вход напряжение питания;
  • GND — это общий «минусовой» вывод, земля;
  • AVcc — вход напряжения питания для модуля АЦП;
  • ARef — вход опорного напряжение для АЦП.

Datasheet микроконтроллера Atmega8

  • < Назад
  • Вперёд >

Особенности семейства

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

Большинство контроллеров AVR являются 8-разрядными, хотя сейчас существует и 32-разрядная разновидность  контроллеров AVR32. Кроме того, как уже упоминалось выше, AVR принадлежат к типу RISC-микроконтроллеров. Архитектура RISC (Complex Instruction Set Computers) означает, что набор инструкций, которые может выполнять процессор устройства, является ограниченным, но, в то же время, подобная архитектура дает преимущество в скорости.  Противоположностью архитектуры RISC является архитектура CISC (Complex Instruction Set Computers).

32-разрядная разновидность контроллеров AVR32

8-битность контроллера означает, что он способен передавать и принимать 8-битные данные. Доступные регистры ввода/вывода также являются 8-битными.

Архитектура контроллера основана на регистрах. Это означает, что для хранения исходных данных операции и ее результата в контроллере используются регистры.

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

AVR 8-Bit RISC — IEEE 802.15.4™/ZigBee

Решение AVR Z-Link представляет собой связку радиочастотной части — AT86RF230 с AVR совместимыми микроконтроллерами ATmega1281 или ATmega 2561. Устройство отличается крайне низкой потребляемой мощностью и высокой чувствительностью, работает на частоте 2.4 GHz и полностью совместимо со стандартом IEEE 802.15.4. Такая комбинация микросхем позволяет уменьшить потребляемую мощность и получить более широкий рабочий диапазон, в отличие от других 802.15.4 решений, предлагаемых сегодня на рынке.

Технические характеристики выпускаемых AVR Z-Link — контроллеров приведены в таблице.

Таблица. Технические характеристики AVR Z-Link — контроллеров

Микросхема Тип AVR RF-чип Flash (КБ) EEPROM (КБ) RAM (КБ) ISM диапазон Чувстви-тельность Выходная мощность Напряже-ние питания Vcc I/Os Корпус
ATmega64RZAV mega644 RF230 64 1 4 2.4 -101 3 1.8-3.6 32 TQFP44 MLF44 PDIP42
ATmega128RZAV mega1281 RF230 128 4 8 2.4 -101 3 1.8-3.6 54 TQFP64 MLF64
ATmega128RZBV mega1280 RF230 128 4 8 2.4 -101 3 1.8-3.6 86 TQFP100
ATmega256RZAV mega2561 RF230 256 4 8 2.4 -101 3 1.8-3.6 54 TQFP64 MLF64
ATmega256RZBV mega2560 RF230 256 4 8 2.4 -101 3 1.8-3.6 86 TQFP100

AT86RF230 — Приемопередатчик ZigBee/IEEE 802.15.4

Главная —
Микросхемы —
DOC —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи

________________________________________________________

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

Общие сведения о портах микроконтроллеров AVR

Порты микроконтроллеров AVR — это устройства ввода/вывода, позволяющие микроконтроллеру передавать или принимать данные. Стандартный порт микроконтроллера AVR содержит восемь разрядов данных, которые могут передаваться или приниматься параллельно. Ножки микроконтроллера также называют пинами, контактами или выводами. Порты обозначаются латинскими буквами А, В, С и т.д. Количество портов зависит от конкретной модели микроконтроллера.

Kонфигурирование каждой линии порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные буферы портов построены по схеме триггера Шмитта. Для линий, сконфигурированных как входные, также имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35…120 кОм между входом и проводом питания. Kроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.

Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода за-резервировано по 3 адреса. По этим адресам размещаются три регистра: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия: Px7…Px0 — для регистров PORTx, DDx7…DDx0 — для регистров DDRx и PINx7…PINx0 — для регистров PINx.

Действительные названия регистров (и их разрядов) получаются подстановкой названия порта вместо символа «x», соответственно для порта A ре¬гистры называются PORTA, DDRA, PINA, для порта B — PORTB, DDRB, PINB и т.д.

Следует заметить, что «регистры» PINx на самом деле регистрами не являются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Поэтому они доступны только для чтения, тогда как регистры PORTx и DDRx доступны и для чтения, и для записи.

Таким образом, запись в порт означает запись требуемого состояния для каждого вывода порта в соответствующий регистр данных порта PORTx. А чтение состояния порта выполняется чтением либо регистра данных порта PORTx, либо регистра выводов порта PINx. При чтении регистра выводов порта PINx происходит считывание логических уровней сигналов, присутствующих на выводах порта. А при чтении регистра данных порта PORTx происходит считывание данных, находящихся в регистре-защелке порта – это справедливо как для входных, так и для выходных контактов.

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

Регистр DDRx определяет, является тот или иной вывод порта входом или выходом. Если некоторый разряд регистра DDRx содержит логическую единицу, то соответствующий вывод порта сконфигурирован как выход, в противном случае — как вход. Буква x в данном случае должна обозначать имя порта, с которым вы работаете. Таким образом, для порта A это будет регистр DDRA, для порта B — регистр DDRB и т. д.

Схема

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

Схема в этом проекте показывает использование простой цепи регулятора мощности (с использованием 7805), которую обеспечивает устройство ATMEGA 5В, но оказывается, что программатор USBASP обеспечивает приблизительно 3,3 В. Несмотря на это, лучше обеспечить внешнее питание, чтобы USBASP не потреблял слишком много тока из любого USB-порта.

Программатор USBASP, который я купил, также шел с конвертером, который преобразует 10-контактный разъем в более удобный 6-контактный программный разъем. Тем не менее, header использует двухрядный шаг 2,54 мм, что означает, что он не может быть подключен к макету. Чтобы обойти это, я просто подключил разъем к проводам, которые соединяются с различными пинами на макете.

Исходный код программы на языке С (Си) с пояснениями

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

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

C++

unsigned int ADC_read(unsigned char chnl)

1 unsignedintADC_read(unsignedcharchnl)

Поскольку у нас всего 8 каналов АЦП, то номер канала может принимать значение от 0 до 7.

C++

chnl= chnl & 0b00000111;

1 chnl=chnl&0b00000111;

Записав число ‘40’ (в двоичном виде ‘01000000’) в регистр ADMUX мы выберем канал ADC0 для аналого-цифрового преобразования.

C++

ADMUX = 0x40;

1 ADMUX=0x40;

На этом шаге мы начнем процесс аналого-цифрового преобразования, записав «1» в бит ADSC регистра ADCSRA. После этого необходимо подождать до тех пор пока бит ADIF не сигнализирует нам о том что процесс преобразования завершен. Мы закончим процесс АЦП записав ‘1’ в бит ADIF регистра ADCSRA. Когда преобразование закончено, возвратим значение АЦП.

C++

ADCSRA|=(1<<ADSC);
while(!(ADCSRA & (1<<ADIF)));
ADCSRA|=(1<<ADIF);
return (ADC);

1
2
3
4

ADCSRA|=(1<<ADSC);

while(!(ADCSRA&(1<<ADIF)));

ADCSRA|=(1<<ADIF);

return(ADC);

Выберем опорное напряжение АЦП установив бит REFS0. После этого разрешим АЦП и установим коэффициент деления предделителя равным 128.

Arduino

ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

1
2

ADMUX=(1<<REFS0);

ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

Теперь сохраним значение АЦП и передадим его на PORTC. В результате этого 8 светодиодов, подключенных к PORTC, покажут получившееся в результате аналого-цифрового преобразования значение в 8-битном формате. В рассматриваемом примере мы показываем изменение напряжения от 0 до 5В, которое регулируется на входе АЦП микроконтроллера с помощью потенциометра.

C++

i = ADC_read(0);
PORTC = i;

1
2

i=ADC_read();

PORTC=i;

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

Комплектующие

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

Оборудование:

  • ATMEGA168 DIP IC x 1
  • Кварцевые резонаторы, кристалл (4-20 МГц) x 1
  • 20 пФ конденсатор x 2
  • 680 резистор x 1
  • 5.6K резистор x 1
  • Светодиод LED x 1
  • Источник 5 В (цепь 7805, плавное регулирование и т.д.) x 1
  • Провода

Программное обеспечение:

  • USBASP
  • WINAVR (20100110)
  • Atmel Studio 7

_____________________________________________________________________

   Мы хотим, чтобы светодиод моргал с частотой видимой нашему глазу. Это единицы, десятки герц. Допустим, мы выбрали 1 Гц. Мой микроконтроллер работает на частоте 8 МГц, длительность одного такта =1/8000000 Гц = 125 нс. Сигнал частотой 1 Гц имеет период повторения 1 c. Светодиод будет гореть только половину периода — 0,5с. Делим 0,5 с на 125 нс и получаем искомое число тактов – 4000000. Это число укладывается в диапазон типа unsigned long int. Следующая строчка нашей программы – вызов функции:__delay_cycles(4000000);Далее – гасим светодиод и снова вызываем функцию задержки:PORTC = 255;__delay_cycles(4000000);5 шаг алгоритма – вернуться на шаг 2. По сути дела нам нужно повторить кусок программы, зациклить его. Для этих целей в Си существуют три типа циклов: for, while и do. Мы используем while.

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

Практика электронщиков (начинающих и уже достаточно опытных) отмечает частое пользование ещё одним чипом из серии AVR, именуемым даташит «ATmega8». Несмотря на приличный «возраст» с момента своего рождения, эта микросхема остаётся не менее популярной, чем упомянутые выше микроконтроллеры.

Заставка фирменного компилятора программного кода от компании «Atmel». Мощное средство, необходимое для создания уникальных дампов

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

  1. Запускается компилятор «Atmel Studio 7».
  2. В меню выбрать «Новый проект» (New Project) и далее «AVR GCC».
  3. Затем указать месторасположения сохранения проектного файла.
  4. Перейти «Далее» (Next) и выбрать из списка симуляторов ATmega
  5. Завершить кнопкой «Finish» после чего можно писать программный код.

Первая нитка программного кода:

#include <avr / io.h>

Функция Include включает системную библиотеку в проект, обеспечивая доступ к основным функциям ввода / вывода и макросам.

int main()

Вторая строчка указывает точку входа в программу пользователя. Отсюда программа пользователя стартует.

Дальше необходимо обозначить вывод порта C. В данном случае — «PC5». Для этого используется специальный регистр DDRC:

DDRC = 0x20;

Значение регистра 0x20 задаёт целевую «1» для контакта «PC5», согласно двоичному представлению. Тем самым пользователь открывает действие на активацию контакта «PC5».

Следующий шаг, решение непосредственно поставленной задачи — включение и выключение светодиода исполнением кода. Если нужен бесконечный цикл, решение может быть таким:

Простейший программный код для микроконтроллера ATmega8, которые заставляет мерцать подключенный к микросхеме светодиод

Завершающий этап компиляции кода выбор опции меню «Сборка» (Build). В результате «Atmel Studio 7» создаст файл с расширением .hex, с именем, указанным пользователем. Например: «test.hex». Останется только записать программный код в память микроконтроллера с помощью прошивки.

Установка 0 в произвольном бите регистра порта

Если мы хотим сконфигурировать отдельно вывод (контакт) PD2 как вход, то необходимо в соответствующий бит регистра DDRD записать 0. Для этого можно использовать следующую команду.

DDRD &= ~(1<<2);

В этом случае результат сдвига единицы на две позиции влево инвертируется с помощью операции побитного инвертирования, которая в языке С обозначаемой знаком «~».

В результате операции инверсии мы получаем вместо нулей единицы, а вместо единиц — нули. Данная логическая операция также называется операцией НЕ (английское название NOT).

Итак, в результате операции (1<<2) мы получили число 00000100, следовательно после проведения инверсии («~») мы получим число 11111011.

Получившееся число при помощи операции побитного логического умножения & умножается на число, хранящееся в регистре DDRD, и результат затем записывается в регистр DDRD.

Логическое умножение, по другому называемое операцией И (английское название AND), выполняется по следующим правилам:0*0=00*1=01*0=01*1=1

То есть если хотя бы один из операндов операции равен 0, то и результат операции равен 0.

Таким образом, сдвинутая нами влево на две позиции единица (1<<2) превращается при инвертировании («~») в ноль и умножается на соответствующий бит регистра DDRD, поэтому каким бы не было состояние данного бита, то при операции умножения на 0 данный бит становится равным 0. Схематично данный процесс представлен на следующем рисунке.

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

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

Параметр

Значение

Тип процессора

8-битный AVR

Флэш-память

32 КБ

SRAM

2 КБ

EEPROM

1 КБ

Количество контактов

28 или 32 контакта:

Максимальная рабочая частота

20 МГц

Внешние прерывания

2

Интерфейс USB

Технические характеристики

8-разрядный микроконтроллер Atmel AVR на базе RISC сочетает в себе 32 КБ флэш- памяти ISP с возможностями чтения во время записи, 1 КБ EEPROM , 2 КБ SRAM , 23 линии ввода-вывода общего назначения, 32 рабочих регистра общего назначения , три гибких таймера / счетчики с режимами сравнения, внутренними и внешними прерываниями , последовательным программируемым USART , байтовым 2-проводным последовательным интерфейсом, последовательным портом SPI , 6-канальным 10-битным аналого — цифровым преобразователем (8 каналов в пакетах TQFP и QFN / MLF ) , программируемый сторожевой таймер с внутренним генератором и пять программно выбираемых режимов энергосбережения. Устройство работает в диапазоне 1,8-5,5 вольт. Пропускная способность устройства приближается к 1 MIPS на МГц. 

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

Микроконтроллер состоит из нескольких вычислительных блоков:

Арифметико-логическое устройство (АЛУ) (англ. arithmetic logic unit, ALU) — блок процессора, который под управлением устройства управления служит для выполнения арифметических и логических преобразований над данными.

 Блок управления процессором (УУ) (control unit, CU) — блок, устройство, компонент аппаратного обеспечения компьютеров. Представляет собой конечный дискретный автомат. Структурно устройство управления состоит из: дешифратора команд (операций), регистра команд, узла формирования (вычисления) текущего исполнительного адреса, счётчика команд. УУ современных процессоров обычно реализуются в виде микропрограммного автомата и в этом случае УУ включает в себя ПЗУ микрокоманд. УУ предназначено для формирования сигналов управления для всех блоков машины.

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

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

В классической линейке устройств Arduino в основном применяются микроконтроллеры Atmel AVR. Следующие МК можно встретить на указанных распространённых платах:

  • ATmega2560 (16 МГц, 256к Flash, 8к RAM, 54 порта, из них до 15 с ШИМ и 16 АЦП). Платы Mega.

  • ATmega32U4 (16 МГц, 32к Flash, 2,5к RAM, 20 портов, из них до 7 с ШИМ и 12 АЦП). Платы Leonardo, Micro, Yun.

  • ATmega328 (16 МГц, 32к Flash, 2к RAM, 14 портов, из них до 6 с ШИМ и 8 АЦП). Платы UnoR3, Mini, NanoR2, Pro, Pro mini, различные варианты плат uno и nano, такие как Wifi Uno и nano + nrf42l01

  • ATtiny85 (20Мгц, 8к Flash, 512б RAM, 6 портов, из них 4 ШИМ и 4 аналоговых). Платы Digispark, также часто применяются вне плат.

  • ATmega168(16Мгц, 16к Flash, 1к RAM, порты и распиновка аналогично ATmega328) Платы Uno R1, Uno R2, Pro mini, NanoR1.

Заключение

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

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