скетч позволяет погонять в интерактиве любые режимы разрядности ШИМ на портах D9 и D10.
этот скриншот показывает работу того скетча, на панели осцилла видно частоты и времена: сделал на базе скетча CODE-блок и демку в FLProg: тоже работает! удивился.(блин, как делать банальные for-итерации?, приходится изгаляться со счетчиками-генераторами или такими по-loop() итераторами).
на скрине 12-разрядный ШИМ в диапазоне 0-4096 и на частоте 3.9кГц
из CODE-блока можно выкинуть выбор одного пина, если два не нужны.
PS: как это работает без понятия, регистрово-таймерно-предделительная магия
[spoiler=Спойлер]
Код: Выделить всё
Частота ШИМ'а на ногах 5 и 6:
Код:
Константа Делитель Частота(Гц)
0x01 1 62500
0x02 8 7812.5
0x03 64 976.5625
0x04 256 244.140625
0x05 1024 61.03515625
В Setup пишем строчку: TCCR0B = TCCR0B & 0b11111000 | <Константа>;
, где <Константа> - значение из таблицы без угловых скобок.
Частота ШИМ'а на ногах 9 и 10:
Код:
Константа Делитель Частота(Гц)
0x01 1 31250
0x02 8 3906.25
0x03 64 488.28125
0x04 256 122.0703125
0x05 1024 30.517578125
В Setup пишем строчку: TCCR1B = TCCR1B & 0b11111000 | <Константа>;
Частота ШИМ'а на ногах 11 и 3:
Код:
Константа Делитель Частота(Гц)
0x01 1 31250
0x02 8 3906.25
0x03 32 976.5625
0x04 64 488.28125
0x05 128 244.140625
0x06 256 122.0703125
0x07 1024 30.517578125
В Setup пишем строчку: TCCR2B = TCCR2B & 0b11111000 | <Константа>;
Все тайминги и частоты приведены для штатной частоты 16Мгц микроконтроллера ATMEGA328
PPS: в Arduino DUE есть уже встроенная функция analogWriteResolution, в AVR-ных ардуинах таковой нет.