Как запустить таймер в прерывании INT

PIC версия программы(разные темы)

Re: Прерывания INT и TMR0

Сообщение Steve Key (Steve Key) » 22 апр 2016, 05:23

a50 писал(а):На вход RB0 идут импульсы с частотой 50 Гц, нужно запустить таймер TMR0. Как это сделать?

В начале проги включи таймер, настрой макросом, затем опусти бит соответствующий, чтобы он остановился, а в прерывании поднимай этот бит.
FlowCode 5.5.2.1, Proteus 7.10, PICkit 2
Аватар пользователя
Ник: Steve Key
Имя: Steve Key
(Шахты)
Специалист
Специалист
Информация о пользователе

Re: Как запустить таймер в прерывании INT

Сообщение a50 (Иван) » 22 апр 2016, 19:44

Эту тему я посмотрел. Там не нашел рабочий проект. Всё очень сложно и не понятно, зачем так наворочено.
Посмотрите как я обрабатываю прерывания. Может найдете ошибку.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: a50
Имя: Иван
(СЗФО)
Заинтересованный
Заинтересованный
Информация о пользователе

Re: Как запустить таймер в прерывании INT

Сообщение Steve Key (Steve Key) » 22 апр 2016, 20:47

Что делают следующие строчки?
Код: выделить все
st_bit(option_reg, T0CS);
tmr0=1;
cr_bit(option_reg, T0CS);
FlowCode 5.5.2.1, Proteus 7.10, PICkit 2
Аватар пользователя
Ник: Steve Key
Имя: Steve Key
(Шахты)
Специалист
Специалист
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение a50 (Иван) » 23 апр 2016, 21:01

st_bit(option_reg, T0CS); Устанавливает бит T0CS в регистре ОPTION микроконтроллера.
tmr0=1; Загружает в таймер 1.
cr_bit(option_reg, T0CS); Сбрасывает бит T0CS в регистре ОPTION микроконтроллера.
Читайте Datasheet микроконтроллера, там есть описание этого регистра.
Здесь на сайте есть специалисты которые могут помочь в решении проблемы?
Аватар пользователя
Ник: a50
Имя: Иван
(СЗФО)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение Steve Key (Steve Key) » 24 апр 2016, 07:20

a50 писал(а):st_bit(option_reg, T0CS); Устанавливает бит T0CS в регистре ОPTION микроконтроллера.
tmr0=1; Загружает в таймер 1.
cr_bit(option_reg, T0CS); Сбрасывает бит T0CS в регистре ОPTION микроконтроллера.
Читайте Datasheet микроконтроллера, там есть описание этого регистра.
Здесь на сайте есть специалисты которые могут помочь в решении проблемы?

Зачем?
Зачем?
Зачем?
Читал. Потому и спрашиваю.
Есть. Но — «помочь», а не «сделать за тебя»…

Я имел в виду, что ты расскажешь, так сказать, глубинный смысл этих команд в данной программе, для чего они используются здесь и сейчас… А, пока объясняешь, и сам поймёшь…

Итак, разверну вопрос: зачем ты переключаешь источник тактового сигнала таймера?
Зачем устанавливаешь единицу в его регистре?

В принципе, путь имеет смысл, но он не совсем корректен.
Я имел в виду снимать и ставить бит T0IF для остановки и запуска таймера, а для того, чтобы он начинал считать всегда с одного и того же значения, да, нужно записать в него начальное число для делителя (от него, кстати, будет зависеть время «выдержки» до следующего прерывания), важно понимать, для чего и почему это делается.

Кстати, задержки delay, насколько я понял, запрещают прерывания, то есть, нарушают работу программы, надо от них избавляться…
FlowCode 5.5.2.1, Proteus 7.10, PICkit 2
Аватар пользователя
Ник: Steve Key
Имя: Steve Key
(Шахты)
Специалист
Специалист
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение Вячеслав (Вячеслав) » 24 апр 2016, 07:22

a50 писал(а):на сайте есть специалисты

На самолюбие давишь? Я туточки мимо проходил. Вижу троицу команд, которые быстро:
-останавливают таймер,
-записывают в него 1,
-запускают таймер.
Чем смотришь результат работы фрагмента? В Протеусе отдельно по прерыванию INT проверь работу каждой строки фрагмента отдельно. По значению регистра tmr0 увидишь результат работы команды. Работу совокупности строк иногда не заметишь на скорости их выполнения.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Суперконсульт
Суперконсульт
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение a50 (Иван) » 25 апр 2016, 08:20

На вход RB0 микроконтроллера подаю синхронизацию от сети 50 Гц, в виде прямоугольных импульсов с периодом 20 mS.
Все делаю на "железе" подаю реальную синхронизацию и смотрю осциллографом.
Прерывания от таймера нормально НЕ РАБОТАЮТ.
В таймере TMR0 не бита запуска и остановки счета. Когда мне нужно чтобы он не считал, переключаю его на счет импульсов со входа T0CKI, там импульсов нет, останавливаю счет, а когда нужно чтобы он считал, переключаю на внутренний генератор.
Прерывание INT работает, но из него таймер не запускается, а если и запускается, то не в каждом периоде синхронизации. Почему?
Что не правильно в примере.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: a50
Имя: Иван
(СЗФО)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение a50 (Иван) » 25 апр 2016, 09:27

Нужно захватить синхронизацию по-INT таймером. Она не работает.
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
Ник: a50
Имя: Иван
(СЗФО)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение mim (mim) » 25 апр 2016, 09:29

Не хочешь нарисовать все в Протеусу?
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе
Вернуться наверх

Re: Как запустить таймер в прерывании INT

Сообщение Vovan_G5 (Владимир) » 25 апр 2016, 10:17

TMR0 Preload должен быть связан с твоим потенциометром. Включать\ выключать таймер нужно битом делителя (не знаю как у Пиков)
Ацп нельзя так часто опрашивать. Опрашивать хотя бы раз за полуволну.
И какой то странный импульс на симистор, обычно его нужно подержать открытым 20мкс за полуволну, потом остановить таймер до следующей синхронизации. На след полуволне повторить.
Ну и вообще задачка для общего развития, потому как в димере с потенциометром МК не нужен :) , делай сразу кнупку/кнопки.
Ник: Vovan_G5
Имя: Владимир
(Харьков)
Консультант
Консультант
Информация о пользователе
Вернуться наверх

Пред.След.

Вернуться в Flowcode PIC

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron