ШИМ на прерываниях

MacMillan
Offline
Зарегистрирован: 25.10.2016

Добрый день! Подскажите, как на UNO сделать шим с частотой 100 кГц  (±10%) с 65536 уровнями скважности на любой цифровой пин? Я если честно никак не пойму как работают регистры по типу "TCCR2B=0;", это выглядит очень сложно (особенно для того, кто не дружит с ардуино на постоянной основе)...в интернете полно уроков по программированию регистров, таймеров и прерываний, но все они не разжовывают детально как это работает.

Заранее спасибо!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Для этого надо, минимум, разогнать Ардуину до 0.1*65536*2=13107.2 МГц АКА 13.1 ГГц.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

Для этого надо, минимум, разогнать Ардуину до 0.1*65536*2=13107.2 МГц АКА 13.1 ГГц.

Так и расскажите, как это сделать! А лучше ссылку на видео дайте! Вместо того, чтобы умничать и ЧСВ надувать :)))

MacMillan
Offline
Зарегистрирован: 25.10.2016

Дело в том, что это уже работает у меня, на билиотеке PWM.h, там можно ставить любую частоту 0-2МГц и скважность до 65535, но оно работает тормознуто (при быстром изменении скважности по программе, ШИМ меняется не сразу, а с задержкой в секунду) и я подумал что возможно прямое программирование таймеров исправит эту проблему.

b707
Offline
Зарегистрирован: 26.05.2017

MacMillan пишет:

в интернете полно уроков по программированию регистров, таймеров и прерываний, но все они не разжовывают детально как это работает.

Заранее спасибо!

простите - но что вы хотите от нас? Если "куча уроков" в инете Вам не помогла - с чего Вы взяли. что кто-то тут сумеет обьяснить вам еще более детально? - похоже, ваша проблема не в недостаточной детальности уроков в инете. а в том, что у вас не хватает базы. чтобы их понять.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacMillan пишет:

уже работает у меня, на билиотеке PWM.h, там можно ставить любую частоту 0-2МГц и скважность до 65535, 

В том виде, как Вы тут пишете оно работать не может просто потому, в секунде 1000 миллисекунд и никак Вы в неё больше не впихнёте - т.е. так, как Вы описываете, оно не может работать по определению.

Видимо, Вы что-то не поняли и объясняете так, что мы не можем понять.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Можно замутить дизеринг, но это не для песочницы :)

фиг знает что там за PWM.h, но если там и можно выставить до 2 Мгц и до 16 бит разрядности, то всяко НЕ одновременно - одно в ущерб другому.

b707
Offline
Зарегистрирован: 26.05.2017

dezz0riented пишет:

фиг знает что там за PWM.h, но если там и можно выставить до 2 Мгц и до 16 бит разрядности, то всяко НЕ одновременно - одно в ущерб другому.

скорее всего  ТС имеет ввиду частоту дискретизации ШИМ. а не итоговую частоту сигнала

MacMillan
Offline
Зарегистрирован: 25.10.2016

Вот эта библиотека - http://arduino.ru/forum/programmirovanie/pwm-biblioteka-shim-arduino

Именно ей я пользуюсь уже давно, используя 8 битный ШИМ 10-20кГц, и как бы проблем никогда не наблюдал. Сейчас я делаю Step-Down преобразователь и управлять им захотелось именно с Ардуины, для точности скважность в 65535 уровней идеальна. Сейчас оно работает, на дисплее я вижу уровень скважности в реалтайме, и если на дисплее оно поднимается плавно (допустим за 20 секунд весь диапазон), то с самого пина ШИМ дёрганый, когда запаздывает на секунду, а когда на 3. Именно это я хотел исправить таймерами.

PS: знаю, что для подобных вещей существуют контроллеры, но мне было интересно поуправлять всем процессом Ардуиной. Вопрос стоит - возможно это или нет.

ЗЫ: я не прошу за меня написать код. На форуме самый бесполезный человек - это тот, кто произносит фразу "иди гугли". В моём понимании форум - место где можно спросить совета или помощи. Не можешь помочь или объяснить - стоит пройти мимо, а если что то знаешь то достаточно немного подтолкнуть или объяснить. Повторюсь, я заранее искал информацию по программированию прерываний и всё что с этим связано - информация сложная, особенно когда держишь ардуино 3 раза в год, в основном описывается для уже знающих людей. Я изначально электронщик, и программировать никогда не умел, но любопытство берёт верх. 

b707
Offline
Зарегистрирован: 26.05.2017

MacMillan пишет:

ЗЫ: я не прошу за меня написать код. На форуме самый бесполезный человек - это тот, кто произносит фразу "иди гугли". В моём понимании форум - место где можно спросить совета или помощи.

насчет форумов вы очень сильно ошибаетесь. И если будете настаивать. что знаете смысл этого форума лучше местных - лучше сразу идите в другое место.

"Иди гугли" говорят тому, кто задает вопросы, давно разжеванные в десятках статей. И не надо воспринимать это как "пнх" - это глупо. Надо просто пойти и погуглить. Но если человек настаивает, что Гуглить не хочет - простой совет поискать в поиске может перерасти и в пнх

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacMillan пишет:
В моём понимании форум - место где можно спросить совета или помощи. Не можешь помочь или объяснить - стоит пройти мимо

1. Это в Вашем понимании. У других может быть другое понимание.

2. Этой фразой Вы нарушаете правило данного форума №1: "Не следует указывать старожилам, для чего нужен форум, и что на нем следует делать"

Постарайтесь, пожалуйста, впредь таких нарушений не допускать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dezz0riented пишет:

Можно замутить дизеринг

Ну, не настолько же! Там уже вообще одна грязь получится :)

MacMillan
Offline
Зарегистрирован: 25.10.2016

ЕвгенийП пишет:

2. Этой фразой Вы нарушаете правило данного форума №1: "Не следует указывать старожилам, для чего нужен форум, и что на нем следует делать

Т.е это "Я царь и бог программирования, что хочу то творю, говорю и делаю, а вы тупые низшие существа идите гуглить"? Это смешно, ибо понятие форума уничтожает само себя. Форум это место общения, где никто никого не выше (ну кроме админа), и как я сказал ранее, если человек не может ответить по существу и направляет "куда то там", то он и сгоревшего транзистора не стоит :) Раздутый уровень ЧСВ делает из людей бесполезных монстров. Можно ведь сразу: MacMillan, PWM с частотой 100кГц и 16 bit невозможен, даже с дизерингом, по такой то такой то причине. Или: "попробуй почитать такой то такой то материал, для самых зелёных". Если я нарушил кучу законодательных актов местного самоуправления, задел чьё то ЧСВ или принизил старожила, то можете меня забанить, это не принесёт мне никаких неудобств.

А если по делу. Почему автор этой библиотеки каким то чудом смог сделать 2Мгц и 16bit? Ну в плане если это невозможно как по частоте самой ардуины, так и с помощью дизеринга. Оно ведь работает, хоть и частично.

b707
Offline
Зарегистрирован: 26.05.2017

MacMillan пишет:

 PWM с частотой 100кГц и 16 bit невозможен -  то такой то причине.

вам по-моему уже ответили. Частоты не хватит.

b707
Offline
Зарегистрирован: 26.05.2017

MacMillan - к вопросу о посылах в гугл и о том. что новички читать не умеют. В конце ветки обсуждения библиотеки PWM.h , на которую Вы САМИ!!! дали ссылку - отличный материал от ЕвгенияП про генерацию ШИМ на прерываниях через регистры. И, кстати. там есть табличка с максимальными частотами ШИМ для каждой разрядности.

Ну как так -то? сами даете ссылку и сами ее не читали?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacMillan пишет:

А если по делу. Почему автор этой библиотеки каким то чудом смог сделать 2Мгц и 16bit? 

Да, не смог он, это Вам кажется.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacMillan пишет:
Это смешно, ибо понятие форума уничтожает само себя. Форум это место общения, где никто никого не выше

Так вот и я ж про тоже, мля!

Вам приспичило задать глупый вопрос по 2МГц/16 бит и Вы "имеете право"! А если я хочу Вам сказать, что это бред, то почему-то

MacMillan пишет:
стоит пройти мимо

Почему это Вы можете писать бред, а мне стоит пройти мимо, если никто не выше?

И вообще, прекращайте, учить нас как нам жить, что писать и куда проходить, а то и мы Вам что-то подобное объясним.