[an error occurred while processing this directive]
|
Суть проблемы в том, что в какой-то момент нужно изменить текущее значение таймера-счетчика. В случае если новое значение будет меньше чем текущее, то импульс возникающий по совпадению сформируется позже. Если новое значение больше чем текущее, то импульс сформируется раньше... Таким макаром я собираюсь подстраивать фазу этого импульса. Частота же его четко задана регистром ICR1 ....
Теперь код:
Изначально таймер сконфигурирован для работы
в СТС режиме и простаивает:ldi TEMPL,(1<
out TIMSK,TEMPL
ldi TEMPL,0
out TCCR1A,TEMPL
out TCCR1C,TEMPL
ldi TEMPL,(1<out TCCR1B,TEMPL
ldi TEMPH,4
ldi TEMPL,255
out OCR1AH,TEMPH
out OCR1AL,TEMPL
ldi TEMPH,1
ldi TEMPL,250
out TCNT1H,TEMPH
out TCNT1L,TEMPLЗатем мы его запускаем:
ldi TEMPL, (1<
out TCCR1B,TEMPL Пока все в порядке, но потом мне нужно сменить режим на
FastPWM и убрать фазовую ошибкуcli
ldi TEMPL,1<out TIMSK,TEMPL
ldi TEMPL,(1<out TCCR1A,TEMPL
ldi TEMPL,(1<out TCCR1B,TEMPL
ldi TEMPH,4
ldi TEMPL,255
out ICR1H,TEMPH
out ICR1L,TEMPL
ldi TEMPH,4
ldi TEMPL,40
out OCR1AH,TEMPH
out OCR1AL,TEMPL
ldi TEMPH,1
ldi TEMPL,80
out TCNT1H,TEMPH
out TCNT1L,TEMPL
ldi TEMPL,(1<out TCCR1B,TEMPL
ldi TEMPL,232
out TIFR,TEMPL
sei
З.Ы.
Мораль - нефиг по воскресеньям работать
E-mail: info@telesys.ru