Atmega8 ШИМ OC1A и OC1B в противофазе

Обсуждаем контроллеры компании Atmel.
Ответить
Viper115
Потрогал лапой паяльник
Сообщения: 364
Зарегистрирован: Сб май 25, 2013 11:52:14

Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Viper115 »

Здравствуйте. Добрался до атмег.
Встал вопрос, на который не могу найти однозначный ответ. К ногам ОС1А и ОС1В подключается пьезоизлучатель. На этих ногах нужно настроить ШИМ с частотой 4 кГц. Но, чтобы добиться максимальной громкости, нужно пустить ШИМ на эти две ноги в противофазе. Можно ли так сделать? Если да, то ткните носом, как. Кодю на асме
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение ChipKiller »

Viper115 писал(а):...чтобы добиться максимальной громкости, нужно пустить ШИМ на эти две ноги в противофазе
чтобы добиться максимальной громкости,нужен усилитель, а если нужно выжать максимум при ограниченном напряжении - мостовой усилитель. Простой транзистор включенный по схеме с ОЭ создаст желаемую противофазу. Но если хочется получить инверсию на ОС1А и ОС1В - настройте значение битов COMxx в регистре TCCR
Viper115
Потрогал лапой паяльник
Сообщения: 364
Зарегистрирован: Сб май 25, 2013 11:52:14

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Viper115 »

.cseg
.org 0
;---------- Вектора прерываний ----------
rjmp PROG
reti; rjmp SUBI_INT0
reti; rjmp SUBI_INT1
reti ; rjmp SUBI_TIMER2_COMPARE
reti ; rjmp SUBI_TIMER2_OVERFLOW
reti ; rjmp SUBI_TIMER1_INPUT
reti ; rjmp SUBI_TIMER1_COMPARE_A
reti ; rjmp SUBI_TIMER1_COMPARE_B
reti ; rjmp SUBI_TIMER1_OVERFLOW
reti ; rjmp SUBI_TIMER0_OVERFLOW
reti ; rjmp SUBI_SPI
reti ; rjmp SUBI_USART_RECEIVE
reti ; rjmp SUBI_USART_DATA_EMPTY
reti ; rjmp SUBI_USART_TRANSMIT
reti ; rjmp SUBI_ADC
reti ; rjmp SUBI_EEPROM
reti ; rjmp SUBI_COMPARATOR
reti ; rjmp SUBI_TWI
reti ; rjmp SUBI_SPM
;----------
;Начало программы
PROG:
ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
cli


ldi r16,(1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)|(1<<WGM11)
out TCCR1A,r16
ldi r16,(1<<CS10)|(1<<WGM12)|(1<<WGM13)
out TCCR1B,r16

ldi r16, 128
OUT OCR1AH,r16
OUT OCR1BH,r16

main:
rjmp Main


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

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Z_h_e »

Разбирайтесь

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

PROG: 
ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
cli


ldi r16, 0b00000110
out DDRB,r16
ldi r16, 0b11111101
out PORTB,r16


ldi r16, 128
OUT OCR1AH,r16
OUT OCR1BH,r16
clr r16
OUT OCR1AL,r16
OUT OCR1BL,r16

ldi r16,(0<<COM1A1)|(1<<COM1A0)|(0<<COM1B1)|(1<<COM1B0)|(1<<WGM10)|(1<<WGM11)
out TCCR1A,r16
ldi r16,(1<<CS10)|(1<<WGM12)|(1<<WGM13)
out TCCR1B,r16



main:
rjmp Main
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение akl »

Для получения реакции на выходах нужно их сделать таковыми. Регистры таймера 1 16-тиразрядные и для них существует специальная процедура установки. Разберитесь с режимами PWM.
Спойлер

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

ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
cli

   LDI   R16,0b00000110
   OUT   DDRB,R16

   CLR   R15
   ldi r16, 128
   OUT OCR1AH,r15
   OUT OCR1AL,r16

   OUT OCR1BH,r15
   OUT OCR1BL,r16

ldi r16,(1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)
;ldi r16,(1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)|(1<<WGM11)
out TCCR1A,r16
   ldi r16,(1<<CS10)|(1<<WGM12)
out TCCR1B,r16

;ldi r16, 128
;OUT OCR1AH,r16
;OUT OCR1BH,r16

main:
rjmp Main
Viper115
Потрогал лапой паяльник
Сообщения: 364
Зарегистрирован: Сб май 25, 2013 11:52:14

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Viper115 »

Спасибо
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Igor_67 »

И где в вашем листинге собственно включено прерывание TIMER1, которое управляет ШИМ-ом?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Z_h_e »

Для аппаратного ШИМ прерывание не нужно. Оно само ШИМится.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Igor_67 »

Z_h_e писал(а):Для аппаратного ШИМ прерывание не нужно. Оно само ШИМится.

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

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Z_h_e »

Нет. Он не может быть меньше в принципе. К тому же аппаратный ШИМ не жрет программный ресурс контроллера. Вы его (ШИМ) запустили и он молотит, как собственно любое перифирийное устройство, а программный код занимается своими делами. Например ничем.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Igor_67 »

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

Re: Atmega8 ШИМ OC1A и OC1B в противофазе

Сообщение Z_h_e »

Это "волшебство" было организовано очень давно. В советское время называлось однокристальные микроЭВМ.

В современных цифровых устройствах, ну пускай обычнsй комп x86, видюхи, звуковухи, усарты работают сами, им проц только говорит что сделать... а хотя чего я объясняю. Код проверьте. ТС понравилось.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

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