Начал осваивать режим PWM В AVR микроконтроллер tiny2313. Запустить сам режим получилось - микронтроллер-полевик-лампочка, горит как надо. Решил добавить плавное изменение яркости на таймере_1 (PWM на таймере_0) и даже вроде бы работает в симуляторе(AVR Studio), но на устройстве просто горит с начальной предустановкой яркости. Взгляните незамыленным глазом где что упустил или не понял... Код прилагаю (делаю на AVR assembler).
F=8МГц, предделитель на 8.
- Код: Выделить всё
.include "tn2313Adef.inc" ; C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler\Appnotes\tn2313Adef.inc
.def temp=r16
.def temp2=r17
.cseg
.org 0
rjmp RESET ; Reset Handler
nop; rjmp INT0 ; External Interrupt0 Handler
nop; rjmp INT1 ; External Interrupt1 Handler
nop; rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIMER1_COMPA ; Timer1 CompareA Handler
nop; rjmp TIM1_OVF ; Timer1 Overflow Handler
reti ;TIM0_OVF ; Timer0 Overflow Handler
nop; rjmp USART0_RXC ; USART0 RX Complete Handler
nop; rjmp USART0_DRE ; USART0,UDR Empty Handler
nop; rjmp USART0_TXC ; USART0 TX Complete Handler
nop; ANA_COMP ; Analog Comparator Handler
nop; rjmp PCINT0 ; PCINT0 Handler
nop; TIMER1_COMPB ; Timer1 Compare B Handler
reti; TIMER0_COMPA ; Timer0 Compare A Handler
nop; rjmp TIMER0_COMPB ; Timer0 Compare B Handler
nop; rjmp USI_START ; USI Start Handler
nop; rjmp USI_OVERFLOW ; USI Overflow Handler
nop; rjmp EE_READY ; EEPROM Ready Handler
nop; rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
nop; rjmp PCINT1 ; PCINT1 Handler
nop; rjmp PCINT2 ; PCINT2 Handler
;-----------инициализация стека-----------
reset:
ldi temp,ramend
out SPL,temp
;------------инициализация портов----------
ser temp
out ddrd,temp ; порт d на вывод
out ddrb,temp ; порт b на вывод
ser temp
out portd, temp
out portb, temp
;-------------инициализация таймера---------
ldi temp, 0
out OCR1AH, temp
ldi temp, 50
out OCR1AL, temp ;установка времени инкремента кажд 1 сек (4 и 26=)
ldi temp, 240
out OCR0A, temp ;установка начальной точки
ldi temp, 0b11000011
out TCCR0A, temp ;режим fast pwm WGM
clr temp
out tifr, temp ; сбросить флаги прерываний таймеров
ldi temp, 0b01000001 ; разрешаем прерывания канал А и переполнения T0 и A T1
out TIMSK, temp
ldi temp, 0b00000101 ; пуск таймера1 с делением на 1024,
out TCCR1b, temp
ldi temp, 0b00000011 ; пуск таймера0 с делением на 64
out TCCR0b, temp
sei ;Общее разрешение прерываний
;-------------ПРОГРАММА---------------------
main:
rjmp main
TIMER1_COMPA:
in temp, OCR0A
inc temp
out OCR0A, temp
clr temp
out TCNT1H, temp
out TCNT1L, temp
reti