реклама на сайте
подробности

 
 
> Алгоритм считывания передачи
micronano
сообщение Aug 2 2011, 09:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 13-10-10
Пользователь №: 60 133



Всем доброго дня!

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

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

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

Какие есть программные алгоритмы приема сигнала?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
sup-sup
сообщение Aug 2 2011, 17:50
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997



Цитата(micronano @ Aug 2 2011, 12:55) *
Всем доброго дня!

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

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

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

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

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

Сообщение отредактировал sup-sup - Aug 2 2011, 17:52
Go to the top of the page
 
+Quote Post
tmtlib
сообщение Aug 3 2011, 04:25
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 200
Регистрация: 30-10-10
Пользователь №: 60 531



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

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

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

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

Я так делал проверку своей программы, там выяснилось, что глюки на высоких скоростях - проблема оптопар и триггеров, а не софта. Так что посмотри, может у тебя там оптопары и триггеры не успевают?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.02436 секунд с 7
ELECTRONIX ©2004-2016