777Super 0 21 ноября, 2015 Опубликовано 21 ноября, 2015 (изменено) · Жалоба Добрый день! Имеется фотопрерыватель (щелевой оптрон), который подключается к MSP430, схему приложил ниже: Дело в том, что с помощью данного прерывателя нужно измерить время нахождения предмета между светодиодом и фототранзистором. Прекрасно понимаю, что если фотопрерыватель открыт, то это состояние "1", а если закрыт, то состояние "0", происходит отслеживание сигнала и обрабатывание прерывания. Сначала фотопрерыватель открыт, он находится в открытом состоянии, потом кладется в него предмет и так как поток света со светодиода на фототранзистор прерывается, то фотопрерыватель закрывается. Благодаря отслеживанию сигнала MSP430 понимает, что состояние изменилось и запускает таймер, время идет на консоли, но как только предмет убирается, поток света снова идет на фототранзистор, и фотопрерыватель снова открывается, поэтому таймер останавливается и на консоли показывается сколько времени держался предмет. На всякий случай модель фотопрерывателя - KTIR0411S Как это можно реализовать посредством кода? Заранее благодарен за помощь! Пишется программа для MPS430FG4618/F2013 на всякий случай Изменено 21 ноября, 2015 пользователем Infinite_Soul Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 21 ноября, 2015 Опубликовано 21 ноября, 2015 · Жалоба Ключевые слова - Pin Change Interrupts Timer0 и тд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба не указали, с какой точностью должно измерятся время. Если это мс, заставляете процесссор генерировать апп. прерывания от одного из таймеров с этой (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) или использовать таймер в виде апп. узла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777Super 0 23 ноября, 2015 Опубликовано 23 ноября, 2015 (изменено) · Жалоба Благодарю всех за ответы! Погрешность равна 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 файлы? Можно ли прикинуть хотя бы код программы? Изменено 23 ноября, 2015 пользователем Infinite_Soul Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Погрешность 50 мкс сильно повлияет на код программы. Надо использовать тактирование процессора от кварца и считать длительность аппаратно, таймером. Приведенные файлы - это набор примеров настройки периферийных узлов для разных семейств процессоров MSP430. Ссылки на "эти файлы" я и дал, чтобы "прикинуть" код программы. Можно поискать готовое решение, если вас интересует не процесс, а результат. (Google) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasa_c 0 1 декабря, 2015 Опубликовано 1 декабря, 2015 · Жалоба Вам необходимо использовать таймер А в этом контроллере в режиме захвата. Как только произошел захват от спадающего фронта, значение таймера запишется в регистр сравнения - это будет начальная метка времени, сохраним значение регистра. В прерывании быстро перестроим модуль захвата таймера на захват от растущего фронта. Пришёл растущий фронт, отнимаем сохранённое время от полученного регистра сравнения, это и есть Ваше искомое время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777Super 0 3 декабря, 2015 Опубликовано 3 декабря, 2015 · Жалоба Всем спасибо за ответы! Интересует меня именно результат (просто показать и сдать). Я искал даже человека, который сможет мне код написать за небольшую сумму, так как знаю, что это несложно, но никто не соглашается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться