12.08.2020, 11:45
|
#1
|
Частый гость
Регистрация: 18.09.2005
Сообщений: 26
Сказал спасибо: 72
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Помогите с TMR1 на PIC16F873
Суть проблемы такова:
Имеется роликовый транспортер, состоящий из 8 участков. По нему перемещается коробочка.
На каждом участке транспортера имеется оптический датчик, который включает этот транспортер.
Для того, чтобы коробочка доехала до следующего датчика нужна задержка на отключение 0,5 сек.
Управление транспортерами выполнено на PIC16F873.
Вот кусок программы которая управляет транспортерами.
Все бы ничего, но пока таймер отсчитывает 0,5 сек
может происходить какое то событие, которое контроллер не видит.
Сильно не пинайте, в 65 лет мозги совсем не те. Третий день пытаюсь прикрутить таймер TMR1 для этих целей.
Перелопатил кучу документации, но никак не могу понять, как это работает. Может быть кто нибудь может
написать пример, как это делается. Буду очень признателен.
|
|
|
|
12.08.2020, 12:09
|
#2
|
Гражданин KAZUS.RU
Регистрация: 28.04.2008
Сообщений: 506
Сказал спасибо: 251
Сказали Спасибо 573 раз(а) в 226 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
А не проще выключать предыдущий транспортёр после достижения коробочкой
оптического датчика последующего тр-ра? Тогда "Delay05 & Co" не нужны
|
|
|
|
12.08.2020, 12:28
|
#3
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Я конечно уже забыл ассемблер и ПИК16, хотя раньше знал очень хорошо.
Для обнаружения сигнала от датчика используйте либо внешнее прерывание INT, либо постоянный (в цикле) опрос входа от датчика, и если сигнал появился, значит коробочка доехала до датчика.
Если нужно отмерять интервалы по 0,5 секунд, перезапускайте таймер каждый раз, когда обнаруживается сигнал с датчика. Перед перезапуском таймера считывайте его значение, до которого таймер досчитал. Разница между значением при перезапуске таймера и считанным значением перед перезапуском - и будет являться интервалом времени, выраженном в количестве тиков таймера.
|
|
|
|
12.08.2020, 14:05
|
#4
|
Частый гость
Регистрация: 18.09.2005
Сообщений: 26
Сказал спасибо: 72
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от tomitch
|
А не проще выключать предыдущий транспортёр после достижения коробочкой
оптического датчика последующего тр-ра? Тогда "Delay05 & Co" не нужны
|
А вот об этом я как то и не подумал... Спасибо за совет.
Но все равно хотелось бы увидеть пример применения TMR1.
Ну никак я не могу вкурить, как это работает и как использовать прерывания.
|
|
|
|
12.08.2020, 14:10
|
#5
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Сообщение от tomitch
|
А не проще выключать предыдущий транспортёр после достижения коробочкой оптического датчика последующего тр-ра? Тогда "Delay05 & Co" не нужны
|
Думаю, что это не совсем корректная логика управления. Подумайте, что будет в таких, вполне реальных, ситуациях:
1) если коробочку на каком то этапе сняли с транспортера;
2) если на транспортере будет несколько коробочек.
Сообщение от ptrots
|
Имеется роликовый транспортер, состоящий из 8 участков. По нему перемещается коробочка.
На каждом участке транспортера имеется оптический датчик, который включает этот транспортер.
Для того, чтобы коробочка доехала до следующего датчика нужна задержка на отключение 0,5 сек.
Управление транспортерами выполнено на PIC16F873.
|
Что-то это не похоже на реальную задачу автоматизации. Скорее это какое-то учебное задание.
Последний раз редактировалось mike-y-k; 15.11.2021 в 12:32.
Причина: 6.6
|
|
|
|
12.08.2020, 15:13
|
#6
|
Частый гость
Регистрация: 06.08.2005
Сообщений: 32
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 16 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
организуйте счет TMR например до 0.1 сек. выставляйте флаг, который будете по кругу проверять в основном цикле программы, и переходить по нему на программный счетчик до 5. пока TMR отсчитывает 0.1 можно делать все остальное
|
|
|
|
12.08.2020, 16:35
|
#7
|
Частый гость
Регистрация: 18.09.2005
Сообщений: 26
Сказал спасибо: 72
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Сообщение от tsb
|
2) если на транспортере будет несколько коробочек.
|
Вот как раз сейчас и возникла проблема. Коробочки иногда сталкиваются друг с другом, а это нежелательно.
sholz
Хотелось бы увидеть, как это выглядит на ассемблере...
Последний раз редактировалось mike-y-k; 15.11.2021 в 12:34.
Причина: 6.6, 7.15
|
|
|
|
12.08.2020, 18:22
|
#8
|
Частый гость
Регистрация: 06.08.2005
Сообщений: 32
Сказал спасибо: 0
Сказали Спасибо 19 раз(а) в 16 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
пример для 873А. предполагается что основной алгоритм выполняется раз в 200мкс и должен поместится в этот интервал. так же здесь не хватает операции сохранения/восстановления статусного регистра при входе в прерывание.
Последний раз редактировалось sholz; 12.08.2020 в 18:26.
|
|
|
|
12.08.2020, 19:52
|
#9
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от tsb
|
Скорее это какое-то учебное задание.
|
Да какое там учебное в 65 лет то
Просто не хватает данных, не совсем ясна конструкция.
Если на каждом участке между датчиками есть электромотор, который приводит в движение транспортер именно на этом участке, то и отключать его нужно после пересечения коробочкой следующего датчика.
|
|
|
|
12.08.2020, 20:48
|
#10
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: Помогите с TMR1 на PIC16F873
Сообщение от NewWriter
|
Если на каждом участке между датчиками есть электромотор, который приводит в движение транспортер именно на этом участке, то и отключать его нужно после пересечения коробочкой следующего датчика.
|
Недостатки такого условия отключения:
1) если коробочку сняли с транспортера когда она не доехала до следующего датчика, то движение этого участка не выключится;
2) если на участке транспортера коробочек может быть несколько (а ТС это подтвердил, так как они у него иногда сталкиваются) - то движение участка прекратится по выходу "первой" коробочки и "вторая" уже не доедет.
Меня в первоначальном условии смущает требуемая задержка всего 0,5 сек. Это было бы приемлемо, если бы "датчик" выдавал сигнал о "присутствии" предметов на всем протяжении участка транспортера. Но я не знаю таких "оптических датчиков". Если датчик работает по пересечению луча, то он "контролирует" достаточно небольшую зону (в начале участка или в его конце). Таким образом, если "коробочка" выехала из зоны датчика в начале участка, то куда она успеет доехать за 0,5 сек? Не думаю, что участки транспортера такие короткие. Может у них "коробочки" такие длинные, что занимают почти весь участок транспортера? Но тогда это весьма специфический случай...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:04.
|
|