У Вас блоком ШИМ включаются таймеры на выводах 9 и 10. Нужно отключить ШИМ на выводе 10.
В блоке GyverPWM есть ошибки в коде: PWM_set(<Выберите ~10( PWM ).PWM> ,<Duty D9 FastPWM 4_bit>); так во всех строках 10 пина.
Пошла движуха на форуме!
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.
В примере, 11я уменьшается ступеньчато, 9,10 увеличиваются ступенчато. На старте горит светодиод на 11 пине, он начинает тухнуть, а на 9,10м начинает загораться. Проверил, работает.
Код: Выделить всё
//===Быстрый digitalWrite=====
void fastDigitalWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) bitWrite(PORTD, pin, val);
else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
else if (pin < 20) bitWrite(PORTC, (pin - 14), val);
#elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__)
bitWrite(PORTB, pin, val);
#else
digitalWrite(pin, val);
#endif
}
Спасибо!Dryundel писал(а): ↑13.07.2022{, 12:04}aidar_i, нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера. Может пригодиться.Быстрый digitalWriteПоказатьКод: Выделить всё
//===Быстрый digitalWrite===== void fastDigitalWrite(const uint8_t pin, bool val) { #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) if (pin < 8) bitWrite(PORTD, pin, val); else if (pin < 14) bitWrite(PORTB, (pin - 8), val); else if (pin < 20) bitWrite(PORTC, (pin - 14), val); #elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__) bitWrite(PORTB, pin, val); #else digitalWrite(pin, val); #endif }
Пожалуйста. Это то же самое. Только обращение организовано с помощью скриптов, которые ну никак не длиннее и не хуже чем рукописный код. Попробуй потестируй fastDigital Read / Write и сравни. А удобство просто несравнимое!