Софтверный uart на 8 каналов.

Hello, All!

Кто-то помнится говорил, что подобное на микроконтроллерах делал? Жду советов, критику, комментарии. Значит 8 линий uart. Инициализатором связи выступаю я, так что могу засинхронизировать передачу. Связь на частоте 9600. Пакет 23 байта. С приемом сложно. Hо думаю может поступить так: Задействовать таймер с помощью которого вызывать прерывания с восьмикратной частотой - 76.8Кгц (или надо 16-кратную?). В прерываниях записывать только состояния входов в массив. Под массив выделить

256 байт. После записи половины, т.е. 128 байт, обрабатывать полученную половину. Если использовать кварц на 14,7456, то на обработку останется 20 000 тактов, надеюсь что с обработкой успею. Как сделать более эффективно?

With best regards, Igor. Time: 19:02 Date: 31 Окт 05

Reply to
Igor Ulanov
Loading thread data ...

Mon Oct 31 2005 18:21, Igor Ulanov wrote to All:

IU> Значит 8 линий uart. Инициализатором связи выступаю я, так что могу IU> засинхронизировать передачу. Связь на частоте 9600. Пакет 23 байта. С IU> приемом сложно. Hо думаю может поступить так: Задействовать таймер с IU> помощью которого вызывать прерывания с восьмикратной частотой - 76.8Кгц IU> (или надо 16-кратную?)

Достаточно 3-кратной и вообще какая разница, один софтовый UART или восемь. IU> Как сделать более эффективно?

Взять и сделать.

VLV

"Зачем стадам дары свободы? Их надо резать или стричь" (Пушкин)

Reply to
Vladimir Vassilevsky

Hello, Vladimir!

(31 Окт 05 19:31), Vladimir Vassilevsky писАл Igor Ulanov: VV> Достаточно 3-кратной и вообще какая разница, один софтовый UART или VV> восемь. Прием сигнала асинхронный. Мне же надо привязываться к старт-биту каждого канала. Или нет?

With best regards, Igor. Time: 20:28 Date: 31 Окт 05

Reply to
Igor Ulanov

Mon Oct 31 2005 19:28, Igor Ulanov wrote to Vladimir Vassilevsky:

VV>> Достаточно 3-кратной и вообще какая разница, один софтовый UART или VV>> восемь.

IU> Прием сигнала асинхронный. Мне же надо привязываться к старт-биту IU> каждого канала. Или нет?

Какая разница: UART uart или UART *uart = new UART[8].

VLV

"Зачем стадам дары свободы? Их надо резать или стричь" (Пушкин)

Reply to
Vladimir Vassilevsky

Hello, Vladimir!

(31 Окт 05 20:52), Vladimir Vassilevsky писАл Igor Ulanov:

Я про время которое понадобится для обработки каждого канала. Hо вообще-то ладно. Завтра на работе попробую и хоть что-то станет понятно.

With best regards, Igor. Time: 21:46 Date: 31 Окт 05

Reply to
Igor Ulanov

Mon Oct 31 2005 20:46, Igor Ulanov wrote to Vladimir Vassilevsky:

IU> Я про время которое понадобится для обработки каждого канала. Hо IU> вообще-то ладно. Завтра на работе попробую и хоть что-то станет понятно.

Прерывания на 9600 x 3 = 28800 легко отработает любой МК. Дальше просто N одинаковых машин состояний для каждого канала.

VLV

"Зачем стадам дары свободы? Их надо резать или стричь" (Пушкин)

Reply to
Vladimir Vassilevsky

IU>> Я про время которое понадобится для обработки каждого канала. Hо IU>> вообще-то ладно. Завтра на работе попробую и хоть что-то станет понятно. VV> Прерывания на 9600 x 3 = 28800 легко отработает любой МК. Дальше просто N VV> одинаковых машин состояний для каждого канала.

Интересно, можно ли всю работу УАПП описать логическими операциями над байтами и в таком виде закодировать в МК. Можно конечо. Интересно, насколько это получится еффективно, может очень даже?

Reply to
Kirill Frolov

Vladimir, ты ещё здесь сидишь?

Понедельник Октябрь 31 2005 22:47, Vladimir Vassilevsky wrote to Igor Ulanov:

IU>> Я про время которое понадобится для обработки каждого канала. Hо IU>> вообще-то ладно. Завтра на работе попробую и хоть что-то станет IU>> понятно. VV> Прерывания на 9600 x 3 = 28800 легко отработает любой МК.

Лучше не 3 раза на бит проверять, а на 6. Чтобы ближе к середине информационного бита состояние считывать.

VV> Дальше просто N одинаковых машин состояний для каждого канала.

Причём в прерываниях может только вырабатываться флажок изменения состояния каждого из каналов, а "окончательная" обработка производиться вне обработчика, так уменьшатся требования к рабочей частоте контроллера...

Георгий

Reply to
George Shepelev

Wed Nov 02 2005 02:21, George Shepelev wrote to Vladimir Vassilevsky:

VV>> Прерывания на 9600 x 3 = 28800 легко отработает любой МК. GS> Лучше не 3 раза на бит проверять, а на 6. Чтобы ближе к середине GS> информационного бита состояние считывать. Да-да. А еще лучше не 6, а сразу уж на 256. Больше не надо, так как в u8 число не поместится и упадет эффективность. GS> Причём в прерываниях может только вырабатываться флажок изменения GS> состояния каждого из каналов,

Академик, а слабо вам написать UART на 9600 при частоте прерываний 32kHz? Мне как-то пришлось. Работало замечательно...

VLV

"За лучшего из хоббитов - Гарри Поттера!"

Reply to
Vladimir Vassilevsky

Hello Igor.

Mon Oct 31 2005 19:21, Igor Ulanov wrote to All:

IU> Кто-то помнится говорил, что подобное на микроконтроллерах делал? ... IU> использовать кварц на 14,7456, то на обработку останется 20 000 IU> тактов,

МК-то какой у тебя?

IU> надеюсь что с обработкой успею. Как сделать более эффективно?

Более эффективно - с помощью compare/capture.

Dimmy.

Reply to
Dimmy Timchenko

Wed Nov 02 2005 03:58, Vladimir Vassilevsky wrote to George Shepelev:

VV> написать UART на 9600 при частоте прерываний 32kHz? VV> Мне как-то пришлось. Работало замечательно...

А можно поподробнее про его характеристики:

- возможность настройки на разные битрейты;

- количество выборок на бит;

- используемые аппаратные ресурсы (таймеры, устройства захвата/сравнения, DMA, etc.);

- требования к точности тактовых генераторов;

- проверка стартового и стопового бита на корректность;

- контроль паритета;

- работало ли во время приема что-либо "в фоне".

С уважением, Денис

Reply to
Denis Y. Borisov

Vladimir, ты ещё здесь сидишь?

Среда Hоябрь 02 2005 04:58, Vladimir Vassilevsky wrote to George Shepelev:

VV>>> Прерывания на 9600 x 3 = 28800 легко отработает любой МК. GS>> Лучше не 3 раза на бит проверять, а на 6. Чтобы ближе к середине GS>> информационного бита состояние считывать. VV> Да-да. А еще лучше не 6, а сразу уж на 256.

Hе, это уже перебор ;)

GS>> Причём в прерываниях может только вырабатываться флажок изменения GS>> состояния каждого из каналов, VV> Академик, а слабо вам написать UART на 9600 при частоте прерываний VV> 32kHz? Мне как-то пришлось. Работало замечательно...

Вижу, ты знаешь толк в извращениях! ;)))

Работать-то может, но резко повысятся требования к точности тактовой частоты, ибо анализ сигнала станет неоптимальным - появится "дрожание" момента выборки...

Георгий

Reply to
George Shepelev

Wed Nov 02 2005 09:46, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> написать UART на 9600 при частоте прерываний 32kHz? VV>> Мне как-то пришлось. Работало замечательно...

DYB> А можно поподробнее про его характеристики: DYB> - возможность настройки на разные битрейты;

Требовалось только 4800 и 9600 В принципе можно сделать абсолютно любую скорость, меньшую чем ~10kbit/s.

DYB> - количество выборок на бит;

Частота прерываний/битрейт.

DYB> - используемые аппаратные ресурсы (таймеры, устройства DYB> захвата/сравнения, DMA, etc.);

Все софтверно по прерываниям.

DYB> - требования к точности тактовых генераторов;

Обычные требования. Чтобы за 8 бит не гуляли более чем на ~10% от длительности бита.

DYB> - проверка стартового и стопового бита на корректность;

Разумеется.

DYB> - контроль паритета;

Hе делал за ненадобностью. Cделать - никаких проблем.

DYB> - работало ли во время приема что-либо "в фоне".

Вся машина состояний UART вертелась внутри прерывания.

VLV

"За лучшего из хоббитов - Гарри Поттера!"

Reply to
Vladimir Vassilevsky

VV>> Достаточно 3-кратной и вообще какая разница, один софтовый UART или VV>> восемь. IU> Прием сигнала асинхронный. Мне же надо привязываться к старт-биту каждого IU> канала. Или нет?

Hадо. Примерно baudrate*8 опросов линии данных в секунду достаточно имhо. У аппараттного УАПП baudrate*16.

Reply to
Kirill Frolov

Wed Nov 02 2005 20:10, Kirill Frolov wrote to Igor Ulanov:

IU>> Прием сигнала асинхронный. Мне же надо привязываться к старт-биту IU>> каждого канала. Или нет?

KF> Hадо. Примерно baudrate*8 опросов линии данных в секунду достаточно KF> имhо.

Чушь.

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

KF> У аппараттного УАПП baudrate*16.

От бедности и неумения. VLV

"За лучшего из хоббитов - Гарри Поттера!"

Reply to
Vladimir Vassilevsky

Hello George.

Wed Nov 02 2005 14:12, George Shepelev wrote to Vladimir Vassilevsky:

GS> Работать-то может, но резко повысятся требования к точности тактовой GS> частоты, ибо анализ сигнала станет неоптимальным - появится "дрожание" GS> момента выборки...

Особенно если каналы дуплексные...

Dimmy.

Reply to
Dimmy Timchenko

Thu Nov 03 2005 00:42, Vladimir Vassilevsky wrote to Kirill Frolov:

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

В худшем случае можно прозевать половину старт-бита. Тогда середину стоп-бита нужно ждать точно через то же время, через какое ее послал передатчик, потому что дольше ждать нельзя - это уже другой фрейм, т. е. у приемника и передатчика должны быть идеально равные тактовые частоты. Повысить допустимый разброс до 0.5 бита можно, если запускать приемник по спаду на его входе. Тогда получим допустимый разброс 0.5 / 10 = 5%. Но и в этом случае нет никакой помехозащищенности - если одна из двух выборок будет во время прохождения помехи, то с вероятностью 50% будет считано не то значение, которое было послано.

С уважением, Денис

Reply to
Denis Y. Borisov

Thu Nov 03 2005 10:31, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> Его состояние полностью описывается двумя выборками на бит. DYB> В худшем случае можно прозевать половину старт-бита. Две выборки - предельный случай. Если эти выборки аналоговые, а не бинарные - этого достаточно для приема сигнала без потерь. Если сигнал бинарный, то практически достаточно 3-4 выборок, чтобы потери в SNR не превышали ~3dB.

DYB> Hо и в этом случае нет никакой помехозащищенности - если одна из двух DYB> выборок будет во время прохождения помехи, то с вероятностью 50% будет DYB> считано не то значение, которое было послано.

Применять UART там, где есть помехи - бессмысленно и бесполезно.

VLV

"За лучшего из хоббитов - Гарри Поттера!"

Reply to
Vladimir Vassilevsky

Vladimir, ты ещё здесь сидишь?

Среда Hоябрь 02 2005 14:12, George Shepelev wrote to Vladimir Vassilevsky:

VV>>>> Прерывания на 9600 x 3 = 28800 легко отработает любой МК. GS>>> Лучше не 3 раза на бит проверять, а на 6. Чтобы ближе к GS>>> середине информационного бита состояние считывать. VV>> Да-да. А еще лучше не 6, а сразу уж на 256. GS> Hе, это уже перебор ;)

Кстати, поразмыслив соглашаюсь, что оптимальное положение выборки во времени получается при нечётной константе. Так что брать 5 или 7.

Георгий

Reply to
George Shepelev

Vladimir, ты ещё здесь сидишь?

Четверг Hоябрь 03 2005 01:42, Vladimir Vassilevsky wrote to Kirill Frolov:

IU>>> Прием сигнала асинхронный. Мне же надо привязываться к IU>>> старт-биту каждого канала. Или нет? KF>> Hадо. Примерно baudrate*8 опросов линии данных в секунду KF>> достаточно имhо. VV> Чушь. VV> Сигнал циклостатический. Его состояние полностью описывается двумя VV> выборками на бит.

Да, но только в идеальных условиях, когда частота выдерживается абсолютно точно и фронты сигнала от наводок не "плавают".

KF>> У аппараттного УАПП baudrate*16. VV> От бедности и неумения.

От понимания, насколько реальность отличается от идеальных условий. Ещё частенько используют мажоритарную логику, устраняющую сбои от импульсных помех, а это требует как минимум трёх выборок вместо одной твоей...

Георгий

Reply to
George Shepelev

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.