Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Одинаково настроенные таймеры генерируют прерывания с разной частотой?


Одинаково настроенные таймеры генерируют прерывания с разной частотой?

Сообщений 1 страница 4 из 4

1

Добрый день, друзья.
Обратил внимание, что когда настраиваю Timer1 по совпадению, он работает адекватно и я могу вычислить с какой периодичностью у меня будет происходить прерывание, а Timer0 нет. Помогите разобраться.

Код написан для примера:

Код:
$regfile = "attiny167.dat"
$crystal = 8000000

Config Porta = Output

Config Timer1 = Timer , Prescale = 1024 , Clear Timer = 1   
Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1   ' 1024/8 000 000 * 1000 = 0,128 ms

On Oc1a Step1
On Oc0a Step0

Dim Test1 As Byte
Dim Count1 As Byte
Dim Test0 As Byte
Dim Count0 As Byte

Led1 Alias Porta.0
Led0 Alias Porta.2

Ocr1a = 195                                                
Ocr0a = 195

Enable Interrupts
Enable Oc1a
Enable Oc0a


Do

If Count1 < 40 Then : Test1 = 1 : Else : Test1 = 0 : End If

If Count1 > 80 Then : Count1 = 0 : End If

Select Case Test1
   Case 0 : Led1 = 1
   Case 1 : Led1 = 0
End Select



If Count0 < 40 Then : Test0 = 1 : Else : Test0 = 0 : End If

If Count0 > 80 Then : Count0 = 0 : End If

Select Case Test0
   Case 0 : Led0 = 1
   Case 1 : Led0 = 0
End Select

Loop


Step1:

   Incr Count1

Return

Step0:

   Incr Count0

Return

Сложные конструкции сделаны для того, что бы 8-ми битный таймер можно было использовать для длительных временных интервалов.

Если я правильно понимаю логику этого дела, то диод должен гореть примерно секунду и секунду не гореть (0,128 мс * 195 * 40 = 998,4 мс)
И диод которым управляет Таймер1 так и моргает, а диод с Таймером0 моргает раз в восемь чаще (но не ровно в восемь)

Подскажите, что я делаю не так. Спасибо

0

2

Mrshilov написал(а):

Ваш код на Меге16 работает без ошибок - светики зажигаются/тухнут синхронно. Возможно проблема с дат-файлом, попробуйте задать параметры регистров таймера0 вручную.


Спасибо большое.
Знать бы ещё, где прочитать, как это сделать... ;)

0

3

Mrshilov написал(а):

В даташите есть все регистры: http://www.atmel.com/Images/Atmel-8265- … asheet.pdf
О проблемах с таймерами в Тиньках Марк уже писал. Лично я столкнулся с этим в Тини45/85 - таймер1 вообще не работал, пришлось настраивать вручную регистрами. Значит теперь еще и Тини87/167 в этот список вошла.


Прошу прощения за некорректный вопрос. И спасибо.
Конечно надо было сначала почитать даташит, а потом уточнить непонятные вещи.

Итак, если я правильно интерпретировал страницы 100 - 102 даташита, то

Код:
TCCR0A = &B10000010  ' CTC & Clear OC0A on Compare Match
TCCR0B = &B00000111  '1024 prescaler

соответствует в Баскоме

Код:
Prescale = 1024 , Clear Timer = 1

Правильно?
но не понял как регистрами задать

Код:
Config Timer0 = Timer

И надо ли?

И еще правильно ли я понимаю, что задав соответствующие регистры, саму строчку

Код:
Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1

писать уже не надо?

Отредактировано evgen.kostin (2015-06-10 14:30:12)

0

4

Mrshilov написал(а):

"Config Timer0 = Timer" задается в регистре ASSR.


А я подозревал ASSR.

Спасибо большое за помощь, буду пробовать.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Одинаково настроенные таймеры генерируют прерывания с разной частотой?