Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программа с фотопрерывателем для отсчета времени
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Infinite_Soul
Добрый день!
Имеется фотопрерыватель (щелевой оптрон), который подключается к MSP430, схему приложил ниже:


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

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

Пишется программа для MPS430FG4618/F2013 на всякий случай
mcheb
Ключевые слова - Pin Change Interrupts Timer0 и тд.
k155la3
не указали, с какой точностью должно измерятся время.
Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (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) или использовать таймер в виде апп. узла.
Infinite_Soul
Благодарю всех за ответы! Погрешность равна 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 файлы? Можно ли прикинуть хотя бы код программы?
k155la3
Погрешность 50 мкс сильно повлияет на код программы.
Надо использовать тактирование процессора от кварца и считать длительность аппаратно, таймером.
Приведенные файлы - это набор примеров настройки периферийных узлов для разных семейств процессоров
MSP430.
Ссылки на "эти файлы" я и дал, чтобы "прикинуть" код программы.
Можно поискать готовое решение, если вас интересует не процесс, а результат. (Google)
sasa_c
Вам необходимо использовать таймер А в этом контроллере в режиме захвата. Как только произошел захват от спадающего фронта, значение таймера запишется в регистр сравнения - это будет начальная метка времени, сохраним значение регистра. В прерывании быстро перестроим модуль захвата таймера на захват от растущего фронта. Пришёл растущий фронт, отнимаем сохранённое время от полученного регистра сравнения, это и есть Ваше искомое время.
Infinite_Soul
Всем спасибо за ответы! Интересует меня именно результат (просто показать и сдать). Я искал даже человека, который сможет мне код написать за небольшую сумму, так как знаю, что это несложно, но никто не соглашается
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.