Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 22 авг 2019, 18:38

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 25 янв 2012, 23:15 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1927
Binary (Bit) Angle Modulation (BAM) довольно интересная альтернатива ШИМ. А в случаях, когда каналов много и они используются для управления светодиодами - просто незаменимая вещь!
Вложение:
sshot-2.png
sshot-2.png [ 14.75 КБ | Просмотров: 7429 ]
Не буду описывать суть метода (это тема для целой статьи) просто нужно знать, что BAM позволяет более "правильно" для человеческого глаза засвечивать светодиоды и при этом на его реализацию расходуется намного меньше процессорного времени.
- Для каждого канала уровень BAM задается в переменной Bri* (где * - номер канала).
- Все действия производятся в прерываниях таймера0 (или другого по выбору). Для основной программы работа программного BAM незаметна. Менять уровень канала можно в любое время, в любом месте программы.
- Обработка одного канала занимает 7 слов памяти и 8 тактов процессорного времени (для обеспечения частоты BAM в 120Гц необходимо каналы обрабатывать 120*8=960 раз в секунду).
- Теоретически (при частоте задающего генератора 20МГц) можно организовать до 3000 таких каналов!
Вложение:
Комментарий к файлу: Организация произвольного количества BAM каналов.
BAM-test.zip [21.15 КБ]
Скачиваний: 348
- Зачастую при реализации BAM забывают о том, что при переходе значений от 127 к 128 и наоборот возникают артефакты в виде заметного моргания. Такое получается из за того, что при смене вышеуказанных значений соседние периоды ВАМ образуют облась с одним уровнем (в зависимости от напрвления перехода 0 или 1) с периодом равным целому периоду ВАМ.

127 --> 128 #b0{1111111 --> #b1}0000000

Для того, чтобы этого избежать, в этой реализации, в каждый следующий период работы ВАМ меняется направление обработки.
Т.е.: 1 период = b7, b6 ... b1 b0; 2 период = b0, b1 ... b6 b7; 3 период = b7, b6 ... b1 b0; и т.д.
Такой способ работы еще называют зеркальным BAM (MiBAM) Mirror Imaged Bit Angle Modulation/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 16 фев 2012, 16:04 
Прошу дать пояснения относительно количества каналов управления. Мне кажется, что данный алгоритм даже теоретически не может обеспечить управление более, чем 3 десятками каналов.

Узким местом станет два последовательных прерывания b0 и b0 между которыми в данном случае 256 тактов процессора. В этот период нужно уложить ВСЕ каналы управления. С учетом 10 тактов общей части программы и 8 тактов на управление каждым каналом, получается что (256-10)/8=30. Это максимальное число каналов управления при таком алгоритме и частотах и то, при условии статической яркости каждого канала. В противном случае внутри обработчика прерывания будет возникать новое прерывание, которое зациклит программу.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 17 фев 2012, 23:12 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1927
Давайте посчитаем вместе.
Возьмем максимальную частоту задающего генератора 20Мгц
Для обеспечения частоты модуляции в 100Гц нам необходимо вызывать прерывание 100Гц*8=800 раз в секунду.
Следовательно между вызовами прерывания будет пауза в 20 000 000 / 800 = 25 000 тактов.
В эти 25 тыс. тактов нужно уложить выдачу уровней по каналам (8 тактов на канал) и поменять яркость каналов в соответствии с алгоритмом их изменений. Яркость каналов (байтовые переменные в SRAM) меняются вне прерываний поэтому они могут меняться гораздо медленнее на протяжении нескольких периодов прерываний.
Из этих расчетов видно, что количество каналов микроконтроллер может потянуть огромное, ограничение скорее будет на количество SRAM памяти в микроконтроллере, та как ее просто не будет хватать для всех каналов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 22 фев 2012, 13:38 
Не в сети
Аватара пользователя

Зарегистрирован: 12 фев 2012, 22:25
Сообщения: 74
Это было бы верным при условии, что прерывания по каждому из восьми битов было бы равномерным и возникало бы через одинаковые промежутки времени. Но в самом деле, интервал прерывания по нулевому биту в 128 раз чаще прерывания по седьмому. Вот из-за этого, по моему мнению, прерывание по самому младшему разряду и станет самым узким местом системы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 23 фев 2012, 21:35 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1927
Ширина нулевого периода действительно самая маленькая, но этот маленький импульс проскакивает с той же частотой что и и седьмой (самый большой).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 23 фев 2012, 22:50 
Не в сети
Аватара пользователя

Зарегистрирован: 12 фев 2012, 22:25
Сообщения: 74
Это не важно. Важным с точки зрения ограничени каналов управления явлется как раз вот этот самым маленький интервал прерываний по нулевому биту. И если в процессе обработки всех каналов управления прерывание возникнет повторно ( а в алгоритме программы изменение регистра OCROA происходит после обработки всех каналов) то возникнет непрерывный цикл и программа зависнет.

И в этом случае неважно сколько раз в секунду возникает прерывание по 0 или по 7 биту. Важно что за самый короткий интервал прерываний по 0 биту мы не успеваем обслуживать все каналы управления. Именно поэтому считаю это самым узким местом алгоритма.

Кроме того, я считаю, что выбор произвольной частоты обновления, как в нашем случае 100Гц, тоже не совсем корректно. Поскольку если время обработки всех прерываний по всем 8 битам проходят быстрее чем 100 раз в секунду то это значит, что в промежутках между такими пакетами обработки светодиод либо включен либо выключен и при разной частоте таких пакетов свечение будет разным. Корректнее алгоритм привязывать к такой частоте обновления, которая точно соответствует длительности всех прерываний по всем 8 битам. В таком случае частота обновления должна расчитываться, и зависит она ТОЛЬКО от частоты микропроцессора и больше ни от чего.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 25 фев 2012, 02:03 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1927
Да, время самого маленького импульса накладывает ограничение на обработку каналов. При 8МГц задающем генераторе и частоте обработки каналов 100Гц этот период составляет 256 тактов (при задающем генераторе 20МГц - под 700 тактов). Но ничего страшного не произойдет даже если обработка каналов займет больше времени, чем самый малый период, так как каналы обрабатываются в прерывании и рекурсивно оно не вызовется пока не произойдет выход из прерывания. По выходу из прерывания сразу запуститься отложенное, но время вызова следующего прерывания (для следующего бита) уже увеличится и зависания не произойдет.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 25 фев 2012, 11:01 
Не в сети
Аватара пользователя

Зарегистрирован: 12 фев 2012, 22:25
Сообщения: 74
По первой части ответа комментарий следующий: мы уже согласились с Вами, что самый малый интервал прерываний - это самое узкое место алгоритма. И даже согласились с тем, что если мы не успеем обработать весь алгоритм в течение времени этого прерывания, то временные интервалы свечения светодиодов нарушаются и даже если не происходит зависание то как минимум на малых изменениях яркости мы получаем ошибку (время горения по нулевому биту становиться БОЛЬШЕ чем должно быть)

Что касается второй части, то видимо придется объясняться не на словах а на цифрах:
1. Если принять рассчитанный Вами самый маленький интервал прерываний за 256 тактов процессора
2. И в соответствии с ВАМ алгоритмом посчитать, что таких маленьких интервалов в процессе обработки всех 8 битов будет 255 (каждый последующий бит в два раза увеличивает интервал)
3. То исходя из логики 100Гц мы получаем что 256*255*100 это и есть наша секунда, но это, к сожалению, не так и до конца секунды еще остается почти полтора миллиона тактов.

В самом деле, если прерывание по нулевому биту возникает через 256 тактов на 8Мгц, то фактическая частота обновления составляет более 120Гц. И по своему желанию мы ее установить НЕ можем, поскольку жестко привязаны к частоте тактирования процессора и дискретным предделителям таймера.

Ну, как будто, в этот раз уже смог объясниться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 27 фев 2012, 22:44 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 15 май 2011, 23:00
Сообщения: 1927
Я не совсем с Вами согласен по первой части. По крайней мере в сравнении с ШИМ (а какие еще есть альтернативы?) и вот почему:
1 Если в ВАМ узкое место - обработка нулевого короткого бита (1 бит из 8 обрабатываемых), то в ШИМ все 255 из 255 обрабатываемых периодов имеют такую короткую длительность.
2 Если обработка каналов не влазит в самый короткий период, то в ВАМ это всего лишь исказит градацию яркости (в пределах 1-3 единиц из 255 или 1% - это не так много) и алгоритм продолжит работать. А вот если обработка каналов не влазит в период ШИМ, то это насмерть вешает микроконтроллер, так как каждая обработка одинаково малая.

По второй части: пауз в алгоритме никаких нет. Алгоритм работает следующим образом 0й бит - период 256 тактов, 1й бит - 512, 2й - 1024 и т.д.
Получаем: 256+512+1024+2048+4096+8192+16384+32768 = 65282 тактов на цикл
Количество циклов в секунду 8000000 / 65282 = 122.5. Циклы повторяются непрерывно без пауз.

На счет невозможности изменения частоты циклов - это правда, мы довольно жестко ограничены в выборе частот так как вынуждены оперировать лишь пределителем 8-ми битного таймера. А вот в ШИМе частоту мы можем установить какую пожелаем. Но, опять таки, рассматривать это как недостаток нельзя, так как глазу все равно на какой частоте работает алгоритм (если она выше 80Гц).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Организация произвольного количества BAM каналов.
СообщениеДобавлено: 28 фев 2012, 10:09 
Не в сети
Аватара пользователя

Зарегистрирован: 12 фев 2012, 22:25
Сообщения: 74
Спасибо за дискуссию. По моему, в результате беседы, мы все осветили достаточно подробно для того чтобы остальные смогли понять работу алгоритма достаточно подробно.

У меня с самого начала не было никакой "аллергии" на ВАМ, и тем более по сравнению с ШИМ как могло показаться. Единственное чего мне хотелось в результате диалога - это понимание того, что не смотря на его явные преимущества он все таки имеет свои собственные существенные недостатки (как впрочем и любой алгоритм) и его не нужно "обожетствлять", присваивая ему фантастические свойства, которые в жизни реализовать невозможно.

Что же касается искажений в 1% от степени свечения, то аргумент железный, как впрочем и 8-битный алгоритм в целом. Я могу ошибаться, но почти уверен, что уже даже при 5-битном ВАМ человеческий глаз уже врядли сможет различить все 32 уровня свечения светодиода и все остальные биты обработки - пожалуй нужны больше не для прикладной полезности, а как "дань" алгоритму.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB