Память данных
Память данных предназначена для записи/чтения данных, используемых программами. Является энергозависимой, то есть, при отключении питания микроконтроллера все хранимые в ней данные, будут потеряны. В микроконтроллерах AVR память данных имеет более развитую структуру по сравнению с микроконтроллерами PIC, что показано на рис. 2.1.
Рис. 2.1. Структура памяти данных в микроконтроллерах AVR и PIC
Область статической памяти SRAM (Static Random Access Memory) обозначена на рис. 2.1 пунктиром, поскольку используется не всеми микроконтроллерами AVR (это относится как к внутренней, так и к внешней SRAM). Ее начальный адрес – 0x060, а верхний адрес – разный в различных устройствах.
В некоторых микроконтроллерах AVR можно увеличивать пространство памяти SRAM посредством подключения внешних блоков памяти вплоть до 64 Кбайт, однако для этого приходится пожертвовать портами А и С, которые в этом случае применяются для передачи данных и адресов.
How to Program ATtiny2313 AVR Microcontroller
Different software and compilers available in the market can be used to program ATtiny2313 AVR microcontrollers.
Support Compilers
We need an IDE, IPE, a suitable compiler, and a programmer/debugger to develop a program. The function of an IDE(Integrated Development Environment) is to provide the environment for programming. The compiler converts the program into readable HEX files. The IPE(Integrated Programming Environment) serves the purpose of burning HEX files in AVR MCUs.
- IDE: Atmel Studio 7
- Compiler: AVR and ARM Toolchains
Assembly Language is still functional for programming. Some of the most commonly used compilers are Micro C for AVR, AVR, and ARM Toolchains provided by Atmel’s manufacturers, known as Microchip itself.
Atmel-ICE is an In-circuit programmer/debugger which plays an integral role in programming AVR. It supports In-Circuit-Serial-Programming, operated by a computer, to burn the code into ATtiny2313 AVR using Atmel Studio. Furthermore, hardware like Perfboard, soldering station, Crystal Oscillator, capacitors, AVR IC is required.
3.2. Организация стека
Особенность стека по сравнению с другой оперативной памятью – это заданный и неизменяемый способ адресации.
При записи любого числа (кода) в стек число записывается по адресу, определяемому как содержимое регистра указателя стека, предварительно уменьшенное (декрементированное) на единицу (или на два, если 16-разрядные слова расположены в памяти по четным адресам). При чтении из стека число читается из адреса, определяемого содержимым указателя стека, после чего это содержимое указателя стека увеличивается (инкрементируется) на единицу (или на два). В результате получается, что число, записанное последним, будет прочитано первым, а число, записанное первым, будет прочитано последним. Такая память называется LIFO или памятью магазинного типа (например, в магазине автомата патрон, установленный последним, будет извлечен первым).
Принцип действия стека показан на рис. 3.2 (адреса ячеек памяти выбраны условно).
Рисунок 3.2 – Принцип работы стека
Пусть, например, текущее состояние указателя стека 1000008, и в него надо записать два числа (слова). Первое слово будет записано по адресу 1000006 (перед записью указатель стека уменьшится на два). Второе – по адресу 1000004. После записи содержимое указателя стека – 1000004. Если затем прочитать из стека два слова, то первым будет прочитано слово из адреса 1000004, а после чтения указатель стека станет равным 1000006. Вторым будет прочитано слово из адреса 1000006, а указатель стека станет равным 1000008. Все вернулось к исходному состоянию. Первое записанное слово читается вторым, а второе – первым.
Необходимость такой адресации становится очевидной в случае многократно вложенных подпрограмм. Пусть, например, выполняется основная программа, и из нее вызывается первая подпрограмма. Если нам надо сохранить значения данных и внутренних регистров основной программы на время выполнения подпрограммы, мы перед вызовом подпрограммы сохраним их в стеке (запишем в стек), а после ее окончания извлечем (прочитаем) их из стека. Если же из первой подпрограммы вызывается вторая подпрограмма, то ту же самую операцию мы проделаем с данными и содержимым внутренних регистров первой подпрограммы. Понятно, что внутри второй подпрограммы крайними в стеке (читаемыми в первую очередь) будут данные из первой подпрограммы, а данные из основной программы будут глубже. При этом в случае чтения из стека автоматически будет соблюдаться нужный порядок читаемой информации.
В системе команд любого процессора для обмена информацией со стеком предусмотрены специальные команды записи в стек (PUSH) и чтения из стека (POP). Можно также хранить в стеке и данные, для того чтобы удобнее было передавать их между программами и подпрограммами. В общем случае, чем больше область памяти, отведенная под стек, тем больше свободы у программиста и тем более сложные программы могут выполняться.
Оптимизация на уровне буфера команд за счет переменной длины команд
AVR32 работает с расширенным набором RISC-команд. Команды могут иметь длину 16 или 32 бита и следовать общим потоком. В отличие от архитектуры ARM, у этого ядра нет необходимости переключаться между двумя режимами. Все команды распознаются непосредственно в конвейере.
SIMD инструкции
В набор команд AVR32 входят инструкции для операций с множественными данными (Single Instruction Multiply Data), позволяющие в четыре раза увеличить производительность некоторых DSP алгоритмов, которые требуют выполнения одинаковых операций с потоком данных. Например, при декодировании видео формата MPEG производится расчет восьмибитных сумм абсолютных разностей (SAD). Для этого четыре 8-битных пикселя загружаются из памяти одной операцией, затем выполняется пакетное вычитание беззнаковых байтов с проверкой переопустошения, сложение байтов внутри старшей и младшей пар и распаковка их в полуслова.
Затем для вычисления значения SAD все значения складываются.
Инструкции эффективного доступа к памяти
В среднем около 30% процессорного времени уходит не на обработку данных, а на инструкции чтения-записи. Архитектура AVR32 уменьшает число требуемых циклов для инструкций чтения-записи байта (8 разрядов), полуслова (16 разрядов), слова (32 разряда) и двойного слова (64 разряда), совмещая их с арифметическими операциями над указателем и ускоряя таким образом скорость доступа к данным в таблицах, структурах и случайно расположенным данных, которые потребуются в ближайших последующих циклах.
Широко применяемые алгоритмы блочного кодирования, такие как Blowfish и Triple-DES, используют таблицы подстановок, для работы с которыми в современных МК требуется большое число тактов процессора. Например, выполнение следующей операции:
result=ptr0^ptr1^ptr2^ptr3;
В основе лежат четыре операции доступа к памяти, извлекающие один из четырех байтов 32-разрядного слова. Результатом операции является адрес памяти, к которому требуется доступ.
Для выполнения этой операции на МК с традиционной RISC-архитектурой потребуется 14 тактов. AVR32 выполнит эту операцию всего за 7 тактов. Использование инструкции чтения с извлеченным индексом (extracted index) позволяет ядру AVR32 выполнить все четыре операции доступа к памяти за четыре такта, сохраняя при этом все четыре смещения в одном регистре.
За счет уменьшения числа требуемых инструкций для выполнения операций увеличивается производительность ядра AVR32.
DSP-инструкции
В набор команд входят DSP-команды, такие как битовые операции, умножение с накоплением (МАС), сдвиг на любое число битов за один такт, быстрые масочные операции с битами в слове и многое другое. Такое нововведение позволяет не только быстро выполнять операции с портами общего назначения. Появляется возможность выполнять потоковую обработку данных на кристалле, Фурье-анализ, кодирование-декодирование, распознавание образов, воспроизведение аудио и видео без использования внешних кодеков (рис. 10).
Рис. 10. Сравнительная производительность AVR32
Аппаратное выполнение Java-инструкций
В конвейере AVR32 реализована аппаратная поддержка виртуальной машины Java— то есть кроме RISC-инструкций ядро может выполнять большинство инструкций байткода Java. Использование Java увеличивает возможности по использованию существующих пользовательских приложений и позволяет сократить время на перенос существующих или разработку новых приложений.
В отличие от программной Java-машины, использование аппаратных возможностей позволяет в несколько раз повысить скорость выполнения. Вполне вероятно, что программы для контроллеров класса AVR32 через несколько лет будут разрабатываться на Java.
Принципиальная схема эксперимента
Для того чтобы можно было хоть как-то наблюдать и управлять чем-то с помощью кнопки мы подключим к микроконтроллеру еще два светодиода. Схемка очень простая, вот она:
Рис. 1. Принципиальная схема эксперимента с микроконтроллером ATtiny2313 и кнопкой.
Как видим, к двум портам PB0 и PB1 через ограничивающие резисторы подключены два светодиода, а к порту PD2 — кнопка и она также с ограничивающим резистором. Для подключения программатора к МК используется разъем Conn 1 (AVR-ISP), а для подключения схемы к отдельному источнику питания +5В предназначены два контакта — P1 и P2.
Рис. 2. Собранная на беспаечной макетной панели схема эксперимента с микроконтроллером и кнопкой.
Важно заметить что для безопасного использования порта с кнопкой, последовательно ей подключен резистор с сопротивлением на 1 КОм (можно подключить и на другое сопротивление 600 Ом — 2 КОм). Примите это как правило хорошего тона в работе с пинами, которое обережет порт МК от выхода из строя в случае ошибочной подачи на пин высокого уровня и при замкнутой кнопке
Настройка Geany под ATtiny2313
В предыдущих публикациях я проводил эксперименты с микроконтроллером ATMega8, здесь же используется менее «нафаршированный» МК — ATTiny2313.
Для компиляции программы и прошивки ее в МК следует немножко перенастроить команды для сборки в интегрированной среде программирования Geany.
Идем в меню Build — Set Build Commands. В команде для компиляции (C commands) нужно изменить модель применяемого чипа: «-mmcu=attiny2313». В команде для прошивки МК нужно изменить тип чипа для avrdude: «-p t2313».
Рис. 3. Перенастройка Geany для работы с микроконтроллером ATTiny2313.
Все команды приведены для ОС GNU Linux, если у вас Windows то возможно придется прописать полные пути к бинарным файлам «avr-gcc.exe», «avr-objcopy.exe», «avrdude.exe».
Более подробно о том как настроить Geany в GNU Linux я рассматривал в одной из предыдущих статей цикла.
Защищенные микроконтроллеры с архитектурой secureAVR™
Тип | Напр. питания, В | CRYPTO | EEPROM | Масочная ROM | RAM | Flash | I/O | Таймеры | Тип интер-фейса |
AT90SC9618RT | 2.7 — 5.5 | + | 18K | 96K | 4K | — | 1 | 2x16bit | ISO7816 |
AT90SC9618RCT | 2.7 — 5.5 | + | 18K | 96K | 4K | — | 1 | 2x16bit | ISO7816 |
AT90SC9616RC | 2.7 — 5.5 | + | 16K | 96K | 3K | — | 2 | 2x16bit | ISO7816 |
AT90SC9608RT | 2.7 — 5.5 | — | 8K | 96K | 4K | — | 1 | 2x16bit | ISO7816 |
AT90SC9608RCT | 2.7 — 5.5 | + | 8K | 96K | 4K | — | 1 | 2x16bit | ISO7816 |
AT90SC9608RC | 2.7 — 5.5 | + | 8K | 96K | 3K | — | 2 | 2x16bit | ISO7816 |
AT90SC6436RT | 2.7 — 5.5 | — | 36K | 64K | 2K | — | 1 | 1x16bit | ISO7816 |
AT90SC6404RFT | 2.7 — 5.5 | — | 4K | 64K | 1K | — | 1 | 2x16bit | ISO14443 |
AT90SC6404RT | 2.7 — 5.5 | — | 4K | 64K | 2K | — | 1 | 2x16bit | ISO7816 |
AT90SC4818RT | 2.7 — 5.5 | — | 18K | 48K | 2K | — | 1 | 1x16bit | ISO7816 |
AT90SC320288RCT | 1.62 — 5.5 | + | 288K | 320K | 8K | — | 2 | 2x16bit | ISO7816 |
AT90SC288144RT | 1.62 — 5.5 | — | 144K | 288K | 6K | — | 1 | 2x16bit | ISO7816 |
AT90SC25672RT | 1.62 — 5.5 | — | 72K | 256K | 6K | — | 1 | 2x16bit | ISO7816 |
AT90SC19272RC | 2.7 — 5.5 | + | 72K | 192K | 4K | — | — | 2x16bit | ISO7816 |
AT90SC19236RT | 1.62 — 5.5 | — | 36K | 192K | 4K | — | 1 | 2x16bit | ISO7816 |
AT90SC12872RCFT | 1.62 — 5.5 | + | 72K | 128K | 5K | — | 2 | 3x16bit | ISO14443+ISO7816 |
AT90SC12836RCT | 2.7 — 5.5 | + | 36K | 128K | 5K | — | 1 | 2x16bit | ISO7816 |
AT90SC12836RCFT | 2.7 — 5.5 | + | 36K | 128K | 5K | — | 2 | 3x16bit | ISO14443 + ISO7816 |
|
— не рекомендованы для новых разработок |
Все приборы семейства AVR совместимы по исходным кодам и тактированию. Семейство обеспечено комплектом программ и системами отладки, включающими: макро-ассемблеры, отладчики/симуляторы программ, внутрисхемные эмуляторы, и отладочные устройства.
Микроконтроллеры семейства AVR поставляются в очищенном состоянии — содержимое и Flash памяти программ и ЭСППЗУ данных находится в состоянии FF и готово к программированию.
Объединение на одном кристалле усовершенствованного 8-разрядного RISC ЦПУ с загружаемым Flash ПЗУ позволило фирме создать мощный микроконтроллер, обеспечивающий высокую гибкость и экономичность в использовании прибора в качестве встраиваемого контроллера.
RISC
RISC-архитектура (Reduced Instruction Set Computer) относится к процессорам с сокращённым набором команд. В ней быстродействие увеличивается посредством упрощения инструкций: за счёт того, что их декодирование становится проще, уменьшается время исполнения. Изначально RISC-процессоры не обладали инструкциями деления и умножения и не могли работать с числами, имеющими плавающую запятую. Их появление связано с тем, что в CISC достаточно много способов адресации и команд использовались крайне редко.
Система команд в RISC состоит из малого числа часто применяемых команд одного формата, которые можно выполнить за единичный такт центрального процессора. Более сложные и редко применяемые команды выполняются на программном уровне. При этом, благодаря значительному увеличению скорости реализации команд, средняя производительность RISC-процессоров выше, чем у CISC.
Современные RISC-процессоры выполняют порядка сотни команд с закреплённым форматом длиной 4 байта, используя небольшое количество простых способов адресации (индексную, регистровую и другие). Чтобы сократить число обращений к внешней оперативной памяти, в RISC применяются сотни регистров общего назначения (РОН), в то время как в CISC их всего 8-16. В RISC-процессорах обращение к памяти используется только при загрузке данных в РОН либо пересылке результатов в память.
Благодаря сокращению аппаратных средств, используемых для декодирования и реализации сложных команд, достигается значительное упрощение и снижение стоимости интегральных схем. В то же время возрастает производительность и снижается энергопотребление, что особенно актуально для мобильного сегмента. Эти же достоинства служат причиной использования во многих современных CISC-процессорах, например в последних моделях К7 и Pentium, RISC-ядра. Сложные CISC-команды заранее преобразуются в набор простых RISC-операций, которые оперативно выполняются RISC-ядром.
Характерными примерами RISC-архитектур являются:
- PowerPC;
- DEC Alpha;
- ARC;
- AMD Am29000;
- серия архитектур ARM;
- Atmel AVR;
- Intel i860 и i960;
- BlackFin;
- MIPS;
- PA-RISC;
- Motorola 88000;
- SuperH;
- RISC-V;
- SPARC.
RISC быстрее CISC, и даже при условии выполнения системой RISC четырёх или пяти команд вместо единственной, выполняемой CISC, RISC выигрывает в скорости, поскольку его команды выполняются в разы оперативнее. Однако CISC продолжает использоваться. Это связано с совместимостью: x86_64 продолжает лидировать в десктоп-сегменте, а поскольку старые программы могут функционировать только на x86, то и новые десктоп-системы должны быть x86(_64), чтобы дать возможность старым программам работать на новых устройствах.
Для Open Source это не проблема, ведь пользователь может найти в сети версию программы, подходящую для другой архитектуры. Однако создать версию проприетарной программы для другой архитектуры получится только у владельца исходного кода.
Резюме микропроцессора и микроконтроллера
Ключевое различие между этими терминами заключается в наличии периферийных устройств. В отличие от микроконтроллеров, микропроцессоры не имеют встроенной памяти, ПЗУ, последовательных портов, таймеров и других периферийных устройств, которые составляют систему. Для взаимодействия с периферийными устройствами требуется внешняя шина. С другой стороны, микроконтроллер имеет все периферийные устройства, такие как процессор, оперативная память, ПЗУ и IO, встроенные в один чип. Он имеет внутреннюю управляющую шину, которая недоступна дизайнеру. Поскольку все компоненты упакованы в один чип, он компактный, что делает его идеальным для крупномасштабных промышленных применений. Микропроцессор — это сердце компьютерной системы, а микроконтроллер — это мозг.
Микропроцессор и микроконтроллер являются типичными программируемыми электронными чипами, используемыми для различных целей. Существенное различие между ними заключается в том, что микропроцессор представляет собой программируемый вычислительный механизм, состоящий из ALU, CU и регистров, обычно используемых в качестве блока обработки (например, CPU в компьютерах), который может выполнять вычисления и принимать решения. С другой стороны, микроконтроллер — это специализированный микропроцессор, который рассматривается как «компьютер на кристалле», поскольку он объединяет такие компоненты, как микропроцессор, память и параллельный цифровой ввод / вывод.
Микроконтроллер в первую очередь предназначен для управления задачами в реальном времени, в отличие от микропроцессора.
Сравнительная таблица
Основа для сравнения | Микропроцессор | микроконтроллер |
---|---|---|
основной | Состоит из одного кремниевого чипа, содержащего ALU, CU и регистры. | Состоит из микропроцессора, памяти, порта ввода / вывода, блока управления прерываниями и т. Д. |
Характеристика | Зависимая единица | Автономный блок |
Порты ввода / вывода | Не содержит встроенного порта ввода / вывода | Встроенные порты ввода / вывода присутствуют |
Тип выполненной операции | Общее назначение при проектировании и эксплуатации. | Ориентирован на приложение или предметную область. |
Целевой для | Рынок высшего класса | Встроенный рынок |
Потребляемая мощность | Обеспечивает меньше вариантов энергосбережения | Включает больше вариантов энергосбережения |
Определение микропроцессора
Микропроцессор с кремниевой микросхемой работает как центральный процессор (ЦП). Он может выполнять функции, в том числе логические и арифметические, согласно заранее определенным инструкциям, указанным изготовителем. ЦП состоит из АЛУ (арифметического и логического блока), регистра и блока управления. Микропроцессор может быть сконструирован разными способами в зависимости от набора команд и архитектуры системы.
Для проектирования микропроцессора предусмотрены две системные архитектуры — Гарвард и Фон-Нейман. Процессор гарвардского типа, встроенный в изолирующие шины для программ и памяти данных. Напротив, процессор на основе архитектуры фон-Неймана совместно использует одну шину для памяти программ и данных.
Микропроцессор не является независимым блоком, он зависит от других аппаратных блоков, таких как память, таймер, контроллер прерываний и т. Д. Первый микропроцессор был разработан Intel в 1971 году и назван Intel 4004.
Определение микроконтроллера
Микроконтроллер — это технология, разработанная после микропроцессора и позволяющая преодолеть недостатки микропроцессора. Микросхема микроконтроллера обладает высокой степенью интеграции с процессором, памятью (RAM и ROM), регистрами, блоками управления прерываниями и выделенными портами ввода / вывода. Кажется, это надстройка микропроцессора. В отличие от микропроцессора микроконтроллер не зависит от других аппаратных блоков, он содержит все необходимые блоки для правильного функционирования.
Микроконтроллер более ценен, чем микропроцессор в области встроенных систем, потому что он более экономичен и легко доступен. Первый микроконтроллер TMS 1000 был разработан компанией Texas Instruments в 1974 году. Базовая конструкция микроконтроллера TI напоминает процессор Intel 4004/4040 (4-разрядный), в который разработчики добавили поддержку ОЗУ, ПЗУ, ввода-вывода. Еще одним преимуществом микроконтроллера является то, что мы можем записывать пользовательские инструкции в процессор.
Prerequisites
In order to follow this series of tutorials on the ATtiny2313, you will need to have some experience in the following fields.
Building Circuits
It is assumed that you have some basic knowledge of electronics and that you can build breadboard circuits. If not, learn about electronics and how to build breadboard circuits in the Start Electronics Now course.
Software Development
To be able to do your own software development, you will need to be able program in the C programming language. If you do not know the C programming language, then it is still possible to follow the tutorials as you will be able to load the C program examples to the microcontroller without having to write your own programs.
Программы для микроконтроллера
Как уже упоминалось выше, микроконтроллер подобен ПК, а это значит, что, как и ПК, AVR также может выполнять какую-либо программу, хотя и всего одну в какой-либо момент времени.
Программа микроконтроллера может храниться во встроенной памяти контроллера и представляет собой серию очень простых команд, которые выбирают данные и осуществляют с ними операции. В большинстве случаев это означает считывание входящих данных, проверка их состояния и вывода соответствующих выходных данных. Иногда может потребоваться изменение данных и совершение с ними некоторых операций, а также передача данных какому-либо внешнему устройству, например, индикатору, или последовательному порту.
Для таких элементарных задач используются наборы двоичных команд, каждая из которых имеет аналог на более доступном человеческому восприятию языке ассемблера. Поэтому наиболее распространенным способом написания программ для контроллера является написание их на языке ассемблера.
Преимуществом ассемблера является очень быстрый, компактный и эффективный код, но создание таких программ одновременно требует и глубоких знаний работы процессора контроллера, ручного управления памятью и контроля структуры программы. Поэтому зачастую для написания программ используются и языки высокого уровня, такие, как С, Basic и Java. В этом случае задачу по контролю структуры программы и управлению памятью берет на себя компилятор. Кроме того, часто используемые функции могут быть при этом помещены в библиотеки и извлекаться из них по мере надобности.
Микроконтроллеры семейства MegaAVR
Тип | Напр. питания, В | Такт. Частота, МГц | I/O | Flash | EEPROM | SRAM | Интер-фейсы | АЦП | Таймеры | ISP | Корпус |
ATmega406 | 4.0 — 25 | 1 | 18 | 40K | 512 | 2K | JTAGTWI | 10x12bit1x18bit | 1x8bit1x16bit | IPower-savePower-downPower-off | LQFP48 |
ATmega48 | 1.8-5.5 | 20 | 23 | 4K | 256 | 512 | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | DIP28 TQFP32 MLF32 |
ATmega48 Avtomotove | 2.7-5.5 | 16 | 23 | 4K | 256 | 512 | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | TQFP32 MLF32 |
ATmega88 | 1.8-5.5 | 20 | 23 | 8K | 512 | 1k | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | DIP28 TQFP32 MLF32 |
ATmega88 Avtomotove | 2.7-5.5 | 20 | 23 | 8K | 512 | 1k | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | TQFP32 MLF32 |
ATmega168 | 1.8-5.5 | 20 | 23 | 16K | 512 | 1k | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | DIP28 TQFP32 MLF32 |
ATmega168 Avtomotove | 2.7-5.5 | 20 | 23 | 16K | 512 | 1k | UARTSPII2C | 6x10bit2x8bit | 2x8bit1x16bit | S | TQFP32 MLF32 |
ATmega8 | 2.7-5.5 | 16 | 23 | 8K | 512 | 1k | UARTSPI | 8x10bit | 2x8bit1x16bit | S | DIP28 TQFP32 MLF32 |
ATmega16 | 2.7-5.5 | 16 | 32 | 16K | 512 | 1k | UARTSPI | 8x10bit | 2x8bit1x16bit | S | DIP40 TQFP44 MLF44 |
ATmega32 | 2.7-5.5 | 16 | 32 | 32K | 1K | 2K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | DIP40 TQFP44 MLF44 |
ATmega64 | 2.7-5.5 | 16 | 53 | 64K | 2K | 4K | 2xUARTSPI | 8x10bit | 2x8bit2x16bit | S | TQFP64 MLF64 |
ATmega640 | 1,8…5,54,5…5,5 | 816 | 86 | 64K | 4K | 8K | 4xUARTJTAGSPI | 16x10bit | 2x8bit4x16bit | I | TQFP100 |
ATmega128 | 2.7-5.5 | 16 | 53 | 128K | 4K | 4K | 2xUARTSPI | 8x10bit | 2x8bit2x16bit | S | TQFP64 MLF64 |
ATmega1280 | 1,8…5,54,5…5,5 | 816 | 86 | 128K | 4K | 8K | 4xUARTJTAGSPI | 16x10bit | 2x8bit4x16bit | I | TQFP100 |
ATmega1281 | 1,8…5,54,5…5,5 | 816 | 54 | 128K | 4K | 8K | 2xUARTJTAGSPI | 8x10bit | 2x8bit4x16bit | I | TQFP64 |
AT90CAN32 | 2.7-5.5 | 16 | 53 | 32K | 1K | 2048 | UARTJTAGCANUSART | 8x10bit | 2x8bit2x16bit | S | MLF 64 LQFP 64 |
AT90CAN64 | 2.7-5.5 | 16 | 53 | 64K | 2K | 4K | UARTJTAGCANUSART | 8x10bit | 2x8bit2x16bit | S | MLF 64 LQFP 64 |
AT90CAN128 | 2.7-5.5 | 16 | 53 | 128K | 4K | 4K | 2xUARTSPICAN | 8x10bit | 2x8bit2x16bit | S | TQFP64 MLF64 |
AT90CAN128 Automotive | 2.7-5.5 | 16 | 53 | 128K | 4K | 4096 | 2xUARTSPICAN | 8x10bit | 2x8bit2x16bit | S | MLF64 LQFP64 |
ATmega103 | 4.0-5.5 | 6 | 48 | 128K | 4K | 4K | UARTSPI | 8x10bit | 2x8bit2x16bit | I | TQFP64 |
ATmega161 | 2.7-5.5 | 8 | 35 | 16K | 512 | 1K | 2xUARTSPI | — | 2x8bit1x16bit | S | DIP40 TQFP44 |
ATmega162 | 1.8-5.5 | 16 | 35 | 16K | 512 | 1K | 2xUARTSPI | — | 2x8bit1x16bit | S | DIP40 TQFP44 MLF44 |
ATmega163L | 2.7-5.5 | 8 | 32 | 16K | 512 | 1K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | DIP40 TQFP44 MLF44 |
ATmega164P/V | 1.8-5.5 | 16 | 32 | 16K | 512K | 1024 | 2xUARTSPI+USARTTWI | 8x10bit | 2x8bit1x16bit | S | MLF44 PDIP40 TQFP44 |
ATmega165 | 1.8-5.52.7-5.5 | 816 | 53 | 16K | 512 | 1K | UARTSPIJTAGPWM | 8x10bit | 2x8bit1x16bit | S | TQFP64 MLF64 |
ATmega165P | 1.8-5.5 | 16 | 54 | 16K | 0.5 | 1024 | UARTSPI+USI4PWM | 8x10bit | 2x8bit1x16bit | S | MLF64 TQFP64 |
ATmega169 | 1.8-3.6 | 4 | 534×25 LCD | 16K | 512 | 1K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP64 |
ATmega169P | 1.8-5.5 | 16 | 54 | 16K | 0.5 | 1024 | UARTSPI+USI4PWM | 8x10bit | 2x8bit1x16bit | S | MLF64 TQFP64 |
ATmega8515 | 2.7-5.5 | 16 | 35 | 8K | 512 | 512 | UARTSPI | — | 2x8bit1x16bit | S | PDIP40 PLCC44 TQFP,MLF |
ATmega8535 | 2.7-5.5 | 16 | 32 | 8K | 512 | 512 | UARTSPI | 8x10bit | 2x8bit1x16bit | S | PDIP40 PLCC44 TQFP MLF |
ATmega2560 | 1,8…5,54,5…5,5 | 816 | 86 | 256K | 4K | 8K | 2xUARTJTAGSPI | 16x10bit | 2x8bit4x16bit | I | TQFP100 |
ATmega2561 | 1,8…5,54,5…5,5 | 816 | 54 | 256K | 4K | 8K | 2xUARTJTAGSPI | 8x10bit | 2x8bit4x16bit | I | TQFP64 |
ATmega324P/V | 1.8-5.5 | 20 | 32 | 32K | 1K | 2048 | 2xUARTSPI+USARTTWI | 8x10bit | 2x8bit1x16bit | S | MLF44 PDIP40 TQFP44 |
ATmega325 | 1.8-5.5 | 16 | 53 | 32K | 1K | 2K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega3250 | 1.8-5.5 | 16 | 68 | 32K | 1K | 2K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega325P | 1.8-5.5 | 20 | 54 | 32K | 1K | 2048 | UARTSPI | 8x10bit | 2x8bit1x16bit | S | MLF64 TQFP64 |
ATmega3250P | 1.8-5.5 | 20 | 54 | 32K | 1K | 2048 | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP100 |
ATmega329P | 1.8-5.5 | 16 | 54 | 32K | 1K | 2048 | JTAGSPI | 8x10bit | 2x8bit1x16bit | S | MLF64 TQFP64 |
ATmega3290P | 1.8-5.5 | 16 | 54 | 32K | 1K | 2048 | JTAGSPI | 8x10bit | 2x8bit1x16bit | S | TQFP100 |
ATmega644P/V | 1.8-5.5 | 20 | 32 | 64K | 2K | 4096 | 2xUARTSPI+USARTTWI | 8x10bit | 2x8bit1x16bit | S | MLF44 PDIP40 TQFP44 |
ATmega645 | 1.8-5.5 | 16 | 53 | 64K | 2K | 4K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega6450 | 1.8-5.5 | 16 | 68 | 64K | 2K | 4K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega644 | 1.8-5.52.7-5.5 | 1020 | 32 | 64K | 2K | 4K | UARTSPITWIPWMJTAG | 8x10bit | 2x8bit1x16bit | S | PDIP40 TQFP44 MLF44 |
ATmega329 | 1.8-5.5 | 16 | 53LCD 4×25 | 32K | 1K | 2K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega3290 | 1.8-5.5 | 16 | 68LCD 4×40 | 32K | 1K | 2K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega649 | 1.8-5.5 | 16 | 53LCD 4×25 | 64K | 2K | 4K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
ATmega6490 | 1.8-5.5 | 16 | 68LCD 4×40 | 64K | 2K | 4K | UARTSPI | 8x10bit | 2x8bit1x16bit | S | TQFP MLF |
Сферы применения различных Tiny, Mega
Четко описать сферу применения микроконтроллера нельзя, ведь она безгранична, однако можно классифицировать следующим образом:
- Tiny AVR – самые простые в техническом плане. В них мало памяти и выводов для подключения сигналов, цена соответствующая. Однако это идеальное решение для простейших проектов, начиная от автоматики управления осветительными приборами салона автомобиля, до осциллографических пробников для ремонта электроники своими руками. Они также используются в Arduino-совместимом проекте – Digispark. Это самая маленькая версия ардуины от стороннего производителя; выполнена в формате USB-флешки.
- Семейство MEGA долго оставалось основным у продвинутых радиолюбителей, они мощнее и имеют больший, чем в Tiny, объём памяти и количество выводов. Это позволяет реализовывать сложные проекты, однако семейство очень широко для краткого описания. Именно они использовались в первых платах Arduino, актуальные платы оснащены, в основном, ATMEGA
Выход любого МК без дополнительных усилителей потянет светодиоды или светодиодную матрицу в качестве индикаторов, например.
Пин RESET в качестве порта ввода-вывода
Полезно знать что пин «RESET» микросхемы (у нас на схеме это пин под номером 1), который предназначен для сброса выполнения программы микроконтроллера (перезагрузки), также можно использовать для подключения кнопок, светодиодов и других устройств ввода-вывода, то есть он может быть превращен в обычный GPIO.
Это может быть полезно если у микросхемы не хватает пинов для вашей конструкции. Например при сборке какого-то устройства на чипе ATtiny13 (8 выводов, 2шт — питание, 5шт — порты ввода-вывода, 1шт -для RESET) у вас оказалось что не хватает одного пина для светодиода. Здесь может быть несколько вариантов решения проблемы:
- Перепрограммирование пина с RESET под порт ввода-вывода;
- Подключение светодиода к одному из соседних уже использованных пинов, применив некоторые хистросты в схемном решении и с учетом возможности его общего использования;
- Использование другого МК у которого больше пинов, например ATtiny2313.
Что из этих вариантов проще и дешевле по финансам/времени — судите по своему случаю.
Для превращения пина «RESET» в порт ввода-вывода придется изменить специальный фьюз — RSTDISBL (Reset Disable). Но прежде чем это сделать нужно помнить что после данной операции перепрограммировать микроконтроллер станет возможным только с применением высоковольтного программатора (на 12В), обычный USB ISP или другой программатор с питанием от 5В сделать свою работу уже не сможет.
Структура портов ввода-вывода в AVR микроконтроллерах
Пины микроконтроллера являются универсальными GPIO (General Purpose Input Output), к ним можно подключать как исполнительные устройства (индикаторы, силовые ключи), так и разнообразные цифровые датчики (кнопки, переключатели).
Несколько пинов в МК могут быть подключены к АЦП/ЦАП (Аналогово-Цифровой-Преобразователь и наоборот), с их помощью можно выполнять анализ и генерацию аналоговых сигналов. Обычные GPIO не умеют работать с аналоговыми сигналами, у них на входе/выходе может быть только 0 (0В) или 1 (+5В).
К каждому пину GPIO внутри микроконтроллера подключены несколько блоков и электронных компонентов, о которых полезно знать:
- Между пином порта и каждой из шин питания (GND и VCC) подключено по диоду
. Они используются для «гашения» кратковременных помех, скачков напряжения относительно пина и каждой из шин питания; -
Также между пином и GND включен конденсатор
. Точно не знаю зачем он нужен, возможно для защиты от помех, для предотвращения дребезга контактов при использовании кнопок и переключателей подключенных к пину, или еще для чего-то; - К каждому пину подключен электронный ключ с резистором — это подтяжка пина к напряжению источника питания (Pull-UP)
. Данный электронный ключ включается программно и служит для установки по умолчанию высокого логического уровня 1 (+5В) при работе с пином в режиме ввода (Input); - Между пином и каждой из шин питания (GND и VCC) включены еще два электронных ключа (без резисторов), они нужны для установки на пине высокого (+5В) или низкого (0В) логического уровня
при работе пина в режиме вывода (Output).
Для программного управления и конфигурирования каждого из портов применяются три специальных регистра, к примеру для порта «B»:
- DDRB — регистр (8 бит) для установки режимов работы пинов — на ввод или вывод. Осуществляется установкой соответствующих бит в регистре;
- PORTB — регистр для управление состоянием пинов порта в режиме вывода — высокий или низкий уровень. Также используется в режиме ввода, применяется для включения подтягивающих резисторов (Pull-UP) и установки высокого уровня на входе по умолчанию;
- PINB — регистр, который содержит логические состояния пинов в порте, используется для чтения значений портов, которые сконфигурированы в режиме ввода.
Более детально узнать об устройстве портов для конкретной модели микроконтроллера можно из его даташита, в разделе «I/O-Ports», также там могут быть приведены примеры кода на Си и Ассемблере для работы с портами.