0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
1 | |
algorithm builder работа с таймером21.05.2020, 19:24. Просмотров 1563. Ответов 18
Здравствуйте , работаю в algorithm builder, кристалл AT90S8515. Как лучше реализовать задержку с помощью прерывания по таймеру? Например: паузу в n секунд. Может у кого есть ссылка на литературу? Много искал, но ничего толкового не находил.
0
|
|
21.05.2020, 19:24 | |
Опрос DS18B20 (ATmega328P, Algorithm Builder) Изменение порогов срабатывания аквариумного терморегулятора на ATmega8A-AU (Algorithm Builder) |
|
Модератор
![]() ![]() 4133 / 3656 / 653
Регистрация: 07.10.2015
Сообщений: 7,525
|
|
21.05.2020, 19:29 | 2 |
VODOLAZ47, да чего искать-то? Все просто... Таймер зарядить на, допустим, 10 мс.
В таймере считать прерывания. 100 прерываний = 1 сек. Если надо, можно ввести еще один счетчик - секунд, или использовать два байта.
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
21.05.2020, 21:31 [ТС] | 3 |
Ну так в этом и есть проблема, не совсем доходит как это оформляется, например у меня есть СК=8МГц, настройки таймера (рис. первый слева), подпрограмма прерываний (рис. нижний), учитывая (рис. правый сверху). Я получу задержку в 1 секунду?
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
21.05.2020, 23:17 [ТС] | 4 |
Все разобрался, взял overflow 8192 nanosec=0.008192 sec, 1/0.008192=122, и начал в тупую считать прерывания.
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
21.05.2020, 23:24 [ТС] | 5 |
Ещё осталось разобраться, как сделать эту же секунду без прерываний пробовал привязываться к частоте кристалла 8 МГц, сделал мини счетчик из 2 команд, в отладчике они занимали 6.25 мкс, я просто перевел в секунды и 1 разделил на то что перевел: 1/6.25*(10^-6)=160 000 раз, должен выполниться цикл. Если другие варианты?
0
|
Тутошний я
|
|
23.05.2020, 03:23 | 7 |
![]() Решение
не разобрался.
время задержки * тактовую частоту / коэффициент деления таймера 1 с * 8000000 Гц / 256 = 31250 или 7А12 FFFF - 7A12 = 85ED заносим в TCNT1 Добавлено через 8 минут ах да. предделитель таймера выбираем, чтоб период переполнения был больше нужной нам задержки. можно было выбрать и 1024. но там значение с дробью получается.
1
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
23.05.2020, 11:33 [ТС] | 8 |
Почему вычитаем из FFFF, если взять таймер без Kд или с Kд=8, получится отрицательное число.
Добавлено через 6 минут Почему вычитаем из FFFF, если взять таймер без Kд или с Kд=8, получится отрицательное число.
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,474
|
|
23.05.2020, 11:49 | 9 |
потому что таймер считает вверх
досчитает до 0xFFFF следующий тик 0x0000 и происходит прерывание если записать 1 то пройдет 65535 тиков а если 0xFFFE то всего 2 Добавлено через 2 минуты вообще то вычитать нужно из 0 ![]()
1
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
23.05.2020, 12:45 [ТС] | 10 |
Я совсем запутался , так как мне тогда считать? Я считаю прерывания например: Если CK без коэфф деления, нужно примерно посчитать 122 тика( 8192 наносекунды, в 1/0.008192=122), а TCNT1 как считать?
P.S. Для 1 секунды
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
23.05.2020, 14:12 [ТС] | 11 |
С коэффициентом делением 256 и частотой кристалла 8 МГц. Получаем , время 1 такта 1/8МГц/256=32мкс. Нужный код=65536- 1с/32мкс=34286= 85EE. Я правильно понял, что тогда прерывание по таймеру сработает через 31 250 тактов ( 1 такт 32мкс) , что будет соответствовать 1 секунде?
А если я хочу без коэфф деления, то при расчете на секунду получается отрицательно число, значит нужно разбить так чтобы, например 1 секунды составляли 2 прерываниям таймера?. И ещё , кто знает в стандартных настройках таймера( как на скриншоте), прерывание срабатывает раз в 8192 наносек? Тогда мне не нужно как-то менять TMNT1. В протеусе моделил , вроде работает нормально.
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
23.05.2020, 15:19 [ТС] | 13 |
0
|
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
|
|
23.05.2020, 17:08 [ТС] | 15 |
0
|
Тутошний я
|
|
23.05.2020, 19:16 | 16 |
я ж написал, период переполнения таймера должен быть больше чем чем нужная нам задержка.
для 1 с можно только или 256 или 1024. Добавлено через 9 минут да. Добавлено через 47 минут TCNT1 двух байтный. только до FFFF.
1
|
Grey
|
23.05.2020, 19:29
#18
|
0
|
Модератор
![]() 8329 / 6181 / 829
Регистрация: 14.02.2011
Сообщений: 21,474
|
|
23.05.2020, 19:38 | 19 |
0
|
23.05.2020, 19:38 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Pinboard II + Algorithm builder Algorithm Builder for AVR Algorithm Builder. Графическая среда для разработки ПО для МК AVR Работа с таймером Работа с таймером Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |