Независимые поставки программируемой логики Altera (Intel)

Конфигурация контактов ATtiny85, блок-схема и программирование

Опубликовано ноября 05, 2026

ATtiny85 обеспечивает 8 КБ флэш, 512 байт SRAM и шесть полезных GPIO-выводов в 8-контактном корпусе, что делает его практичным для бюджетных конструкций с ограниченным местом платы и полноценным микроконтроллером был бы избыточным. Он работает на 1,8-5,5 В, включает 10-битный АЦП с четырьмя каналами и поддерживает программно-управляемую последовательную связь через свой универсальный последовательный интерфейс. Ниже я расскажу о его расплывке, внутренней архитектуре, процессе программирования и компромиссах, которые имеют значение при реальной сборке с ним.

Ключевые выводы:

  • Шесть контактов GPIO объединяют функции АЦП, ШИМ и последовательные; Аккуратное назначение контактов предотвращает конфликты ресурсов в реальных макетах.
  • Вывод RESET можно перенастроить как GPIO с помощью предохранителей, но это привязывает вас к высоковольтному программированию - планируйте отладочные и производственные процессы перед выполнением коммита.
  • USI требует ручного бит-бэнгинга для I²C и SPI; Он работает для низкоскоростных периферийных устройств, но добавляет сложность прошивки по сравнению с аппаратными периферийными устройствами.
  • Стабильность АЦП зависит от качества блока питания и заземления; режим сна ADC Noise Reduction заметно улучшает результаты при наличии базового шума.
  • Выводы GPIO обеспечивают максимальную мощность 40 мА согласно техническому листу, но при длительной работе выше 20 мА на один вывод ускоряется деградация - всегда буферизуйте нагрузки с высоким током снаружи.

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

Параметр Ценность
CPU 8-битный AVR RISC
Рабочее напряжение 1,8-5,5 В
Флеш-память 8 КБ
SRAM 512 байт
EEPROM 512 байт
Контакты GPIO 6
ADC 10-битные, 4 канала
Таймеры Два 8-битных
Тактовая частота До 20 МГц (внешний), 8 МГц (внутренний RC, по умолчанию)
Пакеты PDIP-8, SOIC-8, TSSOP-8, QFN/MLF-20
Температурный диапазон -40-+125 °C
Последовательный интерфейс USI (программно настраиваемая для SPI или I²C)
Обнаружение загорания Да
Таймер Watchdog Да

Figure 1. ATtiny85 PDIP-8 package

Конфигурация контактов

Пин Основная функция Альтернативные функции
1 PB5 (СБРОС) PCINT5, ADC0, dW (debugWIRE)
2 PB3 PCINT3, XTAL1, CLKI, ADC3
3 PB4 PCINT4, XTAL2, CLKO, ADC2
4 GND Ground
5 PB0 MOSI, DI, SDA, AIN0, OC0A, AREF, PCINT0
6 PB1 MISO, DO, AIN1, OC0B, OC1A, PCINT1
7 PB2 SCK, USCK, SCL, ADC1, T0, INT0, PCINT2
8 VCC Блок питания

Figure 2. ATtiny85 pinout diagram with alternate function labels

Каждый вывод GPIO мультиплексирует как минимум три функции. По опыту, наиболее частый конфликт возникает между программированием SPI (которое использует PB0, PB1, PB2) и периферийными устройствами приложений на тех же контактах. Если ваша прикладная схема сильно загружает эти контакты или удерживает их в фиксированном состоянии, программирование провайдера может периодически давать сбои. Добавление последовательных резисторов (220-470 Ω) между ATtiny85 и внешними компонентами на линиях SPI позволяет программисту переопределить прикладную схему во время загрузки.

Контакт 1 по умолчанию RESET с внутренним подтягиванием. Настройка GPIO (PB5) через предохранитель RSTDISBL даёт один дополнительный вывод, но вы теряете возможность перепрограммировать через стандартного провайдера. Затем требуется высоковольтное параллельное программирование (HVPP), что требует специализированного программиста и усложняет производственные рабочие процессы. Я видел, как команды отключали RESET, чтобы получить шестой контакт, но в конце проекта обнаруживали, что обновления полей становятся непрактичными.

Блок-схема и внутренняя архитектура

Figure 3. ATtiny85 simplified block diagram showing CPU, memory, timers, ADC, and I/O ports

ATtiny85 использует архитектуру Гарварда с отдельным 8 КБ флэш-память для хранения программ и 512 байтами SRAM для данных во время выполнения. Выносливость Flash рассчитана на 10 000 циклов записи/стирания на страницу; EEPROM рассчитан на 100 000 циклов. Если ваше приложение часто записывает калибровочные данные или ведёт журналы, вы достигнете лимитов EEPROM быстрее, чем ожидаете - распределите записи по нескольким адресам или переключитесь на внешнее хранилище для данных с высоким количеством циклов.

Два 8-битных таймера (Timer0 и Timer1) генерируют ШИМ, считают внешние события и запускают прерывания. Timer0 проще и обычно используется для базовых функций PWM или задержки. Timer1 включает режим PLL, который может генерировать высокочастотный PWM (до 64 МГц на PB1/PB4 с питанием 5 В), что полезно для таких приложений, как генерация ИК-несущих или высокочастотное затемнение.

Таймер watchdog может сбросить чип, если прошивка зависает, но также работает как таймер интервалов с низким энергопотреблением в режимах сна. В одной из батарейных конструкций мы использовали watchdog для пробуждения ATtiny85 каждые 8 секунд, измерения датчика и возвращения в спящий режим - что приводило к среднему потреблению тока ниже 10 мА.

Питание и конфигурация тактового сигнала

ATtiny85 поставляется с предохранителями, установленными для внутреннего 8 МГц RC-осциллятора, делёнными на 8, что даёт фактическую тактовую частоту 1 МГц. Этот консервативный стандарт работает во всех диапазонах напряжений, но производительность остаётся на столе. Для работы на 5 В перенастроить предохранители для работы внутреннего генератора на полном 8 МГц просто и не требует внешних компонентов.

Когда нужен точный тайминг - например, для UART на стандартных скоростях или счётчик частот - ±10% заводская калибровка внутреннего генератора недостаточно точна. Внешний кристалл 16 МГц или 20 МГц повышает точность до ±50 ppm, но добавляет два конденсатора и занимает PB3/PB4. Такой компромисс стоит того для приложений, ориентированных на коммуникацию, но неприятен, если у вас уже ограничено количество пинов.

Обнаружение brown-out (BOD) предотвращает процессор от выполнения некорректных инструкций при просадке напряжения питания. Включение BOD при 2,7 В или 4,3 В добавляет примерно 20-25 мкА к току сна. Для конструкций аккумуляторов, ориентированных на режим сна субмикроусилителя, возможно, придётся отключить BOD и работать с низковольтными условиями в прошивке - принимая на себя риск случайных сбоев при отключении.

Характеристики GPIO и пределы нагрузки

Каждый вывод GPIO может получать или поглощать до 40 мА абсолютного максимума согласно техническому описанию Microchip, но это разрушительное ограничение, а не рабочая спецификация. Рекомендуемый непрерывный ток на каждый контакт составляет 20 мА, а общий ток на всех контактах должен оставаться ниже 200 мА, чтобы избежать внутреннего отскока на землю и риска фиксации.

Управление светодиодом напрямую от GPIO - обычное дело в хобби-проектах, но прямое напряжение и ток требуют тщательного рассмотрения. Стандартный красный светодиод с прямым падением 2 В при 20 мА при питании 5 В требует минимального резистора Ω 150. Я отладил платы, где кто-то использовал 47 Ω «потому что светодиод был слишком тусклым» - это работало несколько часов, потом GPIO окончательно вышёл из строя.

Для нагрузок выше 20 мА - моторы, реле, соленоиды или даже мощные светодиоды - используйте внешний MOSFET или BJT. N-канальный MOSFET 2N7002 стоит копейки и чисто переключает сотни миллиампер с помощью резистора затвора 10 кОм. Попытка параллельно подключить контакты GPIO для увеличения ёмкости тока не работает надёжно; Небольшие различия в импедансе контактов вызывают неравномерное распределение тока и возможные повреждения.

Работа АЦП и управление шумом

10-битный АЦП преобразует 0-VCC (или внутренний эталонный 1,1 В или 2,56 В) в значения от 0 до 1023. Разрешение - 10 бит, но эффективное количество бит (ENOB) в шумной среде может уменьшиться до 8 или даже 7 бит, если не учитывать шум блока питания.

По моему опыту, три вещи улучшают стабильность АЦП:

  1. Конденсаторы для разъединения рядом с микросхемой. Керамический конденсатор мощностью 100 нФ и электролитический конденсатор 10 мкФ параллельно, расположенные в пределах 5 мм от контактов VCC и GND, уменьшают высокочастотный шум переключения.
  2. Режим сна с шумоподавлением ADC. Остановка процессора во время преобразования устраняет цифровой шум переключения внутри чипа. Разница измерима: я видел, как уровень шума падает с ±8 LSB до ±2 LSB только при включении этого режима.
  3. Отдельное аналоговое заземляние или звездное заземление. Если АЦП имеет общий обратный путь с нагрузками, управляемыми ШИМ, ток земли от ШИМ вводит шум в измерения АЦП. Проведение выделенной дорожки заземления к блоку питания для опоры АЦП заметно улучшает результаты.

АЦП также поддерживает режим дифференциального входа с опциональным усилением (1×, 8×, 20×, 32×) на некоторых парах контактов. Это редко документируется в учебниках, но хорошо работает для небольших дифференциальных сигналов, таких как термопары или тензодатчики. Усиление достигается за счёт уменьшения входного диапазона и увеличения ошибки смещения, поэтому калибровка становится критичной.

Серийная связь через USI

Универсальный последовательный интерфейс (USI) - это минимальный аппаратный блок, который помогает с последовательными протоколами, но большую часть работы оставляет на усмотрение прошивки. Он включает регистр сдвига, счётчик и базовую генерацию тактовой частоты - достаточно, чтобы работать с минимальными частотами I²C или SPI на низких и умеренных скоростях.

Когда USI работает хорошо:

  • Общение с одним датчиком I²C на частоте 100 кГц.
  • Управление SPI дисплеем или ЦАПом, где ATtiny85 всегда является главным.
  • Прототипирование или малообъёмные проекты, где приемлема сложность прошивки.

Когда USI становится проблемой:

  • Многомастерные I²C или сценарии растяжения тактового сигнала; USI не обрабатывает их автоматически.
  • Высокоскоростной SPI выше 1 МГц; Тайминг становится сложным без выделенного оборудования.
  • Приложения, где также нужен UART - аппаратного обеспечения UART нет, так что вы будете использовать и это по малым уровеньям, что потребляет циклы процессора и усложняет тайминг.

Я успешно использовал библиотеки I²C на базе USI, такие как TinyWireM, с датчиками, такими как BMP280 и SSD1306 OLED. Но я также провёл часы на отладке случая, когда устройство I²C удерживало SCL на низком уровне (растягивание тактового сигнала), и библиотека не обнаружила его, из-за чего прошивка зависала. Урок: тестируйте код USI с точки зрения своих периферийных устройств заранее, а не на столе при идеальных условиях.

Программирование ATtiny85 с Arduino IDE

Figure 4. Arduino as ISP wiring diagram for ATtiny85 programming

Программирование ATtiny85 через Arduino IDE требует добавления стороннего определения платы, такого как ATTinyCore от Spence Konde или старый пакет attiny от David Mellis. Эти ядра отображают функции Arduino, такие как 'digitalWrite()' и 'analogRead()', на аппаратное обеспечение ATtiny85.

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

Пин ATtiny85 Сигнал программиста интернет-провайдера
1 (СБРОС) СБРОС
5 (PB0) MOSI
6 (PB1) MISO
7 (PB2) SCK
8 (VCC) +5V (или целевое напряжение)
4 (GND) GND

Вы можете использовать отдельные USBtinyISP, USBasp или любую плату Arduino, настроенную как «Arduino как провайдер». Если вы используете Arduino в качестве провайдера, установите конденсатор 10 мкF между RESET и GND на Arduino, чтобы предотвратить сброс во время загрузки.

Настройки платы имеют значение:

  • Выбрать правильную тактовую частоту (1 МГц, 8 МГц внутреннюю или 16 МГц внешнюю).
  • Выберите «Burn Bootloader» один раз, чтобы записать настройки предохранителей - на этом этапе загрузчик не устанавливается (ATtiny85 его не использует), но предохранители настраиваются под выбранную вами тактовую частоту.
  • После установки предохранителей загрузите скетчи через «Sketch > Upload Using Programmer» или установите программиста по умолчанию в настройках.

PIN-коды Arduino не совпадают напрямую с физическими. Например, цифровой вывод Arduino 0 соответствует PB0 (физический вывод 5), а цифровой вывод Arduino 2 - PB2 (физический вывод 7). Перед подключением проверьте документацию по сердечнику или схеме распиновки.

Минимальная рабочая схема

Figure 5. Minimal ATtiny85 schematic with LED and decoupling capacitor

Минимальная схема требует только:

  • VCC (контакт 8), подключённый к питанию 3,3 В или 5 В.
  • GND (контакт 4), подключённый к земле.
  • Керамический конденсатор мощностью 100 нF между VCC и GND, расположенный рядом с ИС.
  • По желанию, если источник питания шумит, подтягивается резистор 10 кОм на RESET (контакт 1), хотя обычно достаточно внутреннего подтягивания.

Светодиод с резистором ограничивающего ток (220-470 Ω для 5 В, минимум 150 Ω для 3,3 В), подключённый к PB0 (вывод 5), обеспечивает визуальную обратную связь. Внутренний 8 МГц радиоуправляемый генератор работает по умолчанию, поэтому внешний кристалл не требуется.

Эта конфигурация надёжно работает для тестов на мигание, экспериментов с ШИМ и начальной разработки прошивки. Для серийных или шумочувствительных приложений добавьте конденсатор объемом 10 мкF параллельно с керамикой 100 нФ для обработки потребностей при переходном токе.

Распространённые проблемы и практические решения

Проблема Коренная причина Решение
Загрузка от провайдера неудачна из-за «несовпадения подписи устройств» Выбран неправильный чип в IDE или предохранители настроены на внешний тактовый сигнал без кристалла Проверьте выбор доски; если предохранители неисправны, подключите внешний тактовый сигнал к PB3 или используйте HVPP для восстановления
Показания АЦП случайно дрейфуют или прыгают Шум блока питания, отсутствующий конденсатор разъединения или плохое заземление Добавьте 100 нF + 10 мкФ при расцеплении близко к VCC/GND; включить режим шумоподавления АЦП; отдельные аналоговые и цифровые пути заземления
Связь I²C/SPI периодически не работает Некорректный тайминг USI, несоответствие частот тактовой частоты или отсутствие внешних подтягиваний (I²C) Перепроверьте выбор тактового сигнала и настройки предохранителей; добавить подтягивания 4,7 кОм к SDA/SCL для I²C; Снизить скорость шины в прошивке
Контакт GPIO перестаёт реагировать после нескольких часов работы Контакт сведён выше предела тока или подвержен скачкам напряжения Проверьте значения резисторов светодиодов; буфер высокотоковых нагрузок с помощью MOSFET; Добавьте защиту от переходных элементов (диод или TVS), если контакт подключается к внешним кабелям
Код работает на неправильной скорости или тайминг нарушен Настройки предохранителей тактового сигнала не совпадают с выбором платы Arduino IDE Burn bootloader (устанавливает предохранители) после изменения тактовой настройки; Проверьте фактическую тактовую частоту с помощью телескопа или логического анализатора

Когда предохранитель RESET случайно отключается:

Если вы установите предохранитель RSTDISBL и потеряете доступ к провайдеру, стандартные программисты не будут работать. Вам нужен высоковольтный параллельный программатор (HVPP), например AVR Dragon (снят с производства, но доступен б/у) или открытые проекты на базе Arduino. Это подаёт 12 В на вывод RESET, при этом определённые контакты сохраняются в определённых состояниях, что переводит чип в режим программирования независимо от настроек предохранителей. Это можно восстановить, но это раздражает и занимает много времени.

Когда пользоваться ATtiny85 (а когда нет)

Хорошее сочетание:

  • Простые задачи управления: светодиодные драйверы, считыватели датчиков, небольшие дисплеи.
  • Пространственные конструкции, при которых 8-контактный корпус экономит площадь платы.
  • Приложения на батарейках, использующие режимы сна (до ~0,1 мкА при отключении при выключенном режиме Watchdog).
  • Экономичные конструкции, где каждый цент за единицу имеет значение при объёме.

Плохое сидение:

  • Приложения, требующие одновременного использования нескольких последовательных периферийных устройств (UART + SPI + I²C) - сложность прошивки резко возрастает.
  • Требования к высокоскоростной связи или строгому таймингу - ограниченные USI и однопоточным выполнением.
  • Проекты, где скорость разработки важнее стоимости; переход на ATmega328P или STM32 даёт аппаратный UART, SPI, I²C и уменьшит количество головных болей.

Я успешно использовал ATtiny85 в контроллерах светодиодного освещения, мониторах батареи и ИК-пультах. Но я также отказался от этого в середине проекта, когда требования расширились и включили отладочный порт UART и логирование flash-памяти SPI - вещи, которые на большом чипе, но болезненны на ATtiny85.

Заключение

ATtiny85 остаётся актуальным для конструкций, где основными ограничениями являются размер, стоимость и мощность, а функциональность остаётся в пределах чётко определённых ограничений. Его шесть GPIO-выводов с общими функциями требуют тщательного назначения контактов, а программно-управляемый USI требует больше усилий от прошивки, чем аппаратные периферийные устройства. Производительность АЦП сильно зависит от конструкции блока питания, и пределы тока GPIO реальны - если их превышить, контакты выходят из строя навсегда.

Понимание настроек предохранителей, компромиссов между контактами RESET и рабочих процессов программирования провайдером перед принятием дизайна предотвращает дорогостоящие сюрпризы на поздних стадиях. Для правильного применения ATtiny85 обеспечивает надёжное управление при минимальной площади. Для более сложных вариантов оцените, перевешивают ли нагрузка на прошивку и ограничения по железу экономию.