Страница 1 из 4
Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Ср дек 30, 2015 23:19:30
СКАЗОЧНИК
Привет всем.
Читаю уже третий раз статейку у Ди-Халта про ВАМ и светодиоды. Вот эту.
http://easyelectronics.ru/upravlenie-bo ... ation.html
И вроде все просто, но до меня не доходит... Как это работает???? Туплю жутко. Вот есть у меня, предположим, 8 светодиодов на одной линейке. Как с помощью ВАМ менять яркость в каждом отдельно?
Хочу понять алгоритм, но что-то он в мою голову не влазит.
Спасибо всем, кто потратит на меня время.

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 00:33:23
viiv
СКАЗОЧНИК писал(а):Хочу понять алгоритм, но что-то он в мою голову не влазит.
ШИМ понимаете? Есть частота ШИМ, соответственно есть период (чем больше времени в течении периода "светим", тем глазу кажется ярче).
Период ШИМ вибирается таким, чтобы глаз "не замечал" мерцания светодиода.
В уазанной статье "трюк" в следующем (суть та же - чем больше времени в течении периода "светим", тем глазу кажется ярче):
период разбивается на интервалы (1/2 периода, 1/4 периода, 1/8 периода...), в начале каждого интервала "влетаем" в прерывание и устанавливаем
значение "светить"/"не светить" для всех имеющихся каналов (интервал 1/2 периода соответствует старшему биту значения яркости, и.т.д).
Так понятно? Или еще больше запутал?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 05:36:06
Z_h_e
Мне кажется
тут понятнее.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:02:43
СКАЗОЧНИК
Спасибо. Почитал и эту статейку... Все равно не доходит.
Вот как я понимаю ШИМ. Там один регистр задается для сравнения, в него записывается число. При том моменте, когда таймер досчитает до него, он либо сбрасывается, либо начинает считать в обратную сторону. Таким образом формируется заполнение. На довольно большой частоте это дает прекрасный эффект плавного регулирования на фильтре типа RC цепочке, либо на большой индуктивной нагрузке, либо на светодиоде, которому почти пофигу с какой скоростью мигать, глаз все равно не увидит.
А ВАМ не могу... Вроде что-то похожее, но в как понять преимущество???? И почему все ограничено единицей в каком-то разряде байта? Почему не 6ю единицами? Хочу ВАМ целиком на порт раскидать, чтобы 7 или 8 бит были регулируемыми, т.е. вывода МК.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:16:53
dr.doc
Единица в разряде байта по сути флаг выполнения того или иного условия. А ШИМ работает несколько иначе: есть 1-байтный таймер, который бегает по кольцу от 0 до 255, перескок на 0 и далее сначала. В регистре сравнения, допустим, число 17. Когда значение кольцевого счетчика меньше либо равно 17 (регистр сравнения) на выводе ШИМ 1 (0). В противном случае - наоборот. Таким образом имеем заполнение времени в 18/256 (не забываем про 0).
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:22:14
СКАЗОЧНИК
Короче... я тормоз... все равно не доходит....

Почему нету кота, который бьется головой о стену????
Хорошо, может начать от противного? Есть PWM, есть BAM, в чем разница???? Пока я такой не вижу. Читал про нее, но понять не смог. Может мне пора завязывать с микроконтроллерами, если я уже элементарного поянять не могу..?!
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:32:40
dr.doc
Привожу пример. Если не совсем понятно, спрашивайте.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:55:38
СКАЗОЧНИК
Вот это я понял... Обе картинки показывают один и тот же коэффициент заполнения. Но у ШИМ он в одном месте весь а у ВАМ он разбросан по байту. И я понял, что могу задать число 10000110 и он будет вызывать прерывания три раза и три раза будет выставлять единицу на любом выводе, какой я захочу. Но в чем преимущества и суть , все равно догнать не могу...
Простите, что я такой дебил...
З.Ы. ПО сути в ВАМ я могу задать любое число от 0 до 255 и оно будет регулировать яркость. Понял я и то, что она не линейна, что старшие разряды почти не регулируют, все равно задам я 200 или 256 - гореть будет одинаково. Это другой вопрос, там я уже поберу яркость.
Понял я что надо это число (байт) записывать в регистр сравнения таймера. И менять состояние вывода МК в тот момент, когда ...

А вот тут косяк. Он должен выдавать прерывание на каждую единицу.. Как же тогда сравнение происходит до куда таймер дотикал????
И еще, как все это увеличить на 8 выводов? чтобы каждый независимо, причем одновременно регулировался*?????
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 21:59:49
dr.doc
В компараторе задается сначала больший из интервалов, одновременно выставляется 1 там, где 7-й бит равен 1 (нужный вывод). В прерывании по сравнению забиваем в компаратор второе число и проверяем 6-е биты регистров. 1 - выставляем 1, 0 - сбрасываем. Таким образом имеем 8 прерываний: 128+64+32+16+8+4+2+1. Вот и весь набор из которого состоит период.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:02:13
СКАЗОЧНИК
Пойду застрелюсь.
Простите и спасибо вам за попытку что-то мне объяснить.
З.Ы. И с Новым годом вас!!!

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:04:10
ARV
чтобы реализовать многоканальный ШИМ на одном таймере, обычно вы заводите 8 переменных, которые хранят значение коэффициента заполнения для 8 каналов, затем программируете свой единственный таймер так, чтобы он генеририровал прерывания, в обработчике ведете счет прерываний в отдельном (9-я переменная) и сравниваете эту переменную с каждой из 8- канальных. для тех каналов, где счетчик превысил значение переменной, включаете выход.
понятно описание? очевидно, что для 8-битного ШИМ нужно сгенерировать и обработать 256 прерываний, каждое из которых идет через одинаковый (довольно короткий) интервал времени. все это создает довольно большую нагрузку на МК. в частности, сделать более 32 каналов с частотой ШИМ, которая еще не заметна глазу, сделать уже практически невозможно: проанализировать в обработчике 32 переменных за промежуток между прерываниями уже сложно.
в ВАМ любой коэффициент заполнения получается всего при 8 прерываниях, причем только 1 раз между прерываниями будет очень короткий промежуток времени, а остальные будут в 2, 4, 8 и т.д. раз через более длинные интервалы. Таким образом, нагрузка на МК резко снижается.
с BAM-ом есть примеры реализации 256-каналов ШИМа!!! теперь разница понятна?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:05:36
dr.doc
Праздник ведь. А там все просто: на 1 период ШИМ (ВАМ) получается 8 прерываний длительностью 128+64+32+16+8+4+2+1 интервалов. Именно в таком порядке и происходят прерывания. А уже в них выставляются в соответствии с битами порты.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:08:50
СКАЗОЧНИК
А если у меня на порт... О! Чего-то начало доходить... ))))
Короче, еще вопросы будут, но уже что-то мне стало ясно. Огромное вам, спасибо! Все +100500, в новогоднюю ночь умудрится объяснить...

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:14:18
Z_h_e
Господа, Коты. Всех с НГ. Оставте вопрос BAM назавтра, сдается мне он сам решится.
СКАЗОЧНИК, с тетрисом воюете?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:17:15
СКАЗОЧНИК
Z_h_e писал(а): с тетрисом воюете?

Не поверите... У меня Новый год наступил еще 4 часа назад...
Вот так и встретил...
Воюю не с тетрисом пока мест... Он еще не вылежался.
Воюю с другой хреновиной, надо сделать буквы (как в рекламе), чтобы переливались... Вот и морочу себе голову.
З.Ы. А для тетриса даже платы пришли, но до сих пор не запаяны лежат... Еще одна проблема, что заказал регистры к ним, а они так и потерялись в пути...
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:24:03
Z_h_e
СКАЗОЧНИК писал(а):Он еще не вылежался.
Мои проекты только на согласовании (со мной же) лежат лет пять - бюрократия и коррупция.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:25:07
СКАЗОЧНИК

Аналогично!

С праздником вас!
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Чт дек 31, 2015 22:52:47
Z_h_e
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс янв 03, 2016 15:23:54
YS
О, отличная тема, я тоже никак не мог въехать в BAM. Давайте я расскажу, как я понял, а вы меня проверите.
Итак, период состоит из 256 равных элементарных интервалов. Пускай для определенности это будет 1 мкс. У нас есть N переменных, в которых хранится яркость каналов в двоичном коде.
Как я понял, обрабатывается это так:
1. Происходит прерывание. Проверяем N переменных на предмет того, стоит ли
нулевой бит. Если стоит - зажигаем соответствующий канал, если не стоит - тушим. Ждем
1 мкс.
2. Происходит прерывание (через 1 мкс). Проверяем N переменных на предмет того, стоит ли
первый бит. Если стоит - зажигаем соответствующий канал, если не стоит - тушим. Ждем
2 мкс.
3. Происходит прерывание (через 2 мкс). Проверяем N переменных на предмет того, стоит ли
второй бит. Если стоит - зажигаем соответствующий канал, если не стоит - тушим. Ждем
4 мкс.
...
...
7. Происходит прерывание (через 32 мкс). Проверяем N переменных на предмет того, стоит ли
шестой бит. Если стоит - зажигаем соответствующий канал, если не стоит - тушим. Ждем
64 мкс.
8. Происходит прерывание (через 64 мкс). Проверяем N переменных на предмет того, стоит ли
седьмой бит. Если стоит - зажигаем соответствующий канал, если не стоит - тушим. Ждем
128 мкс.
После этого начинаем с п. 1.
Верно?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс янв 03, 2016 15:29:17
Z_h_e
Кстати, BAM я тоже не знал, по той ссылке что я дал, мне стало понятно. Так что ТС'у респект за тему. Мне кажется YS Ваше объяснение тоже запутано.
-----------------
Хотя может и не так уж и запутано у Вас. Все зависит от "мЫшленья". ТС дал ссылку о семи прерываний. На самом деле возникает одно, но но с разным временным интервалом. В каждом интервале проверяется нужно включать нагрузку или нет, а нагрузок (портов) может быть очень много.
Может я еще запутаннее написал.