BAM в BASCOM-AVR
|
|
sherman | Дата: Вторник, 10.07.2012, 00:32 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 55
Статус: Offline
| Всем привет! Хочу попробовать замену ШИМу так называемый BAM http://bsvi.ru/bam-alternativa-shimu/ может есть у этот алгоритм в Bascome?
|
|
| |
exersizze | Дата: Вторник, 10.07.2012, 13:34 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| Ага, видел такое интересная технология. Но я пока не соображу как оно все там работает
|
|
| |
top | Дата: Пятница, 23.08.2013, 22:38 | Сообщение # 3 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| Обожаю поднимать древние темы Разобрался с этим BAM изучив статьи: Статья первая Статья вторая (она же в сообщении №1) Статья треться (на заметку для дальнейших разработок)
Вот списал из первой статьи набросал примерчик, где в основном цикле "яркость" светодиода меняется по закону пилы от 0 до 100 и обратно используя этот(у) самый(ую) BAM. Работает используя прерывание по сравнению таймера Timer1. От себя: некоторое дрожание светодиода все же заметно, устранить его можно воспользовавшись материалами из третьей статьи.
|
|
| |
exersizze | Дата: Воскресенье, 25.08.2013, 19:20 | Сообщение # 4 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| О, спасибо, надо изучить.
|
|
| |
AlekS | Дата: Воскресенье, 25.08.2013, 23:08 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| exersizze, может статейку пусть напишет, если неее против. Будет вроде все водном месте и не размазано по форуму?
|
|
| |
top | Дата: Воскресенье, 25.08.2013, 23:17 | Сообщение # 6 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| AlekS, до статейки круто бы довести) Но думаю на данном этапе код совсем не статейный. Надо редактировать и тестить, очень жаль что у меня нет осциллографа. А виртуальный - намучался я с протеусосвскими тормозами. Уж очень охота посмотреть что в действительности получается! Быть может у кого из форумчан есть осцилл/лог.анализатор?
|
|
| |
KoSS_89 | Дата: Понедельник, 26.08.2013, 18:05 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Завтро могу скинуть фотки, что творится на выходе, есть и аналог осцил и цифра... что в исходнике изменять, чтоб фоток больше сделать?
|
|
| |
top | Дата: Понедельник, 26.08.2013, 20:11 | Сообщение # 8 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, Изменению подлежат два параметра: 1. Преддлеитель таймера, он же Prescale. Может быть равен 1, 8, 64, 256, 1024. (строка №13) 2. Регистр сравнения Compare1a. От 1 до 65535. (строка №21) Смею предложить сделать 6 измерений: Для Prescale = 1 и при Compare1a = 256, Compare1a = 32767, Compare1a = 65535 И аналогично, только для Prescale = 256.
Но это лишь догадки, смотри по факту, что будет информативным а что нет, чтобы однообразия не было.
Правильнее сказать так: хочется посмотреть поведение схемы "в железе", проверить её стабильность в критических, высокочастотных, режимах (например при Prescale = 1и Compare1a = 1...256)
И еще, чтобы не было неразберихи, основной цикл лучше заменить на:
Do Led_brightness = любое число от 0 до 255 Loop
И для разных значений Led_brightness нащелкать картинок.
Очень много что-то я расписал, поэтому буду рад любой посильной помощи, вне зависимости от того, что написано мной выше.
Сообщение отредактировал top - Понедельник, 26.08.2013, 20:14 |
|
| |
AlekS | Дата: Вторник, 27.08.2013, 01:30 | Сообщение # 9 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| KoSS_89, top, тема интересна, фотки процесса это решение. Пока нет времени подключится, но думаю Prescale = 1 больше не надо. Хотя смотри по факту.
|
|
| |
AlekS | Дата: Вторник, 27.08.2013, 18:30 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| В протасе идет.
Сообщение отредактировал AlekS - Вторник, 27.08.2013, 18:33 |
|
| |
top | Дата: Вторник, 27.08.2013, 21:27 | Сообщение # 11 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| AlekS, Идет, не спорю Но на моей машине с жуткими тормозами. Хотя железо здоровое, индекс производительности 7,2.
|
|
| |
KoSS_89 | Дата: Вторник, 27.08.2013, 22:04 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Блин, извиняюсь, хотел на роботе пофоткать, но облом, поднавалило, взял макетку домой а осцил забыл... завтро обезательно выложу около четырёх вечера.
|
|
| |
top | Дата: Вторник, 27.08.2013, 22:06 | Сообщение # 13 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, ждем с нетерпением
|
|
| |
KoSS_89 | Дата: Вторник, 27.08.2013, 22:21 | Сообщение # 14 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Ща в железе запущу, посмотрю как работает, стравню на глаз и на камеру работу ВАМа и ШИМа...
Короче немогу понять, при Prescale=64 несушая самая высокая, при Prescale=128 гдето в половину меньше, при Prescale=1024 несущая около 20Гц (на глаз) при Prescale=8 ооочееень большие мерцания и при Prescale=1 мерцания просто большие... изменение переменной I (она-же задаёт параметр Compare1a ничего на глаз незамечено...
В простом ШИМе несущая частота намного выше даже в 10ти битном режиме, и вот только при восьми битах и претделителе раном 64 мерцания становятся приблезительно как ВАМ с делителем на 64, следовательно несущая около 244 Гц - херня... да и ВАМ заниамет 8% а ШИМ 2% ........
Сообщение отредактировал KoSS_89 - Вторник, 27.08.2013, 23:10 |
|
| |
|
KoSS_89 | Дата: Среда, 28.08.2013, 18:54 | Сообщение # 16 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Откуда берётся этот маленький "аппендикс" когда претделитель = 64, почему несущая такая маленькая, да и вобще очень много вопросов, чесно неочень разобрался в коде, особо времени нет. TOP подскажите чего-б сделать, может чего в коде изменить, с удовольствием протестирую остальный проги, если нужно конечно...
|
|
| |
AlekS | Дата: Среда, 28.08.2013, 20:32 | Сообщение # 17 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| Цитата (top) AlekS, Идет, не спорю Но на моей машине с жуткими тормозами. Хотя железо здоровое, индекс производительности 7,2. Можешь тоже , проц 800Мгц шина 100, винда ХР 3 пак. Хотя на 98 проц 100% занят!!! Протос новый. KoSS_89, на протосе тоже, Сообщение # 10 -здесь лежит с диодной развязкой , посмотри.... всплеск - это переходные прочессы на выходе вроде насыщения....кмопа.
|
|
| |
top | Дата: Среда, 28.08.2013, 20:35 | Сообщение # 18 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, Аппендикс имеется ввиду - импульсы на этом изображении? Насчет переменной I - её изменять не нужно, это циклический счетчик. Непонятность кода я устараню, насколько смогу, прокомментировав его. Постараюсь сегодня ночью дополнить его. И код немного изменю, уберу из основного цикла лишнее.
|
|
| |
AlekS | Дата: Среда, 28.08.2013, 20:38 | Сообщение # 19 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| Да, извени KoSS_89, спасибо за фотки! 5 фотку можешь еще развернуть, завалы на макушках есть?
|
|
| |
AlekS | Дата: Среда, 28.08.2013, 20:41 | Сообщение # 20 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| top, как дос?
|
|
| |
top | Дата: Среда, 28.08.2013, 20:43 | Сообщение # 21 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| AlekS, дос все еще в планах, занялся сейчас радиомодулями на mrf49xa, скоро будут на этом сайте)
|
|
| |
AlekS | Дата: Среда, 28.08.2013, 20:51 | Сообщение # 22 |
Группа: Проверенные
Сообщений: 247
Статус: Offline
| +100
|
|
| |
top | Дата: Среда, 28.08.2013, 21:17 | Сообщение # 23 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, готово, код подшаманил. Надеюсь стало более понятно) Ожидаю любые вопросы, возникшие при чтении кода
|
|
| |
KoSS_89 | Дата: Четверг, 29.08.2013, 22:19 | Сообщение # 24 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Вобщем поигрался с последней прошивкой, фоток к сожелению не делал, но если нужно завтро будут. Значит максимальная частота получается при делителе=64 , завалов импульсов нигде не наблюдается, да и с чего им взятся, эта максимальная частота равна 800Гц. А вот если закоментировать в подпрограмме компаратора строки Stop Timer1 и Start Timer1 то частота резко прыгает до 1900Гц, это конечно радует, но всёже ШИМ при таком раскладе даёт 15.8кГц. и тоже никаких завалов... Теперь касаемо этого маленького импульса (как я выразился "аппендикса") этот импульс идет в начале цикла ___``_`````__________``_`````_________ Тоесть получается на выходе устанавливается лог1 потом лог0 и далее период лог.еденицы и лог.ноля помоему косяк программы либо особенность МК.
Сообщение отредактировал KoSS_89 - Четверг, 29.08.2013, 22:21 |
|
| |
top | Дата: Четверг, 29.08.2013, 22:25 | Сообщение # 25 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, У меня пара вопросов Странно, почему макс частота при предделителе 64 а не при 1? Аппендикс - в начале цикла. Где именно? Повторяется ли потом? я что-то не пойму где он откуда. Но для начала предположу что это влияние начальных значений переменных или же из-за стоп-старта таймера в начале программы, где инициализация и прочие конфиги)
|
|
| |
KoSS_89 | Дата: Четверг, 29.08.2013, 23:36 | Сообщение # 26 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Незнаю почему именно 64 а импульс этот вылазит на протяжении всей работы программы. вылазит он перед началом периода логической еденицы, тоесть когда приходит время зажечь светик вылазит этот импульс, потом светик горит всоё время, после пауза и все повторяется снова. первая, третья и четвёртая фотки хорошо видно, только здесь получается, что первым идет лог ноль а потом лог еденица (чем больше яркость светика. тем меньше пауза после всплеска и дольше лог еденица... Короче завтро фото с пояснениями будет и еще есть мысля. проверю...
|
|
| |
top | Дата: Четверг, 29.08.2013, 23:45 | Сообщение # 27 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, так в том и есть особенность BAM, что у нас длительность импульсов (логических единиц) разная получается. Вот здесь есть изображения объясняющие всю суть) http://bsvi.ru/bam-alternativa-shimu/ Как там объясняется, каждый бит имеет свой "вес"
Сообщение отредактировал top - Четверг, 29.08.2013, 23:45 |
|
| |
KoSS_89 | Дата: Пятница, 30.08.2013, 18:34 | Сообщение # 28 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Аааа дапёр, нужно завтро подкинуть к аналоговому осцилу, может цифровой не все пики видит, (ведь их должно быть больше чем два?) Сегодня получилось разогнать частоту до 10.8кГц в подпрограмме по прерыванию Compare1a убираем стоп и старт таймер и пишем Timer1=0 и тогда всё работает верно, самая большая частота на Prescale = 1 и самая маленькая соответственно на претделителе = 1024 (около 60Гц)
|
|
| |
top | Дата: Пятница, 30.08.2013, 23:32 | Сообщение # 29 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, Превосходные результаты дружище) Поистине правильное замечание с обнулением таймера (Timer1=0) - это самы верный вариант! Ждем аналоговый осцилл, импульсов должно быть больше)
|
|
| |
KoSS_89 | Дата: Суббота, 31.08.2013, 20:57 | Сообщение # 30 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| А нет, тоже два всплеска... Да что говорить если даже в симуляторе таже картика(выше по странице)
|
|
| |
top | Дата: Суббота, 31.08.2013, 21:17 | Сообщение # 31 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| KoSS_89, Это "чудо" появляется в начале подпрограммы обработки прерывания? А потом после этого "чуда" идет значение BAM согласно установленной величине Led_brightness?
|
|
| |
KoSS_89 | Дата: Суббота, 31.08.2013, 22:40 | Сообщение # 32 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Да сначало идет этот всплеск, потом пауза заданная значением BAM потом импульс заданный значением BAM
|
|
| |
top | Дата: Суббота, 31.08.2013, 22:47 | Сообщение # 33 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| И этот всплеск всегда один и тот же и перед каждым срабатыванием таймера?
Сообщение отредактировал top - Суббота, 31.08.2013, 22:48 |
|
| |
top | Дата: Суббота, 31.08.2013, 23:05 | Сообщение # 34 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| Странно но у меня в протеусе чисто и без этого всплеска. Я закоментировал старт и стоп таймер и в самом начале подпрограммы прерывания добавил timer1=0 Вот пример: (при prescale = 256) Затем все циклически повторяется
Сообщение отредактировал top - Суббота, 31.08.2013, 23:16 |
|
| |
top | Дата: Суббота, 31.08.2013, 23:27 | Сообщение # 35 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| Кажется понял в чем был косяк, надо было в условии проверки счетчика тоже добавить timer1=0 Вот так:
Do_this: Timer1 = 0 Compare1a = Array(i) Led_compare = Led_value And &H80 If Led_compare = &H80 Then Set Led Else Reset Led End If
Rotate Led_value , Left Incr I
If I > 8 Then Led_value = Led_brightness I = 1 Timer1 = 0 End If Return
В этом случае все получается верно и без лишних необъяснимых вещей для всех значений Prescale кроме единицы. При prescale=1 белиберда получается.
Сообщение отредактировал top - Суббота, 31.08.2013, 23:46 |
|
| |