Attiny2313 tutorial introduction

Описание микроконтроллера атtiny2313 фирмы atmel

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

Память данных предназначена для записи/чтения данных, используемых программами. Является энергозависимой, то есть, при отключении питания микроконтроллера все хранимые в ней данные, будут потеряны. В микроконтроллерах 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

Четко описать сферу применения микроконтроллера нельзя, ведь она безгранична, однако можно классифицировать следующим образом:

  1. Tiny AVR – самые простые в техническом плане. В них мало памяти и выводов для подключения сигналов, цена соответствующая. Однако это идеальное решение для простейших проектов, начиная от автоматики управления осветительными приборами салона автомобиля, до осциллографических пробников для ремонта электроники своими руками. Они также используются в Arduino-совместимом проекте – Digispark. Это самая маленькая версия ардуины от стороннего производителя; выполнена в формате USB-флешки.
  2. Семейство MEGA долго оставалось основным у продвинутых радиолюбителей, они мощнее и имеют больший, чем в Tiny, объём памяти и количество выводов. Это позволяет реализовывать сложные проекты, однако семейство очень широко для краткого описания. Именно они использовались в первых платах Arduino, актуальные платы оснащены, в основном, ATMEGA

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

Пин RESET в качестве порта ввода-вывода

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

Это может быть полезно если у микросхемы не хватает пинов для вашей конструкции. Например при сборке какого-то устройства на чипе ATtiny13 (8 выводов, 2шт — питание, 5шт — порты ввода-вывода, 1шт -для RESET) у вас оказалось что не хватает одного пина для светодиода. Здесь может быть несколько вариантов решения проблемы:

  1. Перепрограммирование пина с RESET под порт ввода-вывода;
  2. Подключение светодиода к одному из соседних уже использованных пинов, применив некоторые хистросты в схемном решении и с учетом возможности его общего использования;
  3. Использование другого МК у которого больше пинов, например 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», также там могут быть приведены примеры кода на Си и Ассемблере для работы с портами.

Понравилась статья? Поделиться с друзьями:
Зинг-Электро
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: