Микроконтроллер attiny2313. описание

Содержание

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

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

Рис. 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 я рассматривал в одной из предыдущих статей цикла.

Пример 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)

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 →

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.

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.

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:

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

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

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 →

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

Одна из проблем при экспериментировании с этими новыми МК заключается в том, что они поставляются только в корпусах для поверхностного монтажа (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.

ATtiny2313 Pin Current Drive (Sink / Source)

We can find out how much current the pins of the ATtiny2313 can sink or source by looking at the datasheet for the ATtiny2313.

From the datasheet, the absolute maximum DC current that I/O pins can handle (source or sink) is 40mA each.

We do not want to use the absolute maximum value when designing a circuit as any current drawn beyond this value can cause permanent damage to the microcontroller. Any design must ensure that current drawn from any pin will be much less than the 40mA absolute maximum.

I/O pin current capabilities from the datasheet:

  • The sum of all IOL, for all ports, should not exceed 60 mA. (current sinking)
  • The sum of all IOH, for all ports, should not exceed 60 mA. (current sourcing)

The datasheet also states that a port can source or sink 20mA at 5V (these were test conditions used):

  • Output Low Voltage (Port A, Port B, Port D) IOL = 20 mA, VCC = 5V
  • Output High-voltage (Port A, Port B, Port D) IOH = -20 mA, VCC = 5V
  • If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater than the listed test condition.
  • If IOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current greater than the listed test condition.

So any one port must not source or sink more than 20mA.

To keep within the specified current limits of the ATtiny2313, this means that:

  • A good design should not draw more than about 10mA from any pin. A maximum of 6 pins would be able to draw 10mA each at any one time (60mA ÷ 6). This would have to be limited to 2 pins at 10mA per port to keep within the 20mA port limit.
  • Despite the above statement, it should be safe to source/sink 20mA from a pin as this is half of the absolute maximum rating for a pin. In this case, only one pin per port could source/sink 20mA to keep within the 20mA per port limit.
  • If you set up all 18 pins as outputs, to stay within the 60mA limit and the 20mA per port limit, each pin can source/sink the following: Port A pins – 6.667mA per pin (20 mA ÷ 3 pins), Port B pins – 2.5mA per pin (20 mA ÷ 8 pins), Port D pins – 2.857mA per pin (20 mA ÷ 7 pins).

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.

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 —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи

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:

Способ программирования новых МК серии 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 МГц.

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

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

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

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

  1. Перепрограммирование пина с RESET под порт ввода-вывода;
  2. Подключение светодиода к одному из соседних уже использованных пинов, применив некоторые хистросты в схемном решении и с учетом возможности его общего использования;
  3. Использование другого МК у которого больше пинов, например ATtiny2313.

Что из этих вариантов проще и дешевле по финансам/времени — судите по своему случаю.

Для превращения пина «RESET» в порт ввода-вывода придется изменить специальный фьюз — RSTDISBL (Reset Disable). Но прежде чем это сделать нужно помнить что после данной операции перепрограммировать микроконтроллер станет возможным только с применением высоковольтного программатора (на 12В), обычный USB ISP или другой программатор с питанием от 5В сделать свою работу уже не сможет.