Страница 3 из 4
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс янв 24, 2016 22:41:06
ILYAUL
Там же описано какие проблемы есть у ВАМ и где они совпадают с ШИМ.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс янв 24, 2016 22:54:50
Z_h_e
COKPOWEHEU писал(а): Какой вообще смысл от выставления заранее заданной яркости заранее заданным диодам?
Такой же как в программе поиска максимального значения из трех переменных и больше ничего не делающей. Но в учебниках по программированию таких задач полно и по таким учебникам учатся программеры.
COKPOWEHEU писал(а):И вы гарантируете, что это прерывание не будет скопировано в другие проекты?
Это проблемы безмозглых копипастеров.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Пн янв 25, 2016 10:09:19
ARV
ILYAUL писал(а):Там же описано какие проблемы есть у ВАМ и где они совпадают с ШИМ
так то оно так, но цитата моего поста не в тему совсем.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Ср янв 27, 2016 10:57:00
Bullet
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб фев 27, 2016 17:59:50
СКАЗОЧНИК
Короче, что-то мне этот ВАМ не понравился..
Теперь хочу обычный софтовый ШИМ на 8 каналов...

Однако, до меня не доходит блин! Запускал три канала ШИМ железных - все прекрасно работает и регулируется. А вот софтовый туплю.
Я так понял, что таймер настроен по переполнению. Пусть будет обычный 8 битный таймер. Считает он до 256.
При срабатывании прерывания по переполнению мы увеличиваем переменную-счетчик, с которой сравниваем все заданные каналы. И если есть совпадение, то выставляем в порту единичку, а если нету, то нолик.
Когда счетчик досчитал до 256 (обнулился), все сначала начинается...
Получается, если без предделителей таймер пашет, то при 8 МГц тактирования будет 8000000/256/256=122 Гц. Так?
А что будет если совпал у меня счетчик и выставил в порту единицу. А на следующем цикле счетчик увеличился и теперь уже не совпадает, значит сбросит порт в ноль. Какой же это ШИМ? Где-то собака порылась?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб фев 27, 2016 18:02:15
ARV
как только совпал - устанавливаем уровень, а сбрасываем все сразу только в момент "переполнения" счетчика
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб фев 27, 2016 18:03:34
СКАЗОЧНИК
Все. Понял.

Спасибо огромное!
Отдельно признателен за оперативность. Не ожидал такой скорости.

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб фев 27, 2016 18:08:17
ARV
на здоровье. можно еще проверять не на равенство, а на "больше или равно", тогда сбрасывать отдельно ничего не придется - само сбросится, когда счетчик обнулится.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс фев 28, 2016 09:01:34
akl
СКАЗОЧНИК писал(а):Теперь хочу обычный софтовый ШИМ на 8 каналов...
Можно обойтись без сравнений, просто выводя из предварительно заполненного буфера.
Спойлер
Код: Выделить всё
.INCLUDE "m8def.inc"
.equ Fo=8000000
.org 0x0000
RESET:
RJMP START
;*****************
.org 0x0004
OVER_T2:
IN R15,SREG
LD R20,Z
OUT PORTB,R20
INC ZL
OUT SREG,R15
RETI
;*****************
;*****************
;*****************
START:
SER ZH
OUT SPL,ZH
OUT DDRB,ZH
CLR ZH
OUT SPH,ZH
RCALL BUFER_RAM
LDI ZH,HIGH($100)
LDI ZL,LOW($100)
LDI R21,1<<SE
OUT MCUCR,R21 ; режим SLEEP IDLE
GO:
LDI R21,1<<TOIE2 ;разрешение прерывания сравнения T2
OUT TIMSK,R21
OUT TIFR,R21
LDI R21,$01
OUT TCCR2,R21
CLT
SEI
WAIT:
SLEEP
BRTC WAIT
;признак изменения буфера установлен
CLT
RCALL BUFER_RAM
RJMP WAIT
BUFER_RAM:
;заполнение буфера
RET
.EXIT
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс фев 28, 2016 10:18:22
СКАЗОЧНИК
Сделал так, как Роман (ARV) описал.
Спойлер
Код: Выделить всё
OVF0_:
ldi temp, 01
out TCNT0, temp ; Перезагрузка таймера (актуально, если период меньше 255, иначе можно убрать)
inc Sravnenie
K1: lds temp, Capture1
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Tport, Tpin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K2
sbi Tport, Tpin ; Включаем вывод
K2: lds temp, Capture2
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Oport, Opin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K3
sbi Oport, Opin ; Включаем вывод
K3: lds temp, Capture3
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Uport, Upin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K4
sbi Uport, Upin ; Включаем вывод
K4: lds temp, Capture4
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Report, Repin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K5
sbi Report, Repin ; Включаем вывод
K5: lds temp, Capture5
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Eport, Epin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K6
sbi Eport, Epin ; Включаем вывод
K6: lds temp, Capture6
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Rport, Rpin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K7
sbi Rport, Rpin ; Включаем вывод
K7: lds temp, Capture7
cp Sravnenie, temp
brsh PC+3 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
cbi Sport, Spin ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
rjmp K8
sbi Sport, Spin ; Включаем вывод
K8: lds temp, Capture8
cp Sravnenie, temp
brsh PC+2 ; Если Sravnenie равно или больше, то переходим, где ставим вывод в единицу
nop ; Иначе, Сравнение меньше, значит сбрасываем вывод на ноль
nop
nop
nop ; Включаем вывод
reti
Все работает. Переменные Capture1-8 заданы при инициализации.
Теперь мне надо их плавно менять, а у меня все виснет при этом, если их менять в главном цикле, да еще и задержку если поставить.
Посмотрел в симуляторе, если я правильно понял, то у меня на прерывание уходит 64 такта. А т.к. всего у меня между прерываниями есть 240 примерно тактов, то у меня еще есть 176 свободных, чтобы не просрать очередное прерывание?
Как их сделать, чтобы пуеременные менялись где-то?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс фев 28, 2016 11:19:08
Z_h_e
Флаги то не сохраняете в прерывании.
СКАЗОЧНИК писал(а): то у меня на прерывание уходит 64 такта. А т.к. всего у меня между прерываниями есть 240 примерно тактов, то у меня еще есть 176 свободных, чтобы не просрать очередное прерывание?
Если у Вас прерываний других нет, и запрета прерываний в основном теле нет, то оно никак не просрется.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс фев 28, 2016 11:26:19
СКАЗОЧНИК
Маленько не то имел ввиду. )))
Ща, у меня уже что-то получаться начало. Иду в правильном нарпавлении.
Просто получалось, что в главном цикле он успевает сделать столько интераций, что все в итоге выводилось по среднему. Скорость слишком большая. Уже разобрался.
Спасибо. Флаги подправлю, сохранение сделаю.
Все. добился чего хотел. почти.
У меня все значения ШИМ для каналов изменяются плавно, но по кругу (если можно так сказать). Получается что-то в виде бегущего огня, которые плавно нарастают один за другим и также гаснут. Но... у меня все по кругу и поэтому плавно гаснуть получается, а плавно нарастать нет.
Где-то надо начинать переменные в другую сторону крутить? Как это проще сварганить?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб мар 05, 2016 01:56:24
MOHCTEP
СКАЗОЧНИК писал(а):Короче, что-то мне этот ВАМ не понравился..
А чем не понравился? И на какой частоте у вас таймер работал?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб мар 05, 2016 07:53:41
СКАЗОЧНИК
Елки... Я уже и не помню. Помню только что АТМега8 на внутренней 8 МГц. Предделители не помню...
Не понравился

тупой сложностью организации динамической смены яркости.... Т.е. как-то сделал, чтобы яркость по каналам была разная - все получилось и работало. Потом забросил на некоторое время. Потом опять вернулся к изделию, чтобы сделать плавное изменение яркости по каналам и понял, что забыл, как это вообще работает.
Для этого надо было сначала вспомнить, что я там нафигачил...

Вспомнил. А заодно и вспомнил сложности в мерцании на больших задержках. А еще предстояло как-то менять яркости плавненько.
Плюнул на все это и переделал на программный ШИМ. (кстати, разница не сильно большая, но принципиальная). Однако, для моих 7 каналов мне прекрасно хватило.
Как-то так.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб мар 05, 2016 17:33:06
MOHCTEP
Понятно. А я-то, наоборот, с программного ШИМа решил ВАМ попробовать. Очень уж там частота обновления низкая. А хотелось тоже цепочку из 16 штук динамически позажигать... И "обломался". ВАМ, у меня, по крайней мере, нормально яркости показывал, если таймер, как минимум, на 64 поделить. А это максимум 10 светодиодов, если больше, то уже мерцают.

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Сб мар 05, 2016 17:39:38
СКАЗОЧНИК
Вообще, ВАМ и надо доделывать. Просто мне стало лень. Перешел на ШИМ. Сделал как мне показалось проще, однако у страха глаза велики, возможно и на ВАМ справился бы еще лучше.

Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс мар 06, 2016 01:10:33
COKPOWEHEU
Что ВАМ, что ШИМ не обязательно делать 8-битным, для глаза достаточно и 4-6 бит. У меня на 6-битном ВАМ-е нормально работали 10 RGB-диодов. Хотя с кодом пришлось извращаться.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс мар 06, 2016 01:35:04
MOHCTEP
Да - верно. Делал на 6 битах, не очень понравились анимированные переходы. Сейчас работает линейка из 12 RGB диодов на ВАМе: все 8 бит, 8 мГц с предделителем на 64. 12 диодов еще терпимо для зрения, хотя боковым зрением уже мерцание очень заметно. Больше уже - трындец. Однако, если поднять частоту, то все яркости нивелируются и даже "врут", но мерцание конечно-же исчезает.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс мар 06, 2016 09:33:55
YS
Потом опять вернулся к изделию, чтобы сделать плавное изменение яркости по каналам и понял, что забыл, как это вообще работает.
Для этого надо было сначала вспомнить, что я там нафигачил...
Если для того, чтобы поменять режим изменения яркости, надо вспоминать алгоритм ее регулирования, то похоже что у написанного модуля регулирования яркости плохой интерфейс.

В идеале стоит придерживаться принципа разграничения уровней абстракции. Тогда про то, как конкретно регулируется яркость, можно будет вообще забыть, и даже на ходу менять BAM на PWM и обратно.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Добавлено: Вс мар 06, 2016 09:38:32
СКАЗОЧНИК
))) До этого мне еще как до луны пешком...

И вообще, надо на Си переходить. Ассемблер хоть и мощная штука, но довольно сильно добавляет времени к разработке нового устройства...