Таймер TMR1 и т.д.
|
|
ntro123 |
Дата: Пт, 05.11.2010, 17:09 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
45
Замечания:
±
На сайте с 28.06.2010
Статус:
Offline
|
Добрый день. Насколько я понял, в МК есть свои встроенные таймеры. в пик18 их от TMR1 до TMR4 - если это так, то какая разнирца? Как воспользоватся ими, чтобы начали отсчет, как считать, и вопрос: когда таймер считает можно с МК делать другие задачи? например таймер считает, а я проверяю нажатали кнопка? Желательно очень простой пример, на пикбэйскПро. Спасибо. Добавлено (05.11.2010, 17.09.50) --------------------------------------------- не ужели никто не подскажет? в интернете все на ингелеше или не понятно ...
|
|
|
|
ivan_fd |
Дата: Пт, 05.11.2010, 19:01 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Да в МК есть свои таймеры. В пик 18 TMR0 до TMR3, обо всем этом написано в даташите. На ПИК 18F452 есть русский. Когда таймер считает, другие задачи делать можно. Здесь не то, что никто не хочет подсказать, просто что именно Вас интересует. Вот тута почитайте , есть о таймерах http://www.microchip.ru/lit/?mid=1x0
|
|
|
|
ntro123 |
Дата: Пт, 05.11.2010, 20:59 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
45
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 28.06.2010
Статус:
Offline
|
retas, спасибо за мудрые подсказки! Вроде все сделал, да чегото не хватает чтобы насладится перерывание( Вот архив с прогой, вроде выводит на лсд значения таймера (выводит по разному от 0 до 255, строка 1) Хочу чтобы при переполнении таймера, сработало прерывание) и на строке 2 появилось XXX. НО при этом чтобы светодиоды продолжали мигать, т.е. 2 действия одновременно. Надеюсь кто поможет доразобраться, и добить таймер.
|
|
|
|
ivan_fd |
Дата: Сб, 06.11.2010, 15:44 | Сообщение # 8 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (ntro123) Надеюсь кто поможет доразобраться, и добить таймер. Исправил Ваш код, внимательно посмотрите.
|
|
|
|
ntro123 |
Дата: Сб, 06.11.2010, 19:55 | Сообщение # 10 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
45
Замечания:
±
На сайте с 28.06.2010
Статус:
Offline
|
Спасибо большое! вроде сейчас все понял! Если что напишу! спсибо!Добавлено (06.11.2010, 19.55.58) --------------------------------------------- ПС. а в каких единицах времени выводится на лсд?
|
|
|
|
ivan_fd |
Дата: Сб, 06.11.2010, 20:05 | Сообщение # 11 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
На LCD выводится показания таймера, а не единицы времени.
|
|
|
|
ntro123 |
Дата: Сб, 06.11.2010, 20:23 | Сообщение # 12 |
Группа:
Пользователи
Ранг:
Пытаюсь разобраться
Сообщений:
45
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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мс. В этом Вы можете убедится, посмотрев код в Протеусе пошагово.
|
|
|
|