[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
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
Ага, видел такое интересная технология. Но я пока не соображу как оно все там работает sad

 
topДата: Пятница, 23.08.2013, 22:38 | Сообщение # 3
Группа: Друзья
Сообщений: 146

Статус: Offline
Обожаю поднимать древние темы biggrin
Разобрался с этим BAM изучив статьи:
Статья первая
Статья вторая (она же в сообщении №1)
Статья треться (на заметку для дальнейших разработок)

Вот списал из первой статьи набросал примерчик, где в основном цикле "яркость" светодиода меняется по закону пилы от 0 до 100 и обратно используя этот(у) самый(ую) BAM. Работает используя прерывание по сравнению таймера Timer1.
От себя: некоторое дрожание светодиода все же заметно, устранить его можно воспользовавшись материалами из третьей статьи.
Прикрепления: bam.bas (1.2 Kb)


 
exersizzeДата: Воскресенье, 25.08.2013, 19:20 | Сообщение # 4
Группа: Администраторы
Сообщений: 723

Статус: Offline
biggrin
О, спасибо, надо изучить.


 
AlekSДата: Воскресенье, 25.08.2013, 23:08 | Сообщение # 5
Группа: Проверенные
Сообщений: 247

Статус: Offline
exersizze,  может статейку пусть напишет, если неее против. Будет вроде все водном месте и не размазано по форуму? smile

 
topДата: Воскресенье, 25.08.2013, 23:17 | Сообщение # 6
Группа: Друзья
Сообщений: 146

Статус: Offline
AlekS, до статейки круто бы довести) Но думаю на данном этапе код совсем не статейный. Надо редактировать и тестить, очень жаль что у меня нет осциллографа. А виртуальный - намучался я с протеусосвскими тормозами.  wacko Уж очень охота посмотреть что в действительности получается!
Быть может у кого из форумчан есть осцилл/лог.анализатор?


 
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 нащелкать картинок.

Очень много что-то я расписал, поэтому буду рад любой посильной помощи, вне зависимости от того, что написано мной выше. wink




Сообщение отредактировал top - Понедельник, 26.08.2013, 20:14
 
AlekSДата: Вторник, 27.08.2013, 01:30 | Сообщение # 9
Группа: Проверенные
Сообщений: 247

Статус: Offline
KoSS_89top, тема интересна, фотки процесса это решение. Пока нет времени подключится, но думаю  Prescale = 1 больше не надо. Хотя смотри по факту. yes

 
AlekSДата: Вторник, 27.08.2013, 18:30 | Сообщение # 10
Группа: Проверенные
Сообщений: 247

Статус: Offline
В протасе идет.
Прикрепления: 1684086.jpg (121.6 Kb) · Bam.zip (260.7 Kb) · 2282037.jpg (129.4 Kb)




Сообщение отредактировал AlekS - Вторник, 27.08.2013, 18:33
 
topДата: Вторник, 27.08.2013, 21:27 | Сообщение # 11
Группа: Друзья
Сообщений: 146

Статус: Offline
AlekS, Идет, не спорю smile Но на моей машине с жуткими тормозами. Хотя железо здоровое, индекс производительности 7,2.

 
KoSS_89Дата: Вторник, 27.08.2013, 22:04 | Сообщение # 12
Группа: Проверенные
Сообщений: 53

Статус: Offline
Блин, извиняюсь, хотел на роботе пофоткать, но облом, поднавалило, взял макетку домой а осцил забыл... завтро обезательно выложу около четырёх вечера.

 
topДата: Вторник, 27.08.2013, 22:06 | Сообщение # 13
Группа: Друзья
Сообщений: 146

Статус: Offline
KoSS_89, ждем с нетерпением smile

 
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:47 | Сообщение # 15
Группа: Проверенные
Сообщений: 53

Статус: Offline
Итак
BAM
Prescale=64  ; I=5 ; Led_brightness=20 ; 8MHz

Это максимальная частота


 Prescale=64  ; I=5 ; Led_brightness=80 ; 8MHz

 

 Prescale=64  ; I=5 ; Led_brightness=100 ; 8MHz

 

 Prescale=64  ; I=5 ; Led_brightness=1 ; 8MHz

 

 Prescale=1  ; I=5 ; Led_brightness=80  ; 8MHz



И теперь косаемо ШИМа
 Prescale=1 ; 8bit ; 8MHz ; PWM0A=50
Прикрепления: 8210653.jpg (103.3 Kb) · 4782244.jpg (102.7 Kb) · 1449281.jpg (133.9 Kb) · 2375607.jpg (114.4 Kb) · 0181037.jpg (118.8 Kb) · 0035737.jpg (95.7 Kb) · 9685707.jpg (50.1 Kb)


 
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.
biggrin biggrin biggrin Можешь тоже  biggrin , проц 800Мгц шина 100, винда ХР 3 пак. Хотя на 98 проц 100% занят!!!
Протос новый.
KoSS_89,  на протосе тоже, Сообщение # 10 -здесь лежит с диодной развязкой , посмотри.... всплеск - это переходные прочессы на выходе вроде насыщения....кмопа.


 
topДата: Среда, 28.08.2013, 20:35 | Сообщение # 18
Группа: Друзья
Сообщений: 146

Статус: Offline
KoSS_89, Аппендикс имеется ввиду - импульсы на этом изображении? Насчет переменной I - её изменять не нужно, это циклический счетчик. Непонятность кода я устараню, насколько смогу, прокомментировав его. Постараюсь сегодня ночью дополнить его. И код немного изменю, уберу из основного цикла лишнее. smile

 
AlekSДата: Среда, 28.08.2013, 20:38 | Сообщение # 19
Группа: Проверенные
Сообщений: 247

Статус: Offline
Да, извени KoSS_89, спасибо за фотки! yahoo
5 фотку можешь еще развернуть, завалы на макушках есть?


 
AlekSДата: Среда, 28.08.2013, 20:41 | Сообщение # 20
Группа: Проверенные
Сообщений: 247

Статус: Offline
top,  как дос?

 
topДата: Среда, 28.08.2013, 20:43 | Сообщение # 21
Группа: Друзья
Сообщений: 146

Статус: Offline
AlekSbiggrin дос все еще в планах, занялся сейчас радиомодулями на mrf49xa, скоро будут на этом сайте)

 
AlekSДата: Среда, 28.08.2013, 20:51 | Сообщение # 22
Группа: Проверенные
Сообщений: 247

Статус: Offline
+100

 
topДата: Среда, 28.08.2013, 21:17 | Сообщение # 23
Группа: Друзья
Сообщений: 146

Статус: Offline
KoSS_89, готово, код подшаманил. Надеюсь стало более понятно) Ожидаю любые вопросы, возникшие при чтении кода wink
Прикрепления: bam_with_commen.bas (4.2 Kb)


 
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, У меня пара вопросов wacko
Странно, почему макс частота при предделителе 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/
Как там объясняется, каждый бит имеет свой "вес"
Прикрепления: 7665961.png (11.6 Kb)




Сообщение отредактировал 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
А нет, тоже два всплеска... Да что говорить если даже в симуляторе таже картика(выше по странице)
Прикрепления: 6756041.jpg (41.5 Kb)


 
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)


Затем все циклически повторяется
Прикрепления: 0316428.jpg (349.3 Kb) · 4960062.jpg (349.2 Kb)




Сообщение отредактировал 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
 
  • Страница 1 из 1
  • 1
Поиск: