Пожалуйста помогите чайнику с Binary Angle Modulation
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Там же описано какие проблемы есть у ВАМ и где они совпадают с ШИМ.
- Реклама
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Такой же как в программе поиска максимального значения из трех переменных и больше ничего не делающей. Но в учебниках по программированию таких задач полно и по таким учебникам учатся программеры.COKPOWEHEU писал(а): Какой вообще смысл от выставления заранее заданной яркости заранее заданным диодам?
Это проблемы безмозглых копипастеров.COKPOWEHEU писал(а):И вы гарантируете, что это прерывание не будет скопировано в другие проекты?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
так то оно так, но цитата моего поста не в тему совсем.ILYAUL писал(а):Там же описано какие проблемы есть у ВАМ и где они совпадают с ШИМ
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Короче, что-то мне этот ВАМ не понравился..
Теперь хочу обычный софтовый ШИМ на 8 каналов...
Однако, до меня не доходит блин! Запускал три канала ШИМ железных - все прекрасно работает и регулируется. А вот софтовый туплю.
Я так понял, что таймер настроен по переполнению. Пусть будет обычный 8 битный таймер. Считает он до 256.
При срабатывании прерывания по переполнению мы увеличиваем переменную-счетчик, с которой сравниваем все заданные каналы. И если есть совпадение, то выставляем в порту единичку, а если нету, то нолик.
Когда счетчик досчитал до 256 (обнулился), все сначала начинается...
Получается, если без предделителей таймер пашет, то при 8 МГц тактирования будет 8000000/256/256=122 Гц. Так?
А что будет если совпал у меня счетчик и выставил в порту единицу. А на следующем цикле счетчик увеличился и теперь уже не совпадает, значит сбросит порт в ноль. Какой же это ШИМ? Где-то собака порылась?
Теперь хочу обычный софтовый ШИМ на 8 каналов...
Я так понял, что таймер настроен по переполнению. Пусть будет обычный 8 битный таймер. Считает он до 256.
При срабатывании прерывания по переполнению мы увеличиваем переменную-счетчик, с которой сравниваем все заданные каналы. И если есть совпадение, то выставляем в порту единичку, а если нету, то нолик.
Когда счетчик досчитал до 256 (обнулился), все сначала начинается...
Получается, если без предделителей таймер пашет, то при 8 МГц тактирования будет 8000000/256/256=122 Гц. Так?
А что будет если совпал у меня счетчик и выставил в порту единицу. А на следующем цикле счетчик увеличился и теперь уже не совпадает, значит сбросит порт в ноль. Какой же это ШИМ? Где-то собака порылась?
Станислав
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
как только совпал - устанавливаем уровень, а сбрасываем все сразу только в момент "переполнения" счетчика
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Все. Понял.
Спасибо огромное! 
Отдельно признателен за оперативность. Не ожидал такой скорости.
Отдельно признателен за оперативность. Не ожидал такой скорости.
Станислав
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
на здоровье. можно еще проверять не на равенство, а на "больше или равно", тогда сбрасывать отдельно ничего не придется - само сбросится, когда счетчик обнулится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Можно обойтись без сравнений, просто выводя из предварительно заполненного буфера.СКАЗОЧНИК писал(а):Теперь хочу обычный софтовый ШИМ на 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- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Сделал так, как Роман (ARV) описал.
Все работает. Переменные Capture1-8 заданы при инициализации.
Теперь мне надо их плавно менять, а у меня все виснет при этом, если их менять в главном цикле, да еще и задержку если поставить.
Посмотрел в симуляторе, если я правильно понял, то у меня на прерывание уходит 64 такта. А т.к. всего у меня между прерываниями есть 240 примерно тактов, то у меня еще есть 176 свободных, чтобы не просрать очередное прерывание?
Как их сделать, чтобы пуеременные менялись где-то?
Спойлер
Код: Выделить всё
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
Теперь мне надо их плавно менять, а у меня все виснет при этом, если их менять в главном цикле, да еще и задержку если поставить.
Посмотрел в симуляторе, если я правильно понял, то у меня на прерывание уходит 64 такта. А т.к. всего у меня между прерываниями есть 240 примерно тактов, то у меня еще есть 176 свободных, чтобы не просрать очередное прерывание?
Как их сделать, чтобы пуеременные менялись где-то?
Станислав
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Флаги то не сохраняете в прерывании.
Если у Вас прерываний других нет, и запрета прерываний в основном теле нет, то оно никак не просрется.СКАЗОЧНИК писал(а): то у меня на прерывание уходит 64 такта. А т.к. всего у меня между прерываниями есть 240 примерно тактов, то у меня еще есть 176 свободных, чтобы не просрать очередное прерывание?
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Маленько не то имел ввиду. )))
Ща, у меня уже что-то получаться начало. Иду в правильном нарпавлении.
Просто получалось, что в главном цикле он успевает сделать столько интераций, что все в итоге выводилось по среднему. Скорость слишком большая. Уже разобрался.
Спасибо. Флаги подправлю, сохранение сделаю.
Все. добился чего хотел. почти.
У меня все значения ШИМ для каналов изменяются плавно, но по кругу (если можно так сказать). Получается что-то в виде бегущего огня, которые плавно нарастают один за другим и также гаснут. Но... у меня все по кругу и поэтому плавно гаснуть получается, а плавно нарастать нет.
Где-то надо начинать переменные в другую сторону крутить? Как это проще сварганить?
Ща, у меня уже что-то получаться начало. Иду в правильном нарпавлении.
Просто получалось, что в главном цикле он успевает сделать столько интераций, что все в итоге выводилось по среднему. Скорость слишком большая. Уже разобрался.
Спасибо. Флаги подправлю, сохранение сделаю.
Все. добился чего хотел. почти.
У меня все значения ШИМ для каналов изменяются плавно, но по кругу (если можно так сказать). Получается что-то в виде бегущего огня, которые плавно нарастают один за другим и также гаснут. Но... у меня все по кругу и поэтому плавно гаснуть получается, а плавно нарастать нет.
Где-то надо начинать переменные в другую сторону крутить? Как это проще сварганить?
Станислав
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
А чем не понравился? И на какой частоте у вас таймер работал?СКАЗОЧНИК писал(а):Короче, что-то мне этот ВАМ не понравился..
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Елки... Я уже и не помню. Помню только что АТМега8 на внутренней 8 МГц. Предделители не помню...
Не понравился
тупой сложностью организации динамической смены яркости.... Т.е. как-то сделал, чтобы яркость по каналам была разная - все получилось и работало. Потом забросил на некоторое время. Потом опять вернулся к изделию, чтобы сделать плавное изменение яркости по каналам и понял, что забыл, как это вообще работает.
Для этого надо было сначала вспомнить, что я там нафигачил...
Вспомнил. А заодно и вспомнил сложности в мерцании на больших задержках. А еще предстояло как-то менять яркости плавненько.
Плюнул на все это и переделал на программный ШИМ. (кстати, разница не сильно большая, но принципиальная). Однако, для моих 7 каналов мне прекрасно хватило.
Как-то так.
Не понравился
Для этого надо было сначала вспомнить, что я там нафигачил...
Плюнул на все это и переделал на программный ШИМ. (кстати, разница не сильно большая, но принципиальная). Однако, для моих 7 каналов мне прекрасно хватило.
Как-то так.
Станислав
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Понятно. А я-то, наоборот, с программного ШИМа решил ВАМ попробовать. Очень уж там частота обновления низкая. А хотелось тоже цепочку из 16 штук динамически позажигать... И "обломался". ВАМ, у меня, по крайней мере, нормально яркости показывал, если таймер, как минимум, на 64 поделить. А это максимум 10 светодиодов, если больше, то уже мерцают. 
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Вообще, ВАМ и надо доделывать. Просто мне стало лень. Перешел на ШИМ. Сделал как мне показалось проще, однако у страха глаза велики, возможно и на ВАМ справился бы еще лучше.

Станислав
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Что ВАМ, что ШИМ не обязательно делать 8-битным, для глаза достаточно и 4-6 бит. У меня на 6-битном ВАМ-е нормально работали 10 RGB-диодов. Хотя с кодом пришлось извращаться.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Да - верно. Делал на 6 битах, не очень понравились анимированные переходы. Сейчас работает линейка из 12 RGB диодов на ВАМе: все 8 бит, 8 мГц с предделителем на 64. 12 диодов еще терпимо для зрения, хотя боковым зрением уже мерцание очень заметно. Больше уже - трындец. Однако, если поднять частоту, то все яркости нивелируются и даже "врут", но мерцание конечно-же исчезает.
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Если для того, чтобы поменять режим изменения яркости, надо вспоминать алгоритм ее регулирования, то похоже что у написанного модуля регулирования яркости плохой интерфейс.Потом опять вернулся к изделию, чтобы сделать плавное изменение яркости по каналам и понял, что забыл, как это вообще работает.
Для этого надо было сначала вспомнить, что я там нафигачил...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
))) До этого мне еще как до луны пешком...
И вообще, надо на Си переходить. Ассемблер хоть и мощная штука, но довольно сильно добавляет времени к разработке нового устройства...
Станислав



