Поймать синхроимпульс
Поймать синхроимпульс
Всем привет.
Я тут замучался с одной задачей. В жизни таким не занимался а тут приспичило.
Задача такая, ловить разные импульсы и выполнять по ним разные задачи.
Поясню.
Есть линия в ней всегда идет единица.
Затем посылается синхроимпульс который определяет начало действия контроллера.
Синхроимпульс отрицательный, то есть коротыш на землю +5в, этот коротыш длиться ровно 270мс. Затем появляется 1 и длится 200мс,
вот это мне надо отследить и дать контроллеру понять что пора начать счет следующих импульсов.
Дальше идет чередование импульсов отрицательных 30мкс и положительных 140мкс и их может быть до 255 их надо записывать в счетчик.
Затем идет пауза это положительный импульс 94,5 мс и все, это говорит о том что надо заканчивать процесс.
Вот голову сломал как это осуществить. Можно сказать что это протокол передачи данных, только оч примитивный
Я тут замучался с одной задачей. В жизни таким не занимался а тут приспичило.
Задача такая, ловить разные импульсы и выполнять по ним разные задачи.
Поясню.
Есть линия в ней всегда идет единица.
Затем посылается синхроимпульс который определяет начало действия контроллера.
Синхроимпульс отрицательный, то есть коротыш на землю +5в, этот коротыш длиться ровно 270мс. Затем появляется 1 и длится 200мс,
вот это мне надо отследить и дать контроллеру понять что пора начать счет следующих импульсов.
Дальше идет чередование импульсов отрицательных 30мкс и положительных 140мкс и их может быть до 255 их надо записывать в счетчик.
Затем идет пауза это положительный импульс 94,5 мс и все, это говорит о том что надо заканчивать процесс.
Вот голову сломал как это осуществить. Можно сказать что это протокол передачи данных, только оч примитивный
- Реклама
- Enigm
- Говорящий с текстолитом
- Сообщения: 1663
- Зарегистрирован: Вт апр 03, 2012 20:36:41
- Откуда: Сочи
Re: Поймать синхроимпульс
Используйте аппаратный захват .
ICP1 – Input Capture Pin: The PB0 pin can act as an Input Capture Pin for Timer/Counter1. это с даты на мегу8
С его помошью легко измерять длительность импулса, а с количеством уже проще.
ICP1 – Input Capture Pin: The PB0 pin can act as an Input Capture Pin for Timer/Counter1. это с даты на мегу8
С его помошью легко измерять длительность импулса, а с количеством уже проще.
Re: Поймать синхроимпульс
Ой, да я забыл указать чего программирую, в голове автоматом кажется что все знают. 
У меня pic18f458, hi-tech picc pro компилятор. Я на прерывание RB0 посадил, обрабатываю в прерывании сигнал.
Счетчик построить нет проблем, 2 сек и готово. А вот как выделить именно то что надо и именно в те миллисекунды попасть и не словить помеху или другой какой импульс.
У меня не было вообще такого опыта. Работал с usart но там все просто, уже все в самом чипе есть для работы.
В принципе опыта мало т.к балуюсь для себя для дома, больших проектов не было никогда. У меня все на уровне автоматики простой.
У меня pic18f458, hi-tech picc pro компилятор. Я на прерывание RB0 посадил, обрабатываю в прерывании сигнал.
Счетчик построить нет проблем, 2 сек и готово. А вот как выделить именно то что надо и именно в те миллисекунды попасть и не словить помеху или другой какой импульс.
У меня не было вообще такого опыта. Работал с usart но там все просто, уже все в самом чипе есть для работы.
В принципе опыта мало т.к балуюсь для себя для дома, больших проектов не было никогда. У меня все на уровне автоматики простой.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Поймать синхроимпульс
В PIC'ах тоже есть захват, читайте про модуль CCP.
Ччто это означает ? У Вас же только отрицательные импульсы, т.к. линия подтянута к +5V. И что означает записать их, и в какой счётчик ?чередование импульсов отрицательных 30мкс и положительных 140мкс .......
их надо записывать в счетчик
Re: Поймать синхроимпульс
А что там за протокол на линии? Может стандартный какой?
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Поймать синхроимпульс
Так прост же до безобразия, судя по описанию. Синхроимпульс посылки и количество импульсов. Между посылками пауза. Всё.
Docendo discimus
Re: Поймать синхроимпульс
Так и есть! Я только не догоняю принцип.
Re: Поймать синхроимпульс
По мне, довольно просто.
Частота тактирования таймера известна. Допустим, для примера, она равна 10'000'000 Гц, т.е. если таймер успел отсчитать 945'000±Δ тактов до спада, затем 2'700'000±Δ тактов до фронта, затем 2'000'000±Δ тактов до следующего спада, то можно сделать вывод о приходе синхропосылки. Здесь как нельзя лучше (выше советовали) подходит модуль захвата таймера и модуль сравнения.
Частота тактирования таймера известна. Допустим, для примера, она равна 10'000'000 Гц, т.е. если таймер успел отсчитать 945'000±Δ тактов до спада, затем 2'700'000±Δ тактов до фронта, затем 2'000'000±Δ тактов до следующего спада, то можно сделать вывод о приходе синхропосылки. Здесь как нельзя лучше (выше советовали) подходит модуль захвата таймера и модуль сравнения.
Re: Поймать синхроимпульс
Ага, хорошо надо попробовать. Щас кое какой проектик закончу продолжу. 
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Поймать синхроимпульс
Помоему, с такими интервалами можно и не использовать модуль захвата. Эту задачу можно решать вполне неторопливо программным способом.
Собственно непонятно только одно - после синхронизации идут импульсы... но не сказано какие характеристики их надо фиксировать - момент возникновения? Судя по всему, это не просто импульсы а передаются какие-то данные - а значит просто НЕОБХОДИМО знать способ модуляции.
Вобщем, очень сильно похоже на работу DMX, только оный работает на гораздо больших скоростях.
Нет ведь необходимости точно привязываться к этим временным интервалам - в начале ждем импульс длительностью минимум 200мс чтобы отсеять ложняки, затем ждем момент перехода с 0 на 1, и дальше ждем обратного перехода который произойдет с первым информационным импульсом(если переход произошел раньше минимального времени - проверяем на его стабильность, будет ли сигнал таким же через 100мкс?). Ну и т.д. постоянно проверяя таймауты, если например нет импульса дольше 20мс - очевидно это конец посылки и нет необходимости ждать полные 95мс - можно переходить в режим ожидания следующего синхронизирующего импульса.
Я так полагаю, что код там простой - длительность посылок фиксированная, просто лог."1" передается импульсом 30мкс паузой и 140мкс импульсом, а лог.0 - наоборот 140мкс пауза и 30мкс импульс. Тогда достаточно грубо измерять длительность каждого последующего импульса(распознать больше ли он 80мкс и 10мкс чтобы отсеять мусор) и дело в шляпе.
Собственно непонятно только одно - после синхронизации идут импульсы... но не сказано какие характеристики их надо фиксировать - момент возникновения? Судя по всему, это не просто импульсы а передаются какие-то данные - а значит просто НЕОБХОДИМО знать способ модуляции.
Вобщем, очень сильно похоже на работу DMX, только оный работает на гораздо больших скоростях.
Нет ведь необходимости точно привязываться к этим временным интервалам - в начале ждем импульс длительностью минимум 200мс чтобы отсеять ложняки, затем ждем момент перехода с 0 на 1, и дальше ждем обратного перехода который произойдет с первым информационным импульсом(если переход произошел раньше минимального времени - проверяем на его стабильность, будет ли сигнал таким же через 100мкс?). Ну и т.д. постоянно проверяя таймауты, если например нет импульса дольше 20мс - очевидно это конец посылки и нет необходимости ждать полные 95мс - можно переходить в режим ожидания следующего синхронизирующего импульса.
Я так полагаю, что код там простой - длительность посылок фиксированная, просто лог."1" передается импульсом 30мкс паузой и 140мкс импульсом, а лог.0 - наоборот 140мкс пауза и 30мкс импульс. Тогда достаточно грубо измерять длительность каждого последующего импульса(распознать больше ли он 80мкс и 10мкс чтобы отсеять мусор) и дело в шляпе.
Re: Поймать синхроимпульс
Табличный селектор по длительности импульса с шагом через четверть или половинку...
Самый длинный делится на 4 (или более)
затем смотрим сколько полных четвертинок в текущем и соответственно его сортируем.
возможно туда-сюда пол четвертинки... или чего еще...
по подобному сценарию давным-давно работал "счетчик заказа" для копира - вылавливал скоко выпало A4/A4R/A3 листочков.
Самый длинный делится на 4 (или более)
затем смотрим сколько полных четвертинок в текущем и соответственно его сортируем.
возможно туда-сюда пол четвертинки... или чего еще...
по подобному сценарию давным-давно работал "счетчик заказа" для копира - вылавливал скоко выпало A4/A4R/A3 листочков.


