Jump to content

    
Evgeni

ШИМ

Recommended Posts

Друзья Добрый день. Есть такой вопрос.

Возможно ли реализовать сигналы разной длительности с помощью ШИМ или таймера. Нужно формировать импульсы не зависимо от основного потока и желательно с минимальной задержкой. Возможно ли записать массив задержек из которого таймер просто будет брать значение самостоятельно.

Screenshot_20210615-211336~2.png

Share this post


Link to post
Share on other sites
56 minutes ago, Evgeni said:

Друзья Добрый день. Есть такой вопрос.

Возможно ли реализовать сигналы разной длительности с помощью ШИМ или таймера. Нужно формировать импульсы не зависимо от основного потока и желательно с минимальной задержкой. Возможно ли записать массив задержек из которого таймер просто будет брать значение самостоятельно.

Screenshot_20210615-211336~2.png

Вы сами свой вопрос прочитали?

Share this post


Link to post
Share on other sites

Если частота небольшая, то все просто. Помещаем в память таблицу и в обработчике прерывания от таймера (по переполнению) выбираем из нее нолики и единички, которые и выводим в порт.

А так, чтобы таймер делал это сам - насколько я помню, в АВР такого нет ...

Share this post


Link to post
Share on other sites

Можно настроить таймер на режим "Сброс по совпадению" и ножка таймера будет переключаться сама. Останется в памяти только массив длительностей расположить и при каждом прерывании обновлять таймер. Годится не для быстрых (импульсы порядка длительностей тактов работы CPU вряд ли возможно устойчиво получить без джиттеров) последовательностей. Контроллер то какой? А то AVR-ок нынче много, может и есть чего аппаратно-интересного в новых версиях...

Share this post


Link to post
Share on other sites
20 часов назад, kovigor сказал:

А так, чтобы таймер делал это сам - насколько я помню, в АВР такого нет ...

Зато есть двойная буферизация регистров OCR для PWM, как раз на этот случай.

Share this post


Link to post
Share on other sites

Да через dma это понятно. Контроллер atmega168. Думал на нем есть DMA. Хотелось бы что таймер сам генерил импульсы и инкриментировал адрес массива.

7 часов назад, rx3apf сказал:

Зато есть двойная буферизация регистров OCR для PWM, как раз на этот случай.

А можете подробнее рассказать что это такое?

Share this post


Link to post
Share on other sites

Значение, записываемое в OCR, попадает не сразу в него, а в буферный регистр, из которого переписывается в реальный регистр сравнения строго в определенный момент времени, что позволяет избежать всяких глитчей.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.