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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблема с софтовым UART на Mega8, Проблема с софтовым UART на Mega8
Ruslan Konovalov
сообщение Jul 28 2008, 22:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-07-07
Пользователь №: 29 364



Уважаемые форумчане.

Софтовый уарт принимает не корректно.
Передача происходит без проблем, а принимает вместо:
Пример: Должен принять 000102030405
принимает FFFFFFFFFFFFF
В чем проблема, так и не понял(может настройки пррываний ?).
Компилятор IAR. Проверял на Proteus 7.2

Или быть может у кого нибудь есть рабочий софтовый уарт.
Скорость нужна макс. 115200.
Буду признателен любой помощи.

С Уважением,
Руслан.
Прикрепленные файлы
Прикрепленный файл  soft_uart.zip ( 2.35 килобайт ) Кол-во скачиваний: 42
 
Go to the top of the page
 
+Quote Post
bgc
сообщение Jul 28 2008, 22:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



Скорость великовата для софтового... Проверьте на 2400.
при большой загрузке процессора это предел. При малой наверное потянет 19200. Но точно не проверял.


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post
Ruslan Konovalov
сообщение Jul 28 2008, 23:27
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-07-07
Пользователь №: 29 364



Цитата(bgc @ Jul 29 2008, 01:35) *
Скорость великовата для софтового... Проверьте на 2400.
при большой загрузке процессора это предел. При малой наверное потянет 19200. Но точно не проверял.


Пробовал на 115200. Передает нормально а прием нет.
У меня есть другой софтовый уарт так он работает как раз на 19200.
Неужели 19200 предел ? Кстати прием и передача работают по очереди.
Неужели если только принимать, то не получится принять на большей чем 19200 скорости ?



А это оригинальный софтовый уарт.
Потом я его переделал под IAR(предыдущий аттачмент).
Может я где-то напартачил ?
Прикрепленные файлы
Прикрепленный файл  suart_1_.zip ( 2.13 килобайт ) Кол-во скачиваний: 55
 
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 29 2008, 12:32
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Ruslan Konovalov @ Jul 28 2008, 22:27) *
Пробовал на 115200. Передает нормально а прием нет. Кстати прием и передача работают по очереди. Неужели если только принимать, то не получится принять на большей чем 19200 скорости?

Оказывается оригинал написан Питером Данеггером. Зная его дотошность и пунктуальность, могу сказать, что ошибки 100% нет, просто-напросто си-программа приёма не справляется с такой скоростью.

Если вам нужна такая скорость, то пишите на асме, получите существенный выигрыш. Вам для ориентации: для полудуплекса можно легко написать программу приёма и передачи на скорости 1 000 000 бод, а если постараться, то и на 2 Мбодах (с клоком 20МГц).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 29 2008, 12:36
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(=GM= @ Jul 29 2008, 16:32) *
для полудуплекса можно легко написать программу приёма и передачи на скорости 1 000 000 бод, а если постараться, то и на 2 мбодах (с клоком 20МГц).

Если только на это время отказаться от всего остального и запретить прерывания. Может, лучше внешний УАРТ поставить, и общаться через SPI? намного проще и менее ресурсоёмко.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 29 2008, 12:42
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(MrYuran @ Jul 29 2008, 11:36) *
Если только на это время отказаться от всего остального и запретить прерывания

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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 29 2008, 13:06
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Ruslan Konovalov @ Jul 29 2008, 02:27) *
У меня есть другой софтовый уарт так он работает как раз на 19200.
Неужели если только принимать, то не получится принять на большей чем 19200 скорости ?

С кварцем 14.7456 должно тянуть 57600.

ЗЫ: А почему не используете аппаратный?

Цитата(=GM= @ Jul 29 2008, 15:42) *
Ну почему отказаться, приём по прерываниям, основная работа в фоне. Для приёма на таких скоростях лучше, конечно, чтобы других прерываний не было.

5 выборок надо делать. 115200 x 5 = 576kHz (будет всего 16Mhz / 576 = с натягом 32 такта на выборку).
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 29 2008, 13:43
Сообщение #8


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jul 29 2008, 12:06) *
5 выборок надо делать. 115200 x 5 = 576kHz (будет всего 16Mhz / 576 = с натягом 32 такта на выборку)

5-то зачем? Ну, для 1Мбода длительность одного бита 16МЦ(тактов), вполне хватит на приём по прерыванию.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 29 2008, 14:59
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jul 29 2008, 16:43) *
5-то зачем?

Для того чтобы соответствовать стандарту (обеспечить нормальную работу при 2% отклонении частоты приемника и 2% отклонении частоты передатчика (суммарно 4% отклонение) ).

Цитата
Ну, для 1Мбода длительность одного бита 16МЦ(тактов), вполне хватит на приём по прерыванию.

ну ну, хватит ровно на чтение из порта одной выбоки и задвигание в регистр.
Даже на анализ старт/стоп не хватит.
Работать будет так же г...но плохо как и то, что в примере автора ветки.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 29 2008, 15:55
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(defunct @ Jul 29 2008, 17:59) *
Для того чтобы соответствовать стандарту (обеспечить нормальную работу при 2% отклонении частоты приемника и 2% отклонении частоты передатчика (суммарно 4% отклонение) ).

В стандарте не прописано число выборок. Вообще нет такого понятия. Хотя, аппаратно используется обычно 5. % отклонения частоты также никак не связан с числом выборок.

Очевидно, что чем больше выборок, тем точнее восстановление сигнала (в плане помехозащищённости), но если принять за основу что сигнал идёт без помех, то число выборок не влияет ни на что (при обнаружении старта). А 3 вполне достаточно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 29 2008, 16:10
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Jul 29 2008, 18:55) *
В стандарте не прописано число выборок. Вообще нет такого понятия. Хотя, аппаратно используется обычно 5. % отклонения частоты также никак не связаны с числом выборок.

Связаны если выборками отлавливать момент смены сигнала.
И связаны ровно настолько, насколько интервалов разбивается один бит этими выборками.
при пяти выборках получим сл. картину (каждая выборка покрывает 20% интервала одного бита):

[1][2][3][4][5]

Если в [1] словили смену сигнала, и начали читать данные в момент [3], то у нас есть запас 40% отклонения интервала в обе стороны. И если смены сигнала более за кадр не произойдет (напр передается 0xFF или 0x00), то к приему последнего "стоп" бита сигнал может уплыть на 40% в любую сторону без риска искажения данных. Теперь что такое 40%, - это 40% / 10 бит на кадр = 4% отклонение частоты приемника от передатчика.

Цитата
Очевидно, что чем больше выборок, тем точнее восстановление сигнала (в плане помехозащищённости), но если принять за основу что сигнал идёт без помех, то число выборок не влияет ни на что (при обнаружении старта). А 3 вполне достаточно.

я не говорил о выборках с последующим усреднением.
Я использую несколько выборок для подсихронизации.

Например если смена сигнала произошла на выборке [1] бита i, см иллюстрацию ниже, то устойчивое состояние бита можно брать с выборки [3], затем для бита i+1 смена сигнала проиcходит на выбоке [2], значит устойчивое состояние бита нужно бать уже не с выборки [3], а с выборки [4].

Код
[----бит-i----][----бит-i+1--]....
[1][2][3][4][5][1][2][3][4][5]....
-------^-----------------^----....

_|----------------|___________ сигнал
  
--------------------------------------->t
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 29 2008, 16:20
Сообщение #12


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



defunct ну ну, хватит ровно на чтение из порта одной выбоки и задвигание в регистр.

Времени хватит на всё, даже на сохранение принятого байта в циклическом буфере, если надо.
Ну вы творчески можете подойти к проблеме, или только всё огульно хаять сходу?

defunct Даже на анализ старт/стоп не хватит.

Ну старт бит я ещё понимаю, а стоп-бит зачем анализировать?

defunct Работать будет так же г...но плохо как и то, что в примере автора ветки.

Программа написана Питером Данеггером, я его знаю более 10 лет, и бился с ним время от времени на одном из английских сайтов, нормальный кодер, и программы делает добротные.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 29 2008, 16:29
Сообщение #13


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(defunct @ Jul 29 2008, 22:10) *
Связаны если выборками отлавливать момент смены сигнала.


В приведённом примере начало старт-бита отлавливается модулем захвата. Потом им же засекается длительность полтора бита (чтобы попасть на середину первого бита), потом восемь раз длительность одного бита (чтобы попасть на середины последующих битов). При таком подходе точность даже больше, чем при пяти выборках на бит.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 29 2008, 16:53
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(AHTOXA @ Jul 29 2008, 19:29) *
При таком подходе точность даже больше, чем при пяти выборках на бит.

Теоретически - больше.
А на практике - определяется "скоростью реакции обработчика и точностью установки/переустановки таймера". плюс нет подсинхронизации по каждой смене уровня сигнала, а значит на кадрах 0x55 и подобных (где смены уровня происходят чаще одного раза) точность будет хуже.

Цитата(=GM= @ Jul 29 2008, 19:20) *
Времени хватит на всё, даже на сохранение принятого байта в циклическом буфере, если надо.

Вы оптимист.
4 такта вход в прерывание, 5 тактов выход (сохранение SREG учтено), 3 такта макс джиттер (прерывание в момент выполнения длинной команды)
остается 4-7 тактов на полезную работу, считайте на что их хватит.

Цитата
Ну старт бит я ещё понимаю, а стоп-бит зачем анализировать?

На случай если на линии будет долгое время присутствовать 0, чтобы не получить непрерывную лапшу нулевых байт которых на самом деле нет.

Цитата
Программа написана Питером Данеггером, я его знаю более 10 лет, и бился с ним время от времени на одном из английских сайтов, нормальный кодер, и программы делает добротные.

Что-то не пойму, неправильная работа программы, может быть оправдана квалификацией автора?!
Если автор "нормальный кодер", то программа не может быть нерабочей, это только нам кажется, что она нерабочая и принимает 0xFF FF FF вместо посылаемых данных?
Go to the top of the page
 
+Quote Post
Ruslan Konovalov
сообщение Jul 29 2008, 18:14
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-07-07
Пользователь №: 29 364



Огромное спасибо всем кто отозвался.
Мне было бы достаточно работать на скорости 115200.
Большая скорость не нужна.
Мне нужно использовать именно 2 уарта.
Аппаратный уарт уже занят.
Может кто нибудь имел дело с софтовым уартом на скорости 57600-115200 ?
Не знаю что я делаю не так.
Пример, который я привел нормально не работает даже на скорости 9600.
Проверял в протеусе.
Спасибо за ответы.
Go to the top of the page
 
+Quote Post

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

 


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


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