Atmega8 ШИМ OC1A и OC1B в противофазе
Atmega8 ШИМ OC1A и OC1B в противофазе
Здравствуйте. Добрался до атмег.
Встал вопрос, на который не могу найти однозначный ответ. К ногам ОС1А и ОС1В подключается пьезоизлучатель. На этих ногах нужно настроить ШИМ с частотой 4 кГц. Но, чтобы добиться максимальной громкости, нужно пустить ШИМ на эти две ноги в противофазе. Можно ли так сделать? Если да, то ткните носом, как. Кодю на асме
Встал вопрос, на который не могу найти однозначный ответ. К ногам ОС1А и ОС1В подключается пьезоизлучатель. На этих ногах нужно настроить ШИМ с частотой 4 кГц. Но, чтобы добиться максимальной громкости, нужно пустить ШИМ на эти две ноги в противофазе. Можно ли так сделать? Если да, то ткните носом, как. Кодю на асме
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
чтобы добиться максимальной громкости,нужен усилитель, а если нужно выжать максимум при ограниченном напряжении - мостовой усилитель. Простой транзистор включенный по схеме с ОЭ создаст желаемую противофазу. Но если хочется получить инверсию на ОС1А и ОС1В - настройте значение битов COMxx в регистре TCCRViper115 писал(а):...чтобы добиться максимальной громкости, нужно пустить ШИМ на эти две ноги в противофазе
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
.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
Что не так?
.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 в противофазе
Разбирайтесь
Код: Выделить всё
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 MainRe: Atmega8 ШИМ OC1A и OC1B в противофазе
Для получения реакции на выходах нужно их сделать таковыми. Регистры таймера 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
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
И где в вашем листинге собственно включено прерывание TIMER1, которое управляет ШИМ-ом?
Цапу крутить надо!!! Ку или не ку?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
Для аппаратного ШИМ прерывание не нужно. Оно само ШИМится.
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
Z_h_e писал(а):Для аппаратного ШИМ прерывание не нужно. Оно само ШИМится.
Может я, конечно, и ошибаюсь, но аппаратнай ШИМ есть не во всех МК, это во-первых, а во-вторых - объем кода софтового ШИМа, использующего прерывание TIMER1, пожалуй даже меньше объема кода хардверного ШИМа.
Цапу крутить надо!!! Ку или не ку?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
Нет. Он не может быть меньше в принципе. К тому же аппаратный ШИМ не жрет программный ресурс контроллера. Вы его (ШИМ) запустили и он молотит, как собственно любое перифирийное устройство, а программный код занимается своими делами. Например ничем.
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
Ой да ладно... По-Вашему он "молотит" просто так и не расходует такты МК?, Прямо волшебство какое-то...
Цапу крутить надо!!! Ку или не ку?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Atmega8 ШИМ OC1A и OC1B в противофазе
Это "волшебство" было организовано очень давно. В советское время называлось однокристальные микроЭВМ.
В современных цифровых устройствах, ну пускай обычнsй комп x86, видюхи, звуковухи, усарты работают сами, им проц только говорит что сделать... а хотя чего я объясняю. Код проверьте. ТС понравилось.
В современных цифровых устройствах, ну пускай обычнsй комп x86, видюхи, звуковухи, усарты работают сами, им проц только говорит что сделать... а хотя чего я объясняю. Код проверьте. ТС понравилось.
