Пожалуйста помогите чайнику с Binary Angle Modulation

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение ARV »

YS писал(а):Верно?
да
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

Да, примерно так и понял уже. ))) У Ys написано как-то с позиции RTOS. :))) :)))

Так и выходит. 7 прерываний. Сравниваем с заданными числами каждого канала. Где совпали единички, там и выставляем 1 в порту (ну или чего нам там надо), и наоборот. В итоге все каналы сравниваются/обрабатываются одновременно, а прерываний всего семь.
Станислав
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение Z_h_e »

Тогда мне объясняйте. Как семь? Разве не восемь за период?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

Восемь точно. :facepalm: :))) . ))) Единичек же в байте 8. (простите, я уже до 8 считать разучился :oops: )
А мы тупо загнали единичку в старший разряд, сверились с назначенными в портах и если там тоже есть единички, то выставили в портах единички. Потом этот с единичкой байт пихаем в таймер. Отсчитал таймер и сделал прерывание. А мы единичку сдвинули и опять со всеми сравнили, где надо в портах выставили. Потом опять в регистр сравнения и дальше таймер, отсчитали еще 64 тика, опять прерывание. и т.д.
Станислав
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение YS »

Бит в байте восемь, но нумеруются они традиционно начиная с нуля. :wink: Потому восьмой бит имеет номер семь.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

YS писал(а):Потому восьмой бит имеет номер семь.
Точно! Так я и хотел сказать. 8) :)))

Предлагаю в этой теме выкидывать исходники, если кто пытался использовать ВАМ. Чуть позже выложу свой.
Станислав
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение Z_h_e »

Вот цитата из статьи, ссылку на которую указал ТС в самом начале поста.
но при этом у нас всего 7 прерываний на любое число каналов.
Тут явно указано количество, а не нумерация.
Я так понимаю, тут двойная неточность. На самом деле прерывание одно и восемь раз за период. Вся экономия BAM в отличие от программного ШИМ в том, что количество прерываний на период меньше, что конечно может быть очень существенным плюсом. Однако, если не нужна очень плавная регулировка, то можно период разбить на те же 8, но уже равных частей. Такой алгоритм будет затрачивать теже ресурсы МК на одно и тоже количество каналов.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

Получается один тип прерывания по совпадению с счетным регистром таймера... За один период ВАМ их происходит 8. От самого длинного, до короткого. Формируя этими прерываниями любое число для заполнения периода ВАМ (от 0 до 255).
С проблемой того, что в самых коротких прерываниях (на мелких числах), МК больше всего загружен, в статьях рекомендуется делать вычисления (любые другие) в периодах между ДЛИННЫМИ прерываниями.
Если, действительно не нужна большая точность, можно выровнять эти отрезки, как вы и предлагаете. (Действительно хорошая идея). Можно также сократить количество этих отрезков и прерываний сделать меньше (если надо, например, всего 4 уровня (градации)).
Станислав
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение Z_h_e »

Эта хорошая идея - обычный ШИМ :).
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение Z_h_e »

СКАЗОЧНИК писал(а):Предлагаю в этой теме выкидывать исходники, если кто пытался использовать ВАМ.
От безделья накидал кодик для Атмеги8 на весь порт D. В протеусе работает.
Спойлер

Код: Выделить всё

.def BAM0=R0
.def BAM1=R1
.def BAM2=R2
.def BAM3=R3
.def BAM4=R4
.def BAM5=R5
.def BAM6=R6
.def BAM7=R7

 .org 0
rjmp  RESET ; Reset Handler
	reti//rjmp EXT_INT0 ; IRQ0 Handler
	reti//rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
	reti//rjmp TIM2_OVF ; Timer2 Overflow Handler              
	reti//rjmp TIM1_CAPT ; Timer1 Capture Handler
	reti//rjmp TIM1_COMPA ; Timer1 CompareA Handler
	reti//rjmp TIM1_COMPB ; Timer1 CompareB Handler
	reti//rjmp TIM1_OVF ; Timer1 Overflow Handler
	reti//rjmp TIM0_OVF ; Timer0 Overflow Handler          
	reti//rjmp SPI_STC ; SPI Transfer Complete Handler
	reti//rjmp USART_RXC ; USART RX Complete Handler			
	reti//rjmp USART_UDRE ; UDR Empty Handler
	reti//rjmp USART_TXC ; USART TX Complete Handler         
	reti//rjmp ADC ; ADC Conversion Complete Handler
	reti//rjmp EE_RDY ; EEPROM Ready Handler
	reti//rjmp ANA_COMP ; Analog Comparator Handler
	reti//rjmp TWSI ; Two-wire Serial Interface Handler
	reti//rjmp SPM_RDY ; Store Program Memory Ready Handler

TIM2_COMP:

	in R17,OCR2 //канал 0
	AND R17,BAM0
	breq PC+2
	sbi PORTD,0
	brNE PC+2
	cbi PORTD,0

	in R17,OCR2 //канал 1
	AND R17,BAM1
	breq PC+2
	sbi PORTD,1
	brNE PC+2
	cbi PORTD,1

	in R17,OCR2 //канал 2
	AND R17,BAM2
	breq PC+2
	sbi PORTD,2
	brNE PC+2
	cbi PORTD,2

	in R17,OCR2 //канал 3
	AND R17,BAM3
	breq PC+2
	sbi PORTD,3
	brNE PC+2
	cbi PORTD,3

	in R17,OCR2 //канал 4
	AND R17,BAM4
	breq PC+2
	sbi PORTD,4
	brNE PC+2
	cbi PORTD,4

	in R17,OCR2 //канал 5
	AND R17,BAM5
	breq PC+2
	sbi PORTD,5
	brNE PC+2
	cbi PORTD,5

	in R17,OCR2 //канал 6
	AND R17,BAM6
	breq PC+2
	sbi PORTD,6
	brNE PC+2
	cbi PORTD,6

	in R17,OCR2 //канал 7
	AND R17,BAM7
	breq PC+2
	sbi PORTD,7
	brNE PC+2
	cbi PORTD,7


	in R17,OCR2	//сдвиг регистра сравнения
	lsl R17
	brne PC+2
	ldi R17,0x01
	out OCR2,R17	

	reti

RESET:  //	
	cli

	ldi R16,low(RAMEND) // указатель стека в конец памяти
	out spl,R16
	ldi R16,High(RAMEND) 
	out sph,R16

	
	ldi R16,0x2A  //значения каналов BAM
	mov BAM0,R16
	ldi R16,0x02
	mov BAM1,R16
	ldi R16,0x04
	mov BAM2,R16
	ldi R16,0x08
	mov BAM3,R16
	ldi R16,0x10
	mov BAM4,R16
	ldi R16,0x20
	mov BAM5,R16
	ldi R16,0x40
	mov BAM6,R16
	ldi R16,0x80
	mov BAM7,R16
	
	ldi R16,0			//Порт Д
	out PORTD,r16
	ldi R16,0xFF
	out DDRD,R16


	ldi R16,0x01 //регистр сравнения
	out OCR2,R16

	ldi R16,1<<PSR2 //сброс предделителя
	out SFIOR,R16	

	ldi R16,1<<OCIE2 //прерывание сравнение
	out TIMSK,R16

	ldi R16, (1<<CS22)+(1<<CS21)+(1<<CS20)+(1<<WGM21)+(0<<WGM20) //источник тактирования
	out TCCR2,R16

	sei

loop:
	rjmp loop

Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

я думаю немного не так прерывание написать. :) Выложу попозже.
Станислав
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение GARMIN »

Попробую немного подсказать. Пару лет назад я вовсю делал рекламу на ATTINY2323.
На любое количество каналов. Вначале на аппаратном ШИМ, когда не хватило каналов - на программном ШИМ. Использовал все ножки - 16 каналов.
Не хватало производительности - использовал BAM. Когда наткнулся на проблему моргания 7F->80, то немного модифицировал BAM. Это помогло избавиться от мерцания. Даже написал небольшой интерпретатор для быстрой настройки эффектов.
Всё это было выложено в блоге: http://sova-audio.blogspot.com/2013/11/attiny2313.html
Посмотрите, возможно вам пригодится.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

Вот что значит прилипнуть к одному контроллеру... В Меге8 че, нету регистра сравнения для таймера0?
Станислав
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение akl »

СКАЗОЧНИК писал(а):В Меге8 че, нету регистра сравнения для таймера0?
Нетути. :facepalm:
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

Блин. Ну и жопа. Нафиг. Опять переворачивать даташиты. Нахрен так сделали все по разному... ?! Брошу нафиг эти микроконтроллеры.


З.Ы. Спасибо. :beer:
Станислав
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение COKPOWEHEU »

Код: Выделить всё

TIM2_COMP:

   in R17,OCR2 //канал 0
   AND R17,BAM0
   breq PC+2
   sbi PORTD,0
   brNE PC+2
   cbi PORTD,0
А чего SREG и РОН не сохраняете?
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение СКАЗОЧНИК »

А зачем, если он только в прерывании и используется? Программа тестовая и больше ничего не выполняет. :dont_know:
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение ILYAUL »

ARV писал(а):чтобы реализовать многоканальный ШИМ на одном таймере, обычно вы заводите 8 переменных, .......
http://embedders.org/blog/fk0/nuzhen-li ... lerom.html
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение COKPOWEHEU »

И вы гарантируете, что это прерывание не будет скопировано в другие проекты? Какой вообще смысл от выставления заранее заданной яркости заранее заданным диодам? Тогда уж проще резисторы соответствующие подобрать.
Куда вероятнее, что яркость будет где-то меняться. Либо в другом прерывании, либо в основном цикле.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пожалуйста помогите чайнику с Binary Angle Modulation

Сообщение ARV »

ILYAUL писал(а):
ARV писал(а):чтобы реализовать многоканальный ШИМ на одном таймере, обычно вы заводите 8 переменных, .......
http://embedders.org/blog/fk0/nuzhen-li ... lerom.html
вот это сейчас к чему было процитировано?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»