Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Таймер TMR1 и т.д.
Таймер TMR1 и т.д.
ntro123 Дата: Пт, 05.11.2010, 17:09  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

Добрый день.

Насколько я понял, в МК есть свои встроенные таймеры.
в пик18 их от TMR1 до TMR4 - если это так, то какая разнирца?

Как воспользоватся ими, чтобы начали отсчет, как считать, и вопрос: когда таймер считает можно с МК делать другие задачи? например таймер считает, а я проверяю нажатали кнопка?

Желательно очень простой пример, на пикбэйскПро.

Спасибо.

Добавлено (05.11.2010, 17.09.50)
---------------------------------------------
не ужели никто не подскажет?
в интернете все на ингелеше или не понятно ...

ЯНДЕКС Дата: 05.11.2010
ivan_fd Дата: Пт, 05.11.2010, 19:01  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Да в МК есть свои таймеры.
В пик 18 TMR0 до TMR3, обо всем этом написано в даташите. На ПИК 18F452 есть русский.

Когда таймер считает, другие задачи делать можно.

Здесь не то, что никто не хочет подсказать, просто что именно Вас интересует.
Вот тута почитайте , есть о таймерах http://www.microchip.ru/lit/?mid=1x0

ntro123 Дата: Пт, 05.11.2010, 20:59  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

ivan_fd, спасибо.
Я не очень понял разницу между TMR0 TMR1 и т.д.

Еслибы на picbasic предотавили элементарный код как сказать таймеру чтобы начал считать.
и команду чтобы остановил счет.
команду чтобы сбросился в 0.
команду чтобы считать количество МC которое он насчитал.

Просто немогу никак понять, конкретных примеров с таймеро на пикбайсике нету.

Зарание спасибо.

ПС. да я сам нензаю с чего начать, но очень нужно разобраться с таймером.

Добавлено (05.11.2010, 20.59.46)
---------------------------------------------
И еще вопрос. что такое пределитель?

Сообщение отредактировал ntro123 - Пт, 05.11.2010, 20:58
DAlexV Дата: Пт, 05.11.2010, 22:58  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

"Бог в помощь !!!!" - м.ф. "Жил был пес"
Точнее пару ссылок в нужном направлении. Хоть они не на тему Бейсика, но понять смысл "откуда ноги растут" думаю помогут.
http://www.pro-radio.ru/controllers/2220-14/ (Хотел найти журнал Радио но чего то не нашел, а ведь был)
http://ikarab.narod.ru/index.html а именно "Самоучитель по программированию PIC контроллеров для начинающих" хоть он и про ASM о таймерах очень толково написано.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ntro123 Дата: Сб, 06.11.2010, 12:20  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

DAlexV, спасибо большое за первую ссылку (вторую уже давно смотрел)
Насколько я понял из всег опрочитаного (нетолько по этим ссылкам но и то что я нагуглил)

это точто.
1. в пик бэйсик нужно написать специальную подпраграмму
пример:
On Interrupt GoTo PULSE ' этим мы обозначили что в случии прерывания (насколько я понял без разницы как оно вызвано) нужно перейти на метку PULSE и выполнить там код, а команда Resume - возращает на прежнее мето программы.
PULSE:
'код проги
Resume
2. нужно сохранять все переменные при входе в подпрограмму PULSE при окончании востановить их значения. (какимми командами это делается в обычном picbasic я не очень понял подскажите)
3. также есть команда DISABLE INTERRUPT.
её задача выключить прерывания, а точнее не разрешать прерывания.
и команда ENABLE INTERRUPT которая разрещает прерывания.
эти команды нужно использовать в подпрограмме, чтобы в случии прервание подпрограмма не зацыкливалась самой на себе. (вроде так)
4. есть биты конфигурации TxCON таймером (где x цыфра таймера).
но за что каждый конкретный бит этого таймера отвичает я не понял.
Таймеры бывают 16 и 8 разрядными.
В 8 разрядном когда доходит до $FF сбрасывается и переходит на $00, при этом наверника какойто регистр таймера запоминает 1, потом когда второй периуд от $00 до $FF то запоминает 2 и т.д.

Так и не понял что такое предделитель (предполгаю что это как-то связано с частотой МК)
и знаю что он может быть от 1:1 до 1:256

2 вопроса.
1. как вызвать прерывание?
2. что такое пределитель?
(в даташщитах смотрел, в гугле смотрел но совсем непонятно ... объясните пожалуйста на пальцах что это такое и зачем нужно)

Спасибо!

Сообщение отредактировал ntro123 - Сб, 06.11.2010, 12:23
retas Дата: Сб, 06.11.2010, 13:00  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

1. Таймеры отличаются возможностью выбора их коэфициентов деления (с помощью prescaler/postscaler).
2. Апаратно в МК они участвуют для решения определённых задач.
3. Под своё усмотрение вы можете использовать любой тимер если он по вашей прогре не будет
задействован апаратно под другие задачи.
4. Скажем, если вы хотите воспользоваться тимером TMR0 ( в PIC16 ) а у вас включена сторожевая собака,
то так не получится ибо собака забирает TMR0 под свои нужды.
5. Если нужно с какого то момента начать считать время (продолжительность кокого то процеса), то
в этот момент указываете TMRХ=0, а в нужный момент смотрите чему этот TMRХ равен.
6. Для точных измерений за переполнением тимера следует следить в прерывах, т.е. указать прогре
прерваться в случае переполнения вашего тимера.
Удачи.
ntro123 Дата: Сб, 06.11.2010, 15:29  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

retas, спасибо за мудрые подсказки!

Вроде все сделал, да чегото не хватает чтобы насладится перерывание(

Вот архив с прогой, вроде выводит на лсд значения таймера (выводит по разному от 0 до 255, строка 1)
Хочу чтобы при переполнении таймера, сработало прерывание) и на строке 2 появилось XXX.
НО при этом чтобы светодиоды продолжали мигать, т.е. 2 действия одновременно.

Надеюсь кто поможет доразобраться, и добить таймер.

Прикрепления: happy.rar (35.9 Kb)
ivan_fd Дата: Сб, 06.11.2010, 15:44  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (retas)
4. Скажем, если вы хотите воспользоваться тимером TMR0 ( в PIC16 ) а у вас включена сторожевая собака,
то так не получится ибо собака забирает TMR0 под свои нужды.

Здесь Вы не правы, WDT не использует TMR0, только предделитель, если нужно.

Сообщение отредактировал ivan_fd - Сб, 06.11.2010, 15:45
ivan_fd Дата: Сб, 06.11.2010, 18:43  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (ntro123)
Надеюсь кто поможет доразобраться, и добить таймер.

Исправил Ваш код, внимательно посмотрите.

Прикрепления: happy.zip (3.7 Kb)
ntro123 Дата: Сб, 06.11.2010, 19:55  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

Спасибо большое! вроде сейчас все понял!
Если что напишу!
спсибо!

Добавлено (06.11.2010, 19.55.58)
---------------------------------------------
ПС. а в каких единицах времени выводится на лсд?

ivan_fd Дата: Сб, 06.11.2010, 20:05  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

На LCD выводится показания таймера, а не единицы времени.
ЯНДЕКС Дата: 06.11.2010
ntro123 Дата: Сб, 06.11.2010, 20:23  |                                                                                                                Сообщение # 12
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

Как тогда это дело в еденицы времени перевести?

Добавлено (06.11.2010, 20.11.54)
---------------------------------------------
Вот допустим посчитал я количество переполнений. и?

Добавлено (06.11.2010, 20.23.04)
---------------------------------------------
я посчитал что 1000MS=500000 значений счетчика. надеюсь верно.

ivan_fd Дата: Сб, 06.11.2010, 20:36  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline


Смотрите, при частоте осциллятора 4Мгц, 1 машинный цикл длится 1000нс. В нашем случаи, TMR1 16-ти разрядный. То есть
он может считать от 0 до $FFFF(65535). Допустим у нас предделитель настроен 1:1 поэтому таймер будет увеличиватся с каждым машинным циклом, прерывание произойдет когда он дойдет до 65535, что по времени будет 65535 х 1000нс = 65 536 000нс. То есть оно будет происходить каждые 65 536 000нс.
ntro123 Дата: Сб, 06.11.2010, 21:10  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

Не особо дошло, получается
65536000 наносек = 65,536 милисек

в вашем коде строка
T1CKPS1 = 0 ' \ TIMER1 Prescaler to 1:4
т.е. это число нужно еще на 4 разделить?
65,536 / 4 = 16.25 милисек ??

Добавлено (06.11.2010, 21.10.28)
---------------------------------------------

Code
PULSE:
Context Save  
DelayMS 130
Print At 2, 1, Dec TIMER1

PIR1.0 = 0
Context Restore

да это это числов 65,536 но его нужно умжножить на 2 получается 130 мс - каждые 130 мс срабатывает подпограмма.

Сообщение отредактировал ntro123 - Сб, 06.11.2010, 21:01
ivan_fd Дата: Сб, 06.11.2010, 21:30  |                                                                                                                Сообщение # 15
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (ntro123)
65536000 наносек = 65,536 милисек

Да.
Quote (ntro123)
в вашем коде строка
T1CKPS1 = 0 ' \ TIMER1 Prescaler to 1:4
т.е. это число нужно еще на 4 разделить?
65,536 / 4 = 16.25 милисек ??

Нет не разделить а умножить - 65535х1000х4=262 140 000нс = 262,14мс

То есть прерывание будет происходить каждые 262,14мс.
В этом Вы можете убедится, посмотрев код в Протеусе пошагово.

Форум Picbasic.ru » Программирование МК » PicBasicPro » Таймер TMR1 и т.д.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: