реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Программа с фотопрерывателем для отсчета времени
Infinite_Soul
сообщение Nov 21 2015, 11:44
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 21-11-15
Пользователь №: 89 403



Добрый день!
Имеется фотопрерыватель (щелевой оптрон), который подключается к MSP430, схему приложил ниже:


Дело в том, что с помощью данного прерывателя нужно измерить время нахождения предмета между светодиодом и фототранзистором. Прекрасно понимаю, что если фотопрерыватель открыт, то это состояние "1", а если закрыт, то состояние "0", происходит отслеживание сигнала и обрабатывание прерывания. Сначала фотопрерыватель открыт, он находится в открытом состоянии, потом кладется в него предмет и так как поток света со светодиода на фототранзистор прерывается, то фотопрерыватель закрывается. Благодаря отслеживанию сигнала MSP430 понимает, что состояние изменилось и запускает таймер, время идет на консоли, но как только предмет убирается, поток света снова идет на фототранзистор, и фотопрерыватель снова открывается, поэтому таймер останавливается и на консоли показывается сколько времени держался предмет. На всякий случай модель фотопрерывателя - KTIR0411S

Как это можно реализовать посредством кода? Заранее благодарен за помощь!

Пишется программа для MPS430FG4618/F2013 на всякий случай

Сообщение отредактировал Infinite_Soul - Nov 21 2015, 11:17
Go to the top of the page
 
+Quote Post
mcheb
сообщение Nov 21 2015, 12:24
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Ключевые слова - Pin Change Interrupts Timer0 и тд.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 22 2015, 13:15
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



не указали, с какой точностью должно измерятся время.
Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (1000 Hz) частотой.
В этом векторе "обрабатываете" "фронт" и "спад" - удаление дребезга.
Когда есть "фронт", и это не помеха-дребезг, начинаете считать время до момента спада, опятьже с проверкой что это не помеха-дребезг.
Т.е. задание временного интервала - аппаратное, от таймера-кварца. Счет времени - программный.
Это решение позволит на основе примеров программирования для семейства Ti быстро написать софт, не вникая в настройку таймеров.
slac010.zip
slac011l.zip
slac013i.zip
slac015p.zip
slac019.zip
slac019l.zip
slac080k.zip
slac118g.zip
slac123f.zip
slac151f.zip
slac163e.zip
slac166m.zip
slac300f.zip
slac375e.zip
slac375f.zip
slac417f.zip
slac417h.zip
slac452d.zip
slac463c.zip
slac469e.zip
slac487.zip
slac491d.zip
slac511c.zip
Если требуется считать очень точно - используем апп. прерывания от порта P1 (если оно есть в F2013) или использовать таймер в виде апп. узла.
Go to the top of the page
 
+Quote Post
Infinite_Soul
сообщение Nov 23 2015, 16:45
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 21-11-15
Пользователь №: 89 403



Благодарю всех за ответы! Погрешность равна 50 мкс. Это сильно повлияет на код программы?

Цитата(k155la3 @ Nov 22 2015, 13:15) *
не указали, с какой точностью должно измерятся время.
Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (1000 Hz) частотой.
В этом векторе "обрабатываете" "фронт" и "спад" - удаление дребезга.
Когда есть "фронт", и это не помеха-дребезг, начинаете считать время до момента спада, опятьже с проверкой что это не помеха-дребезг.
Т.е. задание временного интервала - аппаратное, от таймера-кварца. Счет времени - программный.
Это решение позволит на основе примеров программирования для семейства Ti быстро написать софт, не вникая в настройку таймеров.
slac010.zip
slac011l.zip
slac013i.zip
slac015p.zip
slac019.zip
slac019l.zip
slac080k.zip
slac118g.zip
slac123f.zip
slac151f.zip
slac163e.zip
slac166m.zip
slac300f.zip
slac375e.zip
slac375f.zip
slac417f.zip
slac417h.zip
slac452d.zip
slac463c.zip
slac469e.zip
slac487.zip
slac491d.zip
slac511c.zip
Если требуется считать очень точно - используем апп. прерывания от порта P1 (если оно есть в F2013) или использовать таймер в виде апп. узла.


А что это за zip файлы? Можно ли прикинуть хотя бы код программы?

Сообщение отредактировал Infinite_Soul - Nov 23 2015, 16:46
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 25 2015, 07:54
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Погрешность 50 мкс сильно повлияет на код программы.
Надо использовать тактирование процессора от кварца и считать длительность аппаратно, таймером.
Приведенные файлы - это набор примеров настройки периферийных узлов для разных семейств процессоров
MSP430.
Ссылки на "эти файлы" я и дал, чтобы "прикинуть" код программы.
Можно поискать готовое решение, если вас интересует не процесс, а результат. (Google)
Go to the top of the page
 
+Quote Post
sasa_c
сообщение Dec 1 2015, 10:10
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 14-11-09
Пользователь №: 53 615



Вам необходимо использовать таймер А в этом контроллере в режиме захвата. Как только произошел захват от спадающего фронта, значение таймера запишется в регистр сравнения - это будет начальная метка времени, сохраним значение регистра. В прерывании быстро перестроим модуль захвата таймера на захват от растущего фронта. Пришёл растущий фронт, отнимаем сохранённое время от полученного регистра сравнения, это и есть Ваше искомое время.
Go to the top of the page
 
+Quote Post
Infinite_Soul
сообщение Dec 3 2015, 08:57
Сообщение #7





Группа: Новичок
Сообщений: 3
Регистрация: 21-11-15
Пользователь №: 89 403



Всем спасибо за ответы! Интересует меня именно результат (просто показать и сдать). Я искал даже человека, который сможет мне код написать за небольшую сумму, так как знаю, что это несложно, но никто не соглашается
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 17:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016