ATTiny85 ШИМ на PB2 не работает - только вкл/выкл, без затухания
У меня есть самодельная плата ATTiny85 со светодиодами, подключенными к GPIO (PB0-4) через токоограничивающие резисторы. Все порты плавно гаснут, за исключением PB2, который только включается/выключается без промежуточных состояний. Схема идентична для всех светодиодов, что исключает аппаратные проблемы. Подозреваю, это связано со спецификой возможностей PB2.
#define pin PB1
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
for(int i = 0; i < 256; i++) {
analogWrite(pin, i);
delay(10);
}
for(int i = 255; i >= 0; i--) {
analogWrite(pin, i);
delay(10);
}
}
- Микроконтроллер: ATTiny85
- IDE: Arduino
- Все светодиоды используют одинаковые схемы
- Другие порты (PB0,1,3,4) затухают нормально
Есть ли что-то особенное в PB2, что требует особой настройки для работы ШИМ? Как включить корректное затухание на этом выводе?
@Sean, 👍0
1 ответ
Ознакомьтесь с техническим описанием ATtiny85. На рисунке 11-5 показана работа таймеров в режиме сравнения выходов (который используется для ШИМ).

Генератор волн внизу подключается к контактам OCnx. Поэтому для аппаратного ШИМ можно использовать только контакты, обозначенные таким образом. Теперь взгляните на схему расположения выводов в начале (рис. 1-1):

Видите ли, на PB2 нет маркировки OCnx. Все остальные выводы (кроме Vcc, земли и сброса) её имеют. Поэтому этот вывод нельзя использовать с аппаратным ШИМ.
Если вам действительно нужен ШИМ на этом выводе, вам нужно программно настроить его бит-банг, то есть прописать вывод непосредственно в коде. Подходит ли вам этот вариант, зависит от вашего кода и того, что вы хотите с ним делать.
Также обратите внимание, что невозможно генерировать аппаратные ШИМ-сигналы с разной скважностью на PB3 и PB4, поскольку один из них является инвертированным сигналом другого. Это может быть полезно, если вы хотите использовать оба этих вывода для ШИМ.
- Можно ли запрограммировать Attiny85 20 МГц с опцией внутренней синхронизации 8 МГц в ПО Arduino?
- Нужна помощь ATtiny85 не работает как автономный
- Возникли проблемы с определением CTC на таймере 1 с помощью ATTiny85.
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Связь последовательного порта Digispark
- ATtiny85 и DHT11 - Датчик всегда возвращает 0
- Программирование сервопривода на ATtiny85
- Digispark ATtiny 85 - не распознается как HID устройство
Забавно, что вы упомянули PB3 — я только что заметил, что он тоже ведёт себя как двоичный код. А вот с PB4 всё в порядке. Спасибо за комментарий. Скорее всего, оставлю всё как есть., @Sean
PB3 имеет инвертированный выход (/OC1B) PB4 (OC1B), вы можете получить сигнал там, но не с помощью analogWrite Arduino, и это будет просто инвертированный PB4 (вот почему он пропускается в analogWrite), @KIIV