[an error occurred while processing this directive] [an error occurred while processing this directive]
Вопрос к Atmel'овским джедаям: сбои ТС1 в режиме совпадения.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Ivan.K 12 мая 2002 г. 08:54

Счетчик ТС1 работает в режиме совпадения так, что на выходах ОС1А и ОС1В получается меандр с частотой ОС1А и сдвигом фазы ОС1В (оба выхода работают на переключение со сбросом в 0 по совпадению).
Изменяется только сдвиг фазы ОС1В. Модификация регистра ОС1А не производится (постоянная частота), ОС1В - только в программе прерывания (адрес $007). В порт D никакие посторонние данные программно не выводятся. Аппаратно работает UART(постоянно) и ОС2 (эпизодически). Все ERRAT'ы читал (но, может, не понял :).
Вот фрагменты инициализации:
ldi temp, 0b10111010 ;pd1,3,4,5,7 - вывод
out DDRD, temp
ldi temp, 0b01001110 ;подтянуть pd2
out portd, temp
.......
ldi temp, 0b01010000 ;ОС1А,ОС1В-переключение
out TCCR1A, temp
ldi temp, 0b01001001 ;сброс в 0 по совпадению,СК
out TCCR1B, temp ;захват по фронту OC1B
ldi temp, 0b00111001
out TIMSK, temp ;прерыв.OC1A,ОС1B,ICP и TOV0

К INT0 подключена кнопка. Нажатие на нее никак не влияет на ОС.

Проблема вот в чем: периодически, при включении, меняется фаза ОС1А и ОС1В, несмотря на то, что при инициализации я использую спец.программу для установки ног в желаемое положение:
clr temp
out TIMSK, temp ;запретить OC1A,ОС1B и TOV0
ldi Zh, 00
ldi Zl, 02
out TCNT1H, Zh
out TCNT1L, Zh ;уст T/C1 в 0
out OCR1BH, Zh
out OCR1BL, Zl ;задать сдвиг фазы ТС1
ldi Zl, 03
out OCR1AH, Zh
out OCR1AL, Zl ;задать частоту ТС1
ldi temp, 0b10100000
out TCCR1A, temp ;ОС1А в 0,ОС1В в 0
ldi temp, 0b00000001
out TCCR1B, temp ;СК/1
nop
nop
nop
nop
nop
nop
nop ;ноги ОС1А и ОС1В установлены
.............
А иначе никак - эти долбаные триггеры напрямую недоступны (хохма - Студия их устанавливает командой "SBI pinD, 5").

Вопрос вот какой - может, я где-то ошибся; может, есть более правильное решение; может, кто знает, отчего они кидаются, - помогите !!!

Еще проблема: выходы ОС1В и ICP соединены. Задействовано прерывание по входу захвата - именно для анализа фазы. Это прерывание устанавливает флаг для контроля за фазой. Флаг перекидывается, фаза выводится на экран компа - но иногда ICP не срабатывает, иногда врет. Вот фрагмент анализатора:
testf: in stk_oc, SREG
;************************************
push temp
in temp, pinD
sts tmp5, temp
pop temp
;************************************
sbic pinD, 5 ;тестировать фазу ОС1А
rjmp tesn ;-в норме
cbr Flag, invert ;флаг ошибки фазы
out SREG, stk_oc
reti
tesn: sbr Flag, invert ;флаг ошибки фазы
out SREG, stk_oc
reti

Фрагмент в звездочках - это вывод данных из камня на комп через UART (типа JTAG, я так всегда делаю, когда место во флеше есть). Так что увидеть все это я должон, ВСЕ остальное работает нормально - на компе видно.

Вот такие проблемсы...

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru