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

 
 
 
Reply to this topicStart new topic
> Проблемы с UART
_VoRoN_
сообщение Aug 11 2006, 05:15
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 3-07-06
Из: Россия, Краснодар
Пользователь №: 18 530



Есть МК AT89S8252 и есть задача, в соответствии с которой необходимо получать байт данных по последовательному каналу, а затем сразу же его передавать, т.о. образом получается как бы буфер. Скорости обмена: 9600, 38400 и 115200.
Частота кварца 22118,2 кГц (хотя пробывал и на 24000кГц).
Проблема состоит в следующем: отказывается правильно работать с данными на скорости 115200. Хотя, на 9600 работает нормально (ошибки 5%), а на 38400 просто работает (ошибки ~20%). Если судить по осциллографу, то получается что передаваемые МК данные искажены по сравнению с поступающими на вход Rx. Следствие это ошибки при приеме или передаче, или в обоих случаях определить не удалось. Такое ощущение, что просто не попадаю с частотой, но данные беру из даташитов, да и вычислениями проверял - все сходится. И что я только не пробывал, результата нет.
Вот примеры, как я инициализирую UART и настраиваю скорость обмена:

Версия для Т1:

SCON=0xd8; //reg. UART - 3, razr. priema., 9-i bit=1
TMOD=0x21; //T1 - reg.2, T0 - reg.1
TCON=0;
PCON=0x80; //skorost` *2
TL1=TH1=0xff; //115200
TR1=1; //run timer UART
IP=0;
IE=0x90; //Global, UART

Версия для Т2:

T2MOD = 0x00;
PCON = 0x80; //бит SMOD. Удвоение скорости обмена UART
SCON = 0xd8; //настройка UART. Режим 3 - 9-бит, разрешение приема, 9-й бит=1
TH2 = RCAP2H = 0xff; //загрузка Т2 исходя из выбранной скорости обмена-115200
TL2 = RCAP2L = 0xfa; //
T2CON = 0x30; //настройка Т2. Т2-задающий генератор UART
TI=RI = 0; //cброс флагов прерывания UART
TR2 = 1;
//настройка прерываний
IE = 0x90; //Общее, UART

Были попытки синхронизировать прием и передачу от разных таймеров (Т0 и Т1), результат опять же отрицательный.
Если кто-нибудь чем нибудь сможет помочь, буду очень благодарен help.gif
Go to the top of the page
 
+Quote Post
lks
сообщение Aug 11 2006, 10:48
Сообщение #2


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(_VoRoN_ @ Aug 11 2006, 09:15) *


мне приходилось программировать этот МК на скорости 9600 - проблем не было.
можно попробовать вместо резонатора поставить внешний генератор тактовых сигналов и посмотреть насколько это влияет на ошибки.
и второй путь - попробовать поставить качественный компаратор прямо перед входом Rx.
Есть еще один путь - попробовать реализовать канал программным путем - я так один раз делел. Подать на вход линии прерывания INT1 (допустим) и еще на другой любой вход - сигнал Rx. После прихода стартового бита и перехода по прерыванию - обрабатываете эту ситуацию программно. Преимущество в том, что можно задержки немного "подвигать туда-сюда".
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 17:59
Рейтинг@Mail.ru


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