Перейти к содержанию
    

Программа с фотопрерывателем для отсчета времени

Добрый день!

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

image.jpg

 

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

 

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

 

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

Изменено пользователем Infinite_Soul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не указали, с какой точностью должно измерятся время.

Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (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) или использовать таймер в виде апп. узла.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

не указали, с какой точностью должно измерятся время.

Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Погрешность 50 мкс сильно повлияет на код программы.

Надо использовать тактирование процессора от кварца и считать длительность аппаратно, таймером.

Приведенные файлы - это набор примеров настройки периферийных узлов для разных семейств процессоров

MSP430.

Ссылки на "эти файлы" я и дал, чтобы "прикинуть" код программы.

Можно поискать готовое решение, если вас интересует не процесс, а результат. (Google)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам необходимо использовать таймер А в этом контроллере в режиме захвата. Как только произошел захват от спадающего фронта, значение таймера запишется в регистр сравнения - это будет начальная метка времени, сохраним значение регистра. В прерывании быстро перестроим модуль захвата таймера на захват от растущего фронта. Пришёл растущий фронт, отнимаем сохранённое время от полученного регистра сравнения, это и есть Ваше искомое время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...