|
Проблема с софтовым UART на Mega8, Проблема с софтовым UART на Mega8 |
|
|
|
Jul 28 2008, 22:32
|
Участник

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

|
Уважаемые форумчане. Софтовый уарт принимает не корректно. Передача происходит без проблем, а принимает вместо: Пример: Должен принять 000102030405 принимает FFFFFFFFFFFFF В чем проблема, так и не понял(может настройки пррываний ?). Компилятор IAR. Проверял на Proteus 7.2 Или быть может у кого нибудь есть рабочий софтовый уарт. Скорость нужна макс. 115200. Буду признателен любой помощи. С Уважением, Руслан.
|
|
|
|
|
 |
Ответов
|
Jul 28 2008, 23:27
|
Участник

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

|
Цитата(bgc @ Jul 29 2008, 01:35)  Скорость великовата для софтового... Проверьте на 2400. при большой загрузке процессора это предел. При малой наверное потянет 19200. Но точно не проверял. Пробовал на 115200. Передает нормально а прием нет. У меня есть другой софтовый уарт так он работает как раз на 19200. Неужели 19200 предел ? Кстати прием и передача работают по очереди. Неужели если только принимать, то не получится принять на большей чем 19200 скорости ? А это оригинальный софтовый уарт. Потом я его переделал под IAR(предыдущий аттачмент). Может я где-то напартачил ?
|
|
|
|
|
Jul 29 2008, 13:06
|

кекс
     
Группа: Свой
Сообщений: 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 такта на выборку).
|
|
|
|
|
Jul 29 2008, 14:59
|

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

|
Цитата(=GM= @ Jul 29 2008, 16:43)  5-то зачем? Для того чтобы соответствовать стандарту (обеспечить нормальную работу при 2% отклонении частоты приемника и 2% отклонении частоты передатчика (суммарно 4% отклонение) ). Цитата Ну, для 1Мбода длительность одного бита 16МЦ(тактов), вполне хватит на приём по прерыванию. ну ну, хватит ровно на чтение из порта одной выбоки и задвигание в регистр. Даже на анализ старт/стоп не хватит. Работать будет так же г...но плохо как и то, что в примере автора ветки.
|
|
|
|
|
Jul 29 2008, 16:10
|

кекс
     
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
Ruslan Konovalov Проблема с софтовым UART на Mega8 Jul 28 2008, 22:32  =GM= Цитата(Ruslan Konovalov @ Jul 28 2008, 22... Jul 29 2008, 12:32   MrYuran Цитата(=GM= @ Jul 29 2008, 16:32) для пол... Jul 29 2008, 12:36    =GM= Цитата(MrYuran @ Jul 29 2008, 11:36) Если... Jul 29 2008, 12:42        defunct Цитата(AHTOXA @ Jul 29 2008, 19:29) При т... Jul 29 2008, 16:53         AHTOXA Цитата(defunct @ Jul 29 2008, 22:53) Теор... Jul 29 2008, 18:18          defunct Цитата(AHTOXA @ Jul 29 2008, 21:18) Скоро... Jul 29 2008, 19:03           AHTOXA Цитата(defunct @ Jul 30 2008, 01:03) Не м... Jul 29 2008, 19:56            defunct Цитата(AHTOXA @ Jul 29 2008, 22:56) Там п... Jul 29 2008, 20:36             AHTOXA Цитата(defunct @ Jul 30 2008, 02:36) Поче... Jul 29 2008, 21:23     =GM= defunct ну ну, хватит ровно на чтение из порта одн... Jul 29 2008, 16:20 Ruslan Konovalov Огромное спасибо всем кто отозвался.
Мне было бы д... Jul 29 2008, 18:14 =GM= Цитата(Ruslan Konovalov @ Jul 29 2008, 17... Jul 29 2008, 21:10 _Pasha Цитата(AHTOXA @ Jul 29 2008, 19:29) Потом... Jul 30 2008, 10:57 AHTOXA Цитата(_Pasha @ Jul 30 2008, 16:57) В общ... Jul 30 2008, 11:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|