Datasheet attiny2313, attiny2313v (atmel) — 2

Switching Bits on and Off in C

Both the above examples use the C OR operator | to switch bits on and the C AND operator & to switch bits off.

In this line of code, the |= operator performs a read-modify-write.

DDRD |= ((1 << PD0) | (1 << PD5));

The contents of the DDRD register are read (read), the value that was read is then ORed with the value to the right of the |= operator (modify). The new value is then written back to the DDRD register (write).

On

The read-modify-write shown below performs a C bitwise OR operation which sets bit 0 of the PORTD register.

PORTD |=  (1 << PD0);           // switch PD0 LED on

This code reads the PORTD register and then changes only the PD0 bit in the byte read from it by setting it to 1. The modified byte is then written back to the register. Because the OR operator is being used, all other bits in the register, whether 1’s or 0’s will remain unchanged as they are all being ORed with 0. Only the PD0 bit is being ORed with 1.

Off

To switch a bit off, the C bitwise AND operator must be used. To prevent changing any other bit in the register when performing an AND operation, all the other bits must be ANDed with 1, except the bit that is to be cleared. The bit to be cleared is ANDed with 0.

PORTD &= ~(1 << PD0);           // switch PD0 LED off

In the above line of code, the PD0 bit is cleared. The C bitwise invert operator ~ is used to invert all the bits in the value that is ANDed with PORTD. This makes the bit to be cleared 0 and all the rest of the bits 1 so that the corresponding bits will remain unchanged in the register (bits 7 to 1 will remain unchanged, bit 0 will be cleared).

In this example, the value ANDed with the PORTD register would be 00000001b, but after inverting the value it becomes 11111110b, so that only bit 0 is cleared when the AND operation is performed.

Getting Set Up

To get the required software installed and to test program the hardware, follow the article Starting AVR 8-bit Development on this website.

This article uses the AVRISP mkII to program a ATtiny2313 microcontroller circuit that flashes an LED on and off. If you are using the AVR Dragon instead, just select the AVR Dragon in the Atmel Studio settings instead of the AVRISP mkII. For other programmers, you will need to follow their specific software requirements and usage instructions.

Once you have followed the above article, you will have the software and hardware installed and tested. You will then be ready to follow the rest of the parts of this tutorial.

← Go back to AVR 8-bit MicrocontrollersGo to Part 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 я рассматривал в одной из предыдущих статей цикла.

Interfacing LEDs to the ATtiny2313

Two example circuits are used to show how to set up pins on the ATtiny2313 as outputs.

LED Flasher Circuit

In this circuit, two pins from port D of the ATtiny2313 are interfaced to LEDs (current sourcing).

ATtiny2313 LED Flasher Circuit — click for a bigger image

LED Knight Rider Display Circuit

This circuit is used to make a five LED knight rider display. The LEDs are also interfaced in a current sourcing configuration, but are connected to port B this time.

ATtiny2313 Interfaced to Five LEDs — click for a bigger image

For a current sinking example, see the circuit diagram and C source code from the Starting AVR 8-bit Development tutorial.

Stepped PWM Example

This example changes the PWM value (and therefore the pulse width) every two seconds. This causes the LED to change to a different brightness every two seconds as shown in the video above.

Software

// TC0_PWM.c
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB   |= (1 << PB2);                   // PWM output on PB2
    TCCR0A = (1 << COM0A1) | (1 << WGM00);  // phase correct PWM mode
    OCR0A  = 0x10;                          // initial PWM pulse width
    
    TCCR0B = (1 << CS01);   // clock source = CLK/8, start PWM
    
    while(1)
    {
        // change PWM pulse width every 2 seconds
        _delay_ms(2000);
        OCR0A  = 0x10;
        _delay_ms(2000);
        OCR0A  = 0x30;
        _delay_ms(2000);
        OCR0A  = 0x50;
        _delay_ms(2000);
        OCR0A  = 0xA0;
    }
}

Before using the PWM, the output pin from the PWM must be set as an output. This pin is PB2 which has the alternate function of output from Timer/Counter 0:

DDRB   |= (1 << PB2);                   // PWM output on PB2

Timer/Counter0 is then put into phase correct PWM mode, set with an initial value and started.

Writing to the OCR0A will change the width of the PWM pulse.

Project Source Code

The source code above can be copied and pasted to your own project, or download the Atmel Studio project for this example here:

TC0_PWM.zip (14.8kB)

Books that may interest you:

Используем переходную плату

Одна из проблем при экспериментировании с этими новыми МК заключается в том, что они поставляются только в корпусах для поверхностного монтажа (SMD). Это затрудняет их использование на макетных платах. Для этой цели была разработана плата-адаптер, которая позволит использовать МК ATtiny1614 как стандартный элемент в форм-факторе DIL (Dual-In-Line). Принципиальная схема платы-адаптера изображена на Рисунке 2.

Рисунок 2. Принципиальная схема платы адаптера (SOIC-DIL) для МК ATtiny1614.

Плата была разработана в САПР Eagle, и проектные файлы доступны для скачивания в разделе загрузок (Рисунок 3). Стоит заметить, что расположение выводов переходной платы DIL форм-фактора отличается от расположения выводов МК в SMD корпусе. Сделано это было специально, чтобы плата адаптера получилась односторонней и ее можно было изготовить в домашних условиях по ЛУТ-технологии, сохранив стандартную ширину 0.3 дюйма. Выводы UPDI/Reset, VCC и GND выведены на отдельную планку, поэтому программатор можно подключить к МК, даже когда плата-адаптер уже запаяна на другую плату (в устройстве).

Рисунок 3. Проект платы адаптера (SOIC-DIL) для МК ATtiny1614 в САПР Eagle.

Способ программирования новых МК серии ATtiny

Одним из самых больших изменений в этих МК подвергся интерфейс программирования. В новой серии МК ATtiny применен интерфейс, получивший название Unified Program and Debug Interface (UPDI), – универсальный интерфейс программирования и отладки. В этом интерфейсе задействован вывод МК Reset/UPDI. Для программирования МК по интерфейсу UPDI и подачи корректных сигналов на вывод Reset/UPDI мы будем использовать плату Arduino Nano. После программирования МК плата Arduino Nano больше не понадобиться. Схема подключения платы Arduino Nano к МК изображена на Рисунке 4.

Рисунок 4. Схема подключения Arduino Nano в качестве UPDI программатора к МК ATtiny1614.

Шаг 1. Настраиваем плату Arduino Nano в качестве программатора

В секции загрузок доступен для скачивания архив SpenceKonde — jtag2updi.zip. Распакуйте архив в папку со скетчами Arduino и запрограммируйте плату Arduino Nano. Этот архив содержит скетч, который превращает Arduino Nano в UPDI программатор.

Примечание:
не пугайтесь, что файл jtag2updi.ino пустой, фактически, весь код находится в других файлах.

Чтобы предотвратить запись Arduino скетчей в плату Arduino Nano при программировании МК ATtiny1614, необходимо отключить линию Reset на Arduino. Сделать это можно, добавив конденсатор емкостью 10 мкФ между линией Reset Arduino и GND (см. Рисунок 4). Короткий импульс сброса будет сбрасывать только МК ATtiny1614, а не  Arduino. Плату Arduino можоно сбросить нажатием кнопки сброса в течение более длительного времени.

Между выводами D6 Arduino и Reset/UPDI МК ATtiny1614 необходимо включить резистор 4.7 кОм. Также необходимо подключить МК к питанию +5 В и GND (на плате Arduino Nano).

Шаг 2. Установка поддержки плат megaTinyCore в Arduino IDE

Пакет поддержки плат в Arduino IDE устанавливается с помощью менеджера плат. Для этого необходимо:

  • В меню «Настройки» (Preferences) добавить ссылку  http://drazzy.com/package_drazzy.com_index.json в менеджер дополнительных плат;
  • Запустить менеджер плат (Tools – Boards — Board Manager);
  • Найти в списке платы «megaTinyCore by Spence Konde» и нажать кнопку «Установить» (Install).

Шаг 3. Выбор программатора

После того как пакет дополнительных плат «megaTinyCore by Spence Konde» был установлен в Arduino IDE, в меню «Инструменты» (Tools) выбираем (Рисунок 5):

  • Плату «ATtiny1614/ATtiny1604/ATtiny814/ATtiny804/ATtiny414/ATtiny404/ATtiny214/ATtiny204»;
  • Тактовая частота: 16 МГц;
  • COM-порт, к которому подключен наш программатор на плате Arduino Nano;
  • Программатор: — «jtag2updi(megaTinyCore)».
Рисунок 5. Выбор типа платы и программатора для работы с МК ATtiny1614 в Arduino IDE.

При выполнении этих настроек убедитесь, что вы выбрали МК, который собираетесь запрограммировать. Кроме того, слеудет учитывать, что некоторые библиотеки не буду работать на тактовой частоте 20 МГц (например, Adafruit Neopixel), поэтому тактовую частоту нужно выбирать ниже – 16 МГц, а если МК питается от напряжения 3.3 В, то 8 МГц.

Пример Blink

Для проверки программатора загрузим в МК скетч мигания светодиодом (Blink). Для этого подключите светодиод и резистор к выводу 2 (порт PA4) МК ATtiny1614, как показано на  Рисунке 7. На схеме также изображен программатор на плате Arduino Nano.

Рисунок 7. Принципиальная схема подключения светодиода к МК ATtiny1614 для проверочного
скетча Blink.

Откройте в Arduino IDE файл Blink_ATTiny1614.ino и загрузите его в МК с помощью команды «Upload using programmer» в меню «Sketch». В процессе загрузки скетча проигнорируйте сообщения об ошибке программатора «avrdude: jtagmkII_initialize(): Cannot locate «flash» and «boot» memories in description». После загрузки скетча подключенный к МК светодиод начнет мигать (Рисунок 8).

Рисунок 8. Пример подключения светодиода к МК Attiny1614 на монтажной плате.

Обратите внимание, что физический вывод 2 (PA4) МК в Arduino IDE является портом D0 (см. карту портов ввода/вывода на Рисунке 6)

Hardware Requirements

Electronic Components

An ATtiny2313 microcontroller in a dual inline package (DIP) is needed (this package is called PDIP in the Atmel literature – Plastic Dual Inline Package). It is recommended to get the ATtiny2313 microcontroller with part number ATTINY2313-20PU.

Other electronic components such as LEDs, resistors, capacitors, etc. are also needed. The required components will be listed in each part of this tutorial as needed in each part.

Breadboard and Power Supply

An electronic breadboard and wire links are needed for building the circuits.

A 5V (five volt) power supply is required for powering the circuits. The 5V from a PC power supply can be used.

Hardware Tools

In order to load a program to the ATtiny2313, a programming device is needed. This device is connected to the USB port of a PC. The header of the programming device is then connected to certain pins of the ATtiny2313 in order to load a program to it.

There are several AVR programming devices to choose from. Some are for programming the AVR microcontroller only, but others have debugging capabilities as well. Some popular programmers are listed below.

AVRISP mkII

The AVRISP mkII is an AVR programmer from Atmel for in-system programming (ISP) of AVR microcontrollers. This programmer does not have any debugging capabilities.

AVR Dragon

The AVR Dragon is an AVR programmer from Atmel for in-system programming, debugging and high-voltage programming (HV programming). HV programming is used to reset certain internal fuse bits of the AVR that ISP programmers can’t reset.

The AVR Dragon is a good choice of programmer as it has more capabilities than a plain ISP programmer.

Be aware that the AVR Dragon is not supplied with any cables. You will need to buy a standard USB cable (not the miniature type) as well as a ribbon cable with a 6-pin (2 by 3 pin) IDC female header on each end. That will be fine for use on this course.

There are two other ribbon cables that can also be plugged into the AVR Dragon. One is for the JTAG connector which is used on some AVR microcontrollers (not the ATtiny2313) and is a 10-pin header (2 by 5 pins). The other ribbon cable is for connecting to the 20-pin (2 by 10) HV programming header and is needed only if doing HV programming.

Home Made Programmer

There are several AVR programmers that can be built at home (for ISP programming only, not for debugging). There is one that works from the PC parallel port and one that works from the PC serial port. Do a search on the Internet to find these.

Another home built AVR programmer that works from a USB port is the open source USBtinyISP. You can build this programmer yourself from scratch or buy a kit and build it.

These home built programmers may need other software to be loaded in order to use them and may not be able to be used directly from within the Atmel AVR Studio software that we will be using in this course.

Books that may interest you:

Writing to the ATtiny2313 Configuration and Port Registers in C

A C program that sets up the LED pins of the microcontroller as outputs and writes to a register to switch the LEDs on and off can be found below for the two example circuits.

This video shows the two circuits with the C programs below running on them:

Can’t see the video? View on YouTube →

LED Flasher Example

This C program sets up pins PD0 and PD5 as outputs by setting the corresponding bits (bits 0 and 5) in the DDR register for port D (DDRD register).

After setting up the output pins, the program execution drops into a continuous while loop. In the loop, the LEDs are switched on and off by writing either a 1 (on) or 0 (off) to the corresponding bit in the PORT register for the D port (PORTD register).

#include <avr/io.h>

void Delay(void);

int main(void)
{
    // LEDs are on pins PD0 and PD5
    DDRD |= ((1 << PD0) | (1 << PD5));
    
    while(1)
    {
        PORTD &= ~(1 << PD0);           // switch PD0 LED off
        PORTD |=  (1 << PD5);           // switch PD5 LED on
        Delay();
        PORTD &= ~(1 << PD5);           // switch PD5 LED off
        PORTD |=  (1 << PD0);           // switch PD0 LED on
        Delay();
    }       
}

void Delay(void)
{
    volatile unsigned int del = 40000;
    
    while(del--);
}

You can help the Starting Electronics website by making a donation:

Any donation is much appreciated and used to pay the running costs of this website. Click the button below to make a donation.

LED Knight Rider Display Example

In this example, bits PB0 to PB4 in the DDRB register are set to logic 1. This enables pins PB0 to PB4 as outputs.

In the continuous loop in this program, the LEDs are first all switched off by clearing bits 0 to 4 in the PORTB register. Immediately after clearing the bits, the data in the data variable is written to the LEDs. Because there is no delay between clearing the LEDs and writing the data, the LEDs will never all appear to be off.

The data variable contains 1 bit that is set and is shifted to the left and then to the right making the corresponding LED switch on in turn.

#include <avr/io.h>

void Delay(void);

int main(void)
{
    char forward = 1;   // flags the direction of the knight rider display
    char data = 1;      // data to write to knight rider display
    // set up pins PB0 to PB4 as output pins
    DDRB |= ((1 << PB4) | (1 << PB3) | (1 << PB2) | (1 << PB1) | (1 << PB0));
    
    while(1)
    {
        PORTB &= 0xE0;              // switch all LEDs off
        PORTB |= data;              // write data to the LEDs
        Delay();
        if (forward) {              // moving LEDs from right to left
            if (data == 0x10) {
                forward = 0;        // change direction
                data = 0x08;        // prevent writing to same LED twice
            }
            else {
                data <<= 1;         // move to next LED
            }
        }
        else {                      // moving LEDs left to right
            if (data == 0x01) {
                forward = 1;        // change direction
                data = 0x02;        // prevent writing to same LED twice
            }
            else {
                data >>= 1;         // move to next LED
            }
        }
    }
}

void Delay(void)
{
    volatile unsigned int del = 10000;
    
    while(del--);
}

Books that may interest you:

8 битный AVR микроконтроллер с 1 КБ внутрисистемно программируемой Flash памяти

Документация:

  1158 Kb Engl Описание микросхемы ATtiny2313 Предварительная информация
  Rus Система команд и архитектура
  Програмное обеспечение
  Инструментальные средства для 8-разрядных AVR-микроконтроллеров
  Примеры применения микроконтроллеров AVR в устройствах управления 3-фазными бесколлекторными электродвигателями постоянного тока

Отличительные особенности:

  • Высококачественный низкопотребляющий 8- битный AVR микроконтроллер
  • Передовая RISC архитектура
        — 120 команд, большинство которых выполняется за один тактовый цикл
        — 32 8 битных рабочих регистра общего применения
        — Полностью статическая архитектура
  • Энергонезависимая память программ и данных
        — 1 КБ внутрисистемно программируемой Flash памяти программы, способной выдержать 10 000 циклов записи/стирания
        — 64 байта внутрисистемно программируемой EEPROM памяти данных, способной выдержать 100 000 циклов записи/стирания
        — 64 байта встроенной SRAM памяти (статическое ОЗУ)
        — Программируемая защита от считывания самопрограммируемой Flash памяти программы и EEPROM памяти данных
  • Характеристики периферии
        — Один 8- разрядный таймер/счетчик с отдельным предделителем и два ШИМ канала
        — 4 канальный 10 битный АЦП со встроенным ИОН
        — Программируемый сторожевой таймер со встроенным генератором
        — Встроенный аналоговый компаратор
  • Специальные характеристики микроконтроллера
        — Встроенный отладчик debugWIRE
        — Внутрисистемное программирование через SPI порт
        — Внешние и внутренние источники прерывания
        — Режимы пониженного потребления Idle, ADC Noise Reduction и Power-down
        — Усовершенствованная схема формирования сброса при включении
        — Программируемая схема обнаружения кратковременных пропаданий питания
        — Встроенный откалиброванный генератор
  • Порты ввода — вывода и корпусное исполнение
        — 8 выводные PDIP и SOIC корпуса: 6 программируемых линий ввода-вывода
  • Диапазон напряжения питания
        — от 1.8 до 5.5 В
  • Индустриальный рабочий температурный диапазон
  • Потребление
        — Активный режим:
          290 мкА при частоте 1 МГц и напряжении питания 1.8 В
        — Режим пониженного потребления
          0.5 мкА при напряжении питания 1.8 В

Блок- схема ATtiny13:

Расположение выводов ATtiny13:

Общее описание:

ATATtiny13 — низкопотребляющий 8 битный КМОП микроконтроллер с AVR RISC архитектурой. Выполняя команды за один цикл, ATtiny13 достигает производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности.

AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате эта архитектура позволяет обеспечить в десятки раз большую производительность, чем стандартная CISC архитектура.

ATtiny13 имеет следующие характеристики: 1 КБ внутрисистемно программируемой Flash память программы, 64 байтную EEPROM память данных, 64 байтное SRAM (статическое ОЗУ), 6 линий ввода — вывода общего применения, 32 рабочих регистра общего назначения, 8 битный таймер/счетчик со схемой сравнения, внутренние и внешние источники прерывания, 4 канальный 10 битный АЦП, программируемый сторожевой таймер со встроенным генератором и три программно инициализируемых режима пониженного потребления. В режиме Idle останавливается ядро, но ОЗУ, таймер/счетчик, АЦП, аналоговый компаратор и система прерываний продолжают функционировать. В режиме Power-down регистры сохраняют свое значение, но генератор останавливается, блокируя все функции прибора до следующего прерывания или аппаратного сброса. В режиме ADC Noise Reduction останавливается вычислительное ядро и все модули ввода-вывода за исключением АЦП, что позволяет минимизировать шумы при выполнении преобразования.

Прибор изготовлен по высокоплотной энергонезависимой технологии изготовления памяти компании Atmel. Встроенная ISP Flash позволяет перепрограммировать память программы в системе через последовательный SPI интерфейс программой-загрузчиком, выполняемой в AVR ядре, или обычным программатором энергонезависимой памяти.

ATtiny13 поддерживается различными программными средствами и интегрированными средствами разработки, такими как компиляторы C, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и ознакомительные наборы.

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

Компиляция и прошивка программы в МК

Компиляцию, сборку и прошивку программы можно выполнить нажав в среде Geany поочередно три кнопки: «Compile», «Build» и «Run». Также все эти операции можно выполнить из консоли, вот команды для данных действий (выполнять последовательно):

Avr-gcc -mmcu=attiny2313 -Os /tmp/avr-switch-test.c -o /tmp/avr-switch-test.o
avr-objcopy -j .text -j .data -O ihex /tmp/avr-switch-test.o /tmp/avr-switch-test.hex
avrdude -c usbasp -p t2313 -P usb -U flash:w:/tmp/avr-switch-test.hex

Все команды почти полностью (за исключением подстановок имен файлов) идентичны тем, которые мы исправляли в настройках Geany.

Принципиальная схема эксперимента

Для того чтобы можно было хоть как-то наблюдать и управлять чем-то с помощью кнопки мы подключим к микроконтроллеру еще два светодиода. Схемка очень простая, вот она:

Рис. 1. Принципиальная схема эксперимента с микроконтроллером ATtiny2313 и кнопкой.

Как видим, к двум портам PB0 и PB1 через ограничивающие резисторы подключены два светодиода, а к порту PD2 — кнопка и она также с ограничивающим резистором. Для подключения программатора к МК используется разъем Conn 1 (AVR-ISP), а для подключения схемы к отдельному источнику питания +5В предназначены два контакта — P1 и P2.

Рис. 2. Собранная на беспаечной макетной панели схема эксперимента с микроконтроллером и кнопкой.

Важно заметить что для безопасного использования порта с кнопкой, последовательно ей подключен резистор с сопротивлением на 1 КОм (можно подключить и на другое сопротивление 600 Ом — 2 КОм). Примите это как правило хорошего тона в работе с пинами, которое обережет порт МК от выхода из строя в случае ошибочной подачи на пин высокого уровня и при замкнутой кнопке

Continuous PWM Example

This example fades the LED from dim to bright and then back to dim continuously as shown in this video.

Can’t see the video? View on YouTube →

Software

//TC0_PWM_fade.c
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    unsigned char PWM_val = 0;		// 8-bit PWM value
    unsigned char up_dn = 0;		// up down count flag
    
    DDRB   |= (1 << PB2);                   // PWM output on PB2
    TCCR0A = (1 << COM0A1) | (1 << WGM00);  // phase correct PWM mode
    TCCR0B = (1 << CS01);   // clock source = CLK/8, start PWM
    
    while(1)
    {
        if ((PWM_val == 255) || (PWM_val == 0)) {
            up_dn ^= 0x01;      // toggle count direction flag
        }
        _delay_ms(5);
        OCR0A  = PWM_val;       // write new PWM value
        if (up_dn) {            // increment or decrement PWM value
            PWM_val++;
        }
        else {
            PWM_val--;
        }
    }
}

By incrementing the value written to the OCR0A every 5ms, the brightness of the LED is increased smoothly. When the maximum value (255) that can be written to OCR0A is reached, the value is decremented every 5ms, smoothly dimming the LED.

The PWM in this example is set up in the same phase correct PWM mode as the previous example.

You can help the Starting Electronics website by making a donation:

Any donation is much appreciated and used to pay the running costs of this website. Click the button below to make a donation.

Project Source Code

The source code above can be copied and pasted to your own project, or download the Atmel Studio project for this example here:

TC0_PWM_fade.zip (15.3kB)

← Go back to Part 10Go to Part 12 →

Общее описание

ATtiny2313A/4313 — экономичные 8-разрядные КМОП-микроконтроллеры, выполненные на основе улучшенной RISC-архитектуры AVR. За счет выполнения большинства инструкций за один цикл синхронизации ATtiny2313A/4313 достигают производительности близкой к 1 млн. оп. в сек. на каждый МГц тактовой частоты, тем самым позволяя разработчикам систем оптимизировать соотношение энергопотребления и производительности.

Ядро AVR объединяет в себе богатый набор инструкций с 32 рабочими регистрами общего назначения. Все 32 регистра напрямую подключены к АЛУ (арифметико-логическое устройство), что позволяет указывать в одной инструкции два разных регистра и выполнить эту инструкцию за один машинный цикл. В конечном счете, архитектура AVR, за счет 10 кратного превышения производительности по сравнению с обычными CISC микроконтроллерами, обладает большей эффективностью кода программы.

ATtiny2313A/4313 содержат следующие узлы: 2/4 кбайт внутрисистемно-самопрограммируемой Flash-памяти, 128/256 байт EEPROM, 128/256 байт статического ОЗУ, 18 универсальных линий ввода-вывода, 32 рабочих регистра общего назначения, однопроводной интерфейс встроенной отладочной системы, два таймера-счетчика с режимами сравнения, внутренние и внешние прерывания, последовательный программируемый интерфейс УСАПП, универсальный последовательный интерфейс с детектором условия старта, программируемый сторожевой таймер с внутренним генератором, а также три настраиваемых экономичных режима работы. В режиме IDLE прекращает работу ЦПУ, но, при этом продолжают работать статическое ОЗУ, таймер-счетчик, а также системные прерывания. В режиме POWER-DOWN сберегается содержимое регистров, а генераторы останавливаются, вызывая отключение всех встроенных функций вплоть до следующего прерывания или аппаратного сброса. В режиме STANDBY включенным остается только кварцевый генератор, а все остальные узлы бездействуют. Это позволяет добиться быстрого возобновления активной работы при сохранения электропотребления на низком уровне.

Микроконтроллер выпускается по разработанной Atmel технологии энергонезависимой памяти высокой емкости. Встроенная Flash-память позволяет перепрограммировать память программ непосредственно на плате через последовательный интерфейс SPI во внутрисхемном режиме или с помощью обычного программатора энергонезависимой памяти. За счет объединения в одном кристалле 8-разрядного RISC ЦПУ и внутрисистемно-самопрограммируемой Flash-памяти, микроконтроллеры ATtiny2313A/4313 являются мощным инструментом для гибкого и выгодного в ценовом плане решения задач встраиваемого управления.

Микроконтроллеры ATtiny2313A/4313 поддерживаются полным набором программных и аппаратных средств для проектирования, в т.ч.: C-компиляторы, макроассемблер, программный отладчик/симулятор, внутрисхемные эмуляторы и оценочные наборы.

Информация для заказа:

Код заказа(1) Максимальная тактовая частота Напряжение питания Корпус(1) Рабочий температурный диапазон
ATtiny2313A-PUATtiny2313A-SUATtiny2313A-MUATtiny2313A-MMH 20МГц(3) 1.8…5.5В 20 выв. PDIP20 выв. SOIC20 выв. MLF20 выв. VQFN(4)(5) Промышленный (-40…+85°С)
ATtiny4313-PUATtiny4313-SUATtiny4313-MUATtiny4313-MMH 20МГц(3) 1.8…5.5В 20 выв. PDIP20 выв. SOIC20 выв. MLF20 выв. VQFN(4)(5) Промышленный (-40…+85°С)

Прим.:

  1. Микроконтроллеры также доступны в виде пластины с кристаллами. Более детальную информацию по заказу и минимальным количествам уточните в ближайшем представительстве Atmel.
  2. Все корпуса не содержат свинца и галоидов, соответствуют директиве RoHS и требованиям Green.
  3. Действительно только для напряжения питания 4.5…5.5В. Значение максимальной тактовой частоты для других напряжений питания уточните в документации в разделе «Speed Grades».
  4. Покрытие NiPdAu
  5. Маркировка сверху корпуса ATtiny2313A (ATtiny4313):
    • 1-ая линия: T2313 (T4313)
    • 2-ая линия: Axx (xx)
    • 3-я линия: xxx (xxx)

Отличительные особенности:

Структура портов ввода-вывода в 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», также там могут быть приведены примеры кода на Си и Ассемблере для работы с портами.