Не могу настроить 2-ух канальный аппаратный ШИМ на Attiny13
Добавлено: Сб мар 01, 2014 23:54:33
Уважаемым котам большой привет, помогите начинающему освоить AVR.
Сам пишу на ассемблере. Нужно организовать 2-ух канальный аппаратный ШИМ на Attiny13 на выводах OC0A и OC0B. ШИМ на них нужен инверсный один относительно другого.
Пишу в OCR0A и OCR0B одно и то-же значение с ADCH, но имею в итоге ШИМ только на OC0B, на канале OC0A мертвый ноль.
Грешил на сожженый после переполюсовки МК, но на новом МК история та-же. Подключаю на макетке через переходник:
В настройкафф пишу:
В регистры OCR0A OCR0B пишу одно и то-же значение из регистра АЦП ADCH, требуется запустить их в противофазе. Настраиваю ШИМ на режим точной фазы. Устанавливаю в TCCR0A инверсную работу выходов: 0b11100001 в TCCR0B пишу 0b00000011. Порты PB0, PB1 настраиваю на выход: DDRB.1 в 1 и DDRB.0 в 1.
По идее, оба канала ШИМ должны работать в противофазе (с учетом, что OCR0A=OCR0B у меня). Подскажите чайнику куда копать, где накошачил?))
Листинг программы:
Сам пишу на ассемблере. Нужно организовать 2-ух канальный аппаратный ШИМ на Attiny13 на выводах OC0A и OC0B. ШИМ на них нужен инверсный один относительно другого.
Пишу в OCR0A и OCR0B одно и то-же значение с ADCH, но имею в итоге ШИМ только на OC0B, на канале OC0A мертвый ноль.
Грешил на сожженый после переполюсовки МК, но на новом МК история та-же. Подключаю на макетке через переходник:
В настройкафф пишу:
В регистры OCR0A OCR0B пишу одно и то-же значение из регистра АЦП ADCH, требуется запустить их в противофазе. Настраиваю ШИМ на режим точной фазы. Устанавливаю в TCCR0A инверсную работу выходов: 0b11100001 в TCCR0B пишу 0b00000011. Порты PB0, PB1 настраиваю на выход: DDRB.1 в 1 и DDRB.0 в 1.
По идее, оба канала ШИМ должны работать в противофазе (с учетом, что OCR0A=OCR0B у меня). Подскажите чайнику куда копать, где накошачил?))
Листинг программы:
- .Include "tn13Adef.inc"
.def temp1=R16
.def AD=R19
.CSEG
.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp PC_INT0 ; PCINT0 Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TIM0_COMPA ; Timer0 CompareA Handler
rjmp TIM0_COMPB ; Timer0 CompareB Handler
rjmp WATCHDOG ; Watchdog Interrupt Handler
rjmp ADCON ; ADC Conversion Handler
EXT_INT0: ; IRQ0 Handler
PC_INT0: ; PCINT0 Handler
TIM0_OVF: ; Timer0 Overflow Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TIM0_COMPA: ; Timer0 CompareA Handler
TIM0_COMPB: ; Timer0 CompareB Handler
WATCHDOG: ; Watchdog Interrupt Handler
;ADCON
reti
RESET: ldi r16, low(RAMEND); Main program start
out SPL,r16 ; Set Stack Pointer to top of RAM
ldi temp1,0b11100001 ; ШИМ А инверсный, ШИМ В прямой
out TCCR0A,temp1 ; вкл оба ШИМ, режим точной фазы
ldi temp1,0b00000011 ; уст. Кдел таймеров=64 ШИМ 20Гц
out TCCR0B,temp1
;cbi PORTB,2
sbi DDRB,1
sbi DDRB,0
ldi temp1,0b00111100
out DIDR0,temp1
ldi temp1,0b00100011 ; включаем ADC3
out ADMUX,temp1
ldi temp1,0b10001000 ; активно прерывание Кдел=2
out ADCSRA,temp1
sei ; Enable interrupts
;============== ПРОГРАММА=================
START: sbi ADCSRA,6
WAIT: sbic ADCSRA,6
rjmp WAIT
out OCR0A,AD
out OCR0B,AD
rjmp START
;==============ОБРАБОТКА ПРЕРЫВАНИЯ ADC====
ADCON: in AD,ADCH
reti