Страница 1 из 1

Многоразрядный и высокочастотный ШИМ

Добавлено: 04 мар 2016, 22:40
SirYorik
Открыл для себя сабж, благодаря классному скетчу в теме.
скетч позволяет погонять в интерактиве любые режимы разрядности ШИМ на портах D9 и D10.
этот скриншот показывает работу того скетча, на панели осцилла видно частоты и времена:
1385189.jpg
сделал на базе скетча CODE-блок и демку в FLProg:
5995492.jpg
тоже работает! удивился.(блин, как делать банальные for-итерации?, приходится изгаляться со счетчиками-генераторами или такими по-loop() итераторами).
5523604.jpg
на скрине 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
[/spoiler]
PPS: в Arduino DUE есть уже встроенная функция analogWriteResolution, в AVR-ных ардуинах таковой нет.

Многоразрядный и высокочастотный ШИМ

Добавлено: 20 мар 2016, 17:15
DerAlex
Интересная штука. А частоту можно регулировать в этом блоке ?

Многоразрядный и высокочастотный ШИМ

Добавлено: 21 мар 2016, 20:15
SirYorik
DerAlex писал(а): А частоту можно регулировать в этом блоке ?
частота зависима от разрядности.
под спойлером таблицы.
тоесть нет, нельзя.

Многоразрядный и высокочастотный ШИМ

Добавлено: 22 мар 2016, 06:10
DerAlex
Ну по крайней мере можно выбрать какой то диапазон частоты.

Многоразрядный и высокочастотный ШИМ

Добавлено: 23 мар 2016, 10:24
Naladchik
SirYorik, А как понять " Многоразрядный и высокочастотный ШИМ".
Если я правильно понял то из описания по приведенной Вами ссылке ШИМ может быть или многоразрядным с малой частотой или малоразрядным но с высокой?

Многоразрядный и высокочастотный ШИМ

Добавлено: 23 мар 2016, 18:44
SirYorik
Naladchik писал(а):как понять
штатный ардуинский ШИМ 8бит(0-255)/490гц, с незначительными вариациями частоты

после этой магии многое меняется :),
8битный ШИМ становится аж на 62.5кгц, и дальше по списку "многоразрядным с малой частотой или малоразрядным но с высокой".

меня в первую очередь разрядность интересовала, а повышение частоты - полезный бонус. за подробностями в даташит не полез.

Добавлено (23.03.2016, 18:44)
---------------------------------------------
таблицы из под спойлера в старттопике взяты тути тут, там же дискуссии на тему

Многоразрядный и высокочастотный ШИМ

Добавлено: 25 мар 2016, 08:28
Naladchik
SirYorik, спасибо, поразбираюсь.