Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
1

algorithm builder работа с таймером

21.05.2020, 19:24. Просмотров 912. Ответов 18

Здравствуйте , работаю в algorithm builder, кристалл AT90S8515. Как лучше реализовать задержку с помощью прерывания по таймеру? Например: паузу в n секунд. Может у кого есть ссылка на литературу? Много искал, но ничего толкового не находил.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2020, 19:24
Ответы с готовыми решениями:

Задача в Algorithm Builder
К порту D микроконтроллера подключены кнопки (7 шт). Нажатие кнопки должно обеспечить...

Algorithm Builder. Процедура Pause
Добрый день! Помогите, пожалуйста, откорректировать процедуру Pause. Необходимо увеличить паузу...

Опрос DS18B20 (ATmega328P, Algorithm Builder)
Добрый день. Срочно нужно сделать датчик температуры. За основу взял DS18B20 и Arduino nano...

Изменение порогов срабатывания аквариумного терморегулятора на ATmega8A-AU (Algorithm Builder)
Собрал вот такой терморегулятор http://pakhom.weebly.com/r10-2012.html Всё работает без проблем,...

18
Модератор
3342 / 2702 / 488
Регистрация: 07.10.2015
Сообщений: 5,781
Завершенные тесты: 1
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
Миниатюры
algorithm builder работа с таймером   algorithm builder работа с таймером  
Изображения
 
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
21.05.2020, 23:17  [ТС] 4
Все разобрался, взял overflow 8192 nanosec=0.008192 sec, 1/0.008192=122, и начал в тупую считать прерывания.
0
Миниатюры
algorithm builder работа с таймером  
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
Тутошний я
1824 / 973 / 178
Регистрация: 03.11.2009
Сообщений: 3,216
Записей в блоге: 2
23.05.2020, 02:34 6
макросы для аппаратной задержки, не зависимо от тактовой частоты.
0
Вложения
Тип файла: zip Waitings.zip (926 байт, 2 просмотров)
Тутошний я
1824 / 973 / 178
Регистрация: 03.11.2009
Сообщений: 3,216
Записей в блоге: 2
23.05.2020, 03:23 7
Лучший ответ Сообщение было отмечено VODOLAZ47 как решение

Решение

Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
Все разобрался
не разобрался.
время задержки * тактовую частоту / коэффициент деления таймера
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 минут
Цитата Сообщение от Grey Посмотреть сообщение
не разобрался.
время задержки * тактовую частоту / коэффициент деления таймера
1 с * 8000000 Гц / 256 = 31250 или 7А12
FFFF - 7A12 = 85ED заносим в TCNT1

Добавлено через 8 минут
ах да. предделитель таймера выбираем, чтоб период переполнения был больше нужной нам задержки.
можно было выбрать и 1024. но там значение с дробью получается.
Почему вычитаем из FFFF, если взять таймер без Kд или с Kд=8, получится отрицательное число.
0
Модератор
8132 / 6008 / 798
Регистрация: 14.02.2011
Сообщений: 20,749
Завершенные тесты: 1
23.05.2020, 11:49 9
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
Почему вычитаем из FFFF,
потому что таймер считает вверх
досчитает до 0xFFFF следующий тик 0x0000 и происходит прерывание
если записать 1 то пройдет 65535 тиков а если 0xFFFE то всего 2

Добавлено через 2 минуты
Цитата Сообщение от Grey Посмотреть сообщение
FFFF - 7A12
вообще то вычитать нужно из 0 если по твоей схеме то нужно добавить 1
1
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
23.05.2020, 12:45  [ТС] 10
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что таймер считает вверх
досчитает до 0xFFFF следующий тик 0x0000 и происходит прерывание
если записать 1 то пройдет 65535 тиков а если 0xFFFE то всего 2

Добавлено через 2 минуты

вообще то вычитать нужно из 0 если по твоей схеме то нужно добавить 1
Я совсем запутался , так как мне тогда считать? Я считаю прерывания например: Если 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
Цитата Сообщение от ValeryS Посмотреть сообщение
потому что таймер считает вверх
досчитает до 0xFFFF следующий тик 0x0000 и происходит прерывание
если записать 1 то пройдет 65535 тиков а если 0xFFFE то всего 2

Добавлено через 2 минуты

вообще то вычитать нужно из 0 если по твоей схеме то нужно добавить 1
С коэффициентом делением 256 и частотой кристалла 8 МГц. Получаем , время 1 такта 1/8МГц/256=32мкс. Нужный код=65536- 1с/32мкс=34286= 85EE. Я правильно понял, что тогда прерывание по таймеру сработает через 31 250 тактов ( 1 такт 32мкс) , что будет соответствовать 1 секунде?
А если я хочу без коэфф деления, то при расчете на секунду получается отрицательно число, значит нужно разбить так чтобы, например 1 секунды составляли 2 прерываниям таймера?.
И ещё , кто знает в стандартных настройках таймера( как на скриншоте), прерывание срабатывает раз в 8192 наносек? Тогда мне не нужно как-то менять TMNT1. В протеусе моделил , вроде работает нормально.
0
Миниатюры
algorithm builder работа с таймером  
Модератор
8132 / 6008 / 798
Регистрация: 14.02.2011
Сообщений: 20,749
Завершенные тесты: 1
23.05.2020, 14:57 12
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
А если я хочу без коэфф деления, то при расчете на секунду получается отрицательно число,
нет не получится, там все переменные unsigned (беззнаковые)
0
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
23.05.2020, 15:19  [ТС] 13
Цитата Сообщение от ValeryS Посмотреть сообщение
нет не получится, там все переменные unsigned (беззнаковые)
7кк с хвостиком в TMNT1? Это так работает? А что насчет остального сообщения?
0
Модератор
8132 / 6008 / 798
Регистрация: 14.02.2011
Сообщений: 20,749
Завершенные тесты: 1
23.05.2020, 16:37 14
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
7кк с хвостиком в TMNT1?
переведи
что такое 7кк? что такое TMNT1?
0
0 / 0 / 0
Регистрация: 13.03.2019
Сообщений: 17
23.05.2020, 17:08  [ТС] 15
Цитата Сообщение от ValeryS Посмотреть сообщение
переведи
что такое 7кк? что такое TMNT1?
7 000 000, TCNT1*
0
Тутошний я
1824 / 973 / 178
Регистрация: 03.11.2009
Сообщений: 3,216
Записей в блоге: 2
23.05.2020, 19:16 16
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
А если я хочу без коэфф деления,
я ж написал, период переполнения таймера должен быть больше чем чем нужная нам задержка.
для 1 с можно только или 256 или 1024.

Добавлено через 9 минут
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
Я правильно понял, что тогда прерывание по таймеру сработает через 31 250 тактов ( 1 такт 32мкс) , что будет соответствовать 1 секунде?
да.

Добавлено через 47 минут
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
7кк с хвостиком в TMNT1?
TCNT1 двух байтный. только до FFFF.
1
Модератор
8132 / 6008 / 798
Регистрация: 14.02.2011
Сообщений: 20,749
Завершенные тесты: 1
23.05.2020, 19:18 17
Цитата Сообщение от VODOLAZ47 Посмотреть сообщение
7 000 000, TCNT1*
как ты загонишь 7000000 в 16 разрядный регистр???
у него предел 65535
вот у тебя 10 пальцев отсчитай при помощи их 357
почитай что такое разрядная сетка и переполнение её
0
Grey
23.05.2020, 19:29
  #18

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
вот у тебя 10 пальцев отсчитай при помощи их 357
не, на 2 руках только до 100 можно посчитать. для 357 нужно 3 руки :)

0
Модератор
8132 / 6008 / 798
Регистрация: 14.02.2011
Сообщений: 20,749
Завершенные тесты: 1
23.05.2020, 19:38 19

Не по теме:

Цитата Сообщение от Grey Посмотреть сообщение
не, на 2 руках только до 100 можно посчитать.
до 1023

Не по теме:

в двоичной системе

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2020, 19:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Кто подскажет на каком языке программирования работает Algorithm Builder ?
Есть ли замена этой программе для МК АТ90S8515 ?

Pinboard II + Algorithm builder
Помогите прикрутить Algorithm buylder к Pinboard II, чтобы можно было отладку вести как через...

Algorithm Builder for AVR
вот такой программой я пользуюсь, чтобы делать то, что приносит как и моральное, так и материальное...

Algorithm Builder. Графическая среда для разработки ПО для МК AVR
С любезного разрешения разработчика Algorithm Builder - Геннадия Громова. ...в продолжении...

Работа с таймером
Добрый вечер. Не хватает базовых знаний как дёрнуть метод внешнего класса. есть функция в классе,...

Работа с таймером
Доброго времени суток. У меня такой вопрос, как можно остановить работу цикла на пару секунд....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.