Таймер_1 tiny25
Доброго времени суток уважаемые форумчане!
Помогите пожалуйста разобраться с таймером Tiny25.
Встречал подобную проблему на других форумах, но люди пишут, что программа стала криво. У меня все хуже. Пробовал на трех разных машинах - результат один и тот-же...
Итак суть проблемы.
Использую Attiny25, пишу в AVR Studio (последняя версия с сервис паками)...
ТС0 использую под протокол 1-Wire, с ним все в порядке, работает как нужно. А вот ТС1 не запускается. На зарубежных форумах вычитал рекомендации использовать AVR Simulator2. Попробовал, да, в нем таймер запускается, но возникают проблемы с прерываниями, INT0 работает не правильно (срабатывает по любому изменению на входе, а не по спаду, как нужно), биты в порте В как то не так становятся, в общем полный геморрой. Кроме того, в самом счетчике ТС1 не очищается счетный регистр TCNT1, непонятки при попытке сбросить предделитель бит PSR1 в регистре GTCCR, и т.д.
В железе пока не воплощал. Грешу на косяки AVR Studio. Может кто что еще подскажет полезного.
Вот кусок кода.
Всем зареннее спасибо.
; === Инициализация таймер 1
outi OCR1A,TI ; в канал А время импульса запуска симистора
out OCR1B,calc_brigh ; в канал В время до включения симистора
* * *
; === Запуск ТС1
sbrp TIMSK,(1‹‹OCIE1A) ; разрешаем прерывание по совпадению канал А
sbrp TCCR1,(1‹‹CS12) ; запускаем ТС1 с предделителем 8
VS_On ; включить оптопару
* * *
; === Перезапуск ТС1
clri TCCR1 ; останавливаем ТС1
clri TCNT1 ; сбрасываем ТС1
cbrp TIMSK,(1‹‹OCIE1А) ; запрещаем прерывание по совпадению канал А
sbrp TIFR,(1‹‹OCF1В) ; сбрасываем флаг совпадения канал В
sbrp TIMSK,(1‹‹OCIE1В) ; разрешаем прерывание по совпадению канал В
sbrp TCCR1,(1‹‹CS12) ; запускаем ТС1 с предделителем 8
* * *
; === Остановка ТС1
clri TCCR1 ; останавливаем ТС1
clri TCNT1 ; сбрасываем ТС1
VS_Off ; выключаем оптопару
|