
в прошлый раз шим не работал
а щас работает но теперь выход не работает
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
У Вас блоком ШИМ включаются таймеры на выводах 9 и 10. Нужно отключить ШИМ на выводе 10.Di123 писал(а): 27 окт 2021, 04:37 неработает опять ничего![]()
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
В блоке GyverPWM есть ошибки в коде: PWM_set(<Выберите ~10( PWM ).PWM> ,<Duty D9 FastPWM 4_bit>); так во всех строках 10 пина.Di123 писал(а): 27 окт 2021, 04:37 неработает опять ничего![]()
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.Di123 писал(а): 28 окт 2021, 20:01 [ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
Москва тоже строилась не сразу!
В примере, 11я уменьшается ступеньчато, 9,10 увеличиваются ступенчато. На старте горит светодиод на 11 пине, он начинает тухнуть, а на 9,10м начинает загораться. Проверил, работает.Di123 писал(а): 29 окт 2021, 15:56 [ref=#000080]aidar_i[/ref], перемаргивают
а что там не так могло быть
Код: Выделить всё
//===Быстрый 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 июл 2022, 12:04 [ref=#ff8000]aidar_i[/ref], нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера.Может пригодиться.
[spoiler=Быстрый digitalWrite][/spoiler]Код: Выделить всё
//===Быстрый 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 и сравни. А удобство просто несравнимое!aidar_i писал(а): 16 июл 2022, 21:02 Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код
Сейчас этот форум просматривают: Phazz и 1 гость