Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм считывания передачи
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
micronano
Всем доброго дня!

Кто-нибудь может подсказать как прочитать передачу интерфейса?
Известна его его скорость и структура. Даже не важно что это за интерфейс.

Пытаюсь по первому биту запускать таймер, и с частотой раз в бит увожу контроллер в прерывание, где считываю значение порта.
Но огромное количество ошибок самого разного плана: сдвиг, чтение 1 вместо 0, чтение 0 вместо 1... Не знаю что делать.

Сигнал прямоугольный, так что дело к коде.

Какие есть программные алгоритмы приема сигнала?
sup-sup
Цитата(micronano @ Aug 2 2011, 12:55) *
Всем доброго дня!

Кто-нибудь может подсказать как прочитать передачу интерфейса?
Известна его его скорость и структура. Даже не важно что это за интерфейс.

Пытаюсь по первому биту запускать таймер, и с частотой раз в бит увожу контроллер в прерывание, где считываю значение порта.
Но огромное количество ошибок самого разного плана: сдвиг, чтение 1 вместо 0, чтение 0 вместо 1... Не знаю что делать.

Сигнал прямоугольный, так что дело к коде.

Какие есть программные алгоритмы приема сигнала?

Чем больше известно параметров, тем лучше (если их использовать). Если запуск по первому биту. то это, скорее всего, стартстопный последовательный код. Нужно прочитать все, что найдется про UART (универсальный асинхронный приемо-передатчик).
Нужно отловить середину стартового бита и проконтролировать наличие стопового бита. Если это условие не выполняется, то ждать пока оно выполнится.
tmtlib
я делаю так: по стартовому биту запускаю таймер с периодом в бит, но подправляю его текущее значение на _половину_ бита, затем читаю - таймер попадает в середину каждого бита.
Что за сдвиг? Сколько битов считываешь после запуска таймера?

Если скорости высокие а частота кварца твоего контроллера не делится кратно скорости передачи, то могут быть глюки со сдвигом в ту или иную сторону.

Отладку можно сделать так:

На вход контроллера посылаются данные с компьютера. В контроллер зашита отадочная программа следующего вида: на стартовые биты она дёргает ногу IOn на 3мс. При считывании битов - на 1 мс.
Подключаю ко всему этому делу двухканальный осциллограф: видны два графика. Зелёным - данные поступающие с компьютера, Красным - это то, когда контроллер начинает их "считывать" и показывает это нам, дёргая ногу IOn. По сути когда срабатывает таймер. И смотрю эту временную диаграмму, нет ли глюков.

Я так делал проверку своей программы, там выяснилось, что глюки на высоких скоростях - проблема оптопар и триггеров, а не софта. Так что посмотри, может у тебя там оптопары и триггеры не успевают?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.