ШИМ

geb2010
Offline
Зарегистрирован: 04.04.2016

Здравствуйте !

Подскажите, в ATmega 2650 можно создать аппаратный ШИМ на нескольких выводах одновременно и как это сделать?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Можно. Теоретически и в ряде случаев практически одновременно можно создать до 15 каналов ШИМ.

ШИМ сигнал формируется тем или иным таймером. Их у меги2560 5шт: 2 по 8бит и 4 по 16бит. Последние имеют "режим совместимости", соответственно могут выдавать и 8-и битный ШИМ тоже. Таймеры имеют прескалер, позволяющий устанавливать частоту счета в широких пределах, внутренний счетчик и на каждый канал ШИМ (по 2-3шт на таймер) есть регистр "совпадения", который собственно и управляет выдачей ШИМ на свою ногу. Существует несколько способов формирования ШИМ: тупо от нуля до совпадения, по совпадению при счете вперед и назад и т.д. их штук 14 у 16-и разрячдных таймеров. У 8-и разрядных - поменее. Ещё можно управлять какой ШИМ вы хотите: прямой или инверсный .. ещё можно в прескалере задать внешний сигнал счета по фронту или по спаду .. ещё можно ограничить счетчик одним из регистров совпадения (ШИМ по этой ноге скорее всего не получится) или по регистру захвата таймера .. ещё есть совмещенная нога (13 у Ардуино Мега2560) на которую вы можете выдать двойной ШИМ от 0 и 1 таймеров .. типа ШИМ пачка ШИМ сигнала.

"Как сделать" - хорошо описано в документации и сети. Самый простой метод вызвать analogWrite() из коробки, пардон библиотеки для детишек Wiring. Или обратится в раздел "ищу исполнителя". :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Хотелось бы заметить, что всем начинающим, и почти всем опытным ардуно-водам, на мой взгляд, следует пользоваться "коробочными" методами библиотеки wiring, пока они ТОЧНО не знают, зачем именно им нужно что-то большее. Очень сильно задалбывают вопросы новичков о программировании управляющих регистров, если задачу можно решить в хорошо читаемом коде, при помощи "палки и веревки", то есть простейших методов из wiring.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Тут непонятно насколько автор "начинающий" .. меня смутило слово "одновременно". Потому как совсем одновременно можно только на управляющих ногах от одного таймера, или при синхронном запуске нескольких таймеров счетным входом .. или программно. Какой из этих способов есть в "коробочной" Wiring? Ответ: никакой. :)

geb2010
Offline
Зарегистрирован: 04.04.2016

Спасибо всем.  Я все понял.