|
|
  |
UART в F169 |
|
|
|
Mar 5 2007, 16:51
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 4-12-04
Пользователь №: 1 322

|
В чем отличие UART в F169 от UART в F149 ? Все работало нормально на F149, на сотнях приборов, но когда я перешел на F169, UART стал некорректно работать на прием, искажает передаваемые ему байты, пропускает некоторые. Такое ощущение, что не совпадает частота передатчика (компьютера) и премника (F169), но в обратном направлении F169->PC все передается четко, значит кварц нормальный. Тактируется UART от 32768 Гц, работает на 9600. Попробовал и UART0 и UART1 - результат одинаков. Попробовать другой кристалл не могу за неимением. Код инициализации привожу. Код UCTL1=SWRST; UCTL1+=CHAR; UTCTL1=SSEL0+TXEPT; URCTL1=0;
U1BR0=3; // 9600 U1BR1=0; UMCTL1=0x4A;
_bis(UTXE1+URXE1,ME2);
_bic(SWRST,UCTL1);
_bic(URXIFG1,IFG2); _bis(URXIE1,IE2);
P3SEL=BIT6+BIT7;
|
|
|
|
|
Mar 5 2007, 17:36
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 4-12-04
Пользователь №: 1 322

|
Решил включить бит LISTEN для приема передаваемых символов. Получил таблицу искажения байтов: Код посылаю принимаю
0 нет прерывания, ничего не принято 1 или 1 или 192 (1100 0000) 2, 3 224 (1110 0000) 4, 6, 7 240 (1111 0000) 5 193 (1100 0001) 8 248 (1111 1000) 9 194 (1100 0010) 10 225 (1110 0001) ... 222 255 (1111 1111) 223 255 (1111 1111) 224 нет прерывания, ничего не принято
и т.д. и т.п. Что может быть? Бракованный контроллер?
|
|
|
|
|
Mar 5 2007, 21:40
|
иногда заглядывающий
   
Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170

|
То, что компьютер принимает данные верно еще не говорит о точности установки скорости обмена. Скорее даже может насторожить: если допустимый разброс по входным скоростям для компового порта будет больше, чем для такого же у системы-будет такой же результат. Чтобы исключить такой расклад, попробуйте поставить более высокочастотный резонатор, чтобы более корректно установить скорость обмена. Если эффект пропадет, значит дело именно в этом. В таком случае могу посоветовать такой вариант в конечном устройтстве: тактировать от DCO, и корректировать последний, по часовому кварцу(таймером считать количество тактов DCO на такт кварца), сам делал так на 1121, еще и с программным уартом.
|
|
|
|
|
Mar 6 2007, 04:34
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(akostin @ Mar 5 2007, 17:51)  В чем отличие UART в F169 от UART в F149 ? Все работало нормально на F149, на сотнях приборов, но когда я перешел на F169, UART стал некорректно работать на прием, искажает передаваемые ему байты, пропускает некоторые... 1. Я переходил дважды - с 149 на 169, а потом обратно, без всяких проблем, правда при синхронизации от часового кварца использую скорость передачи не больше 1200. То есть UARTы одинаковы. 2. Пропуск байтов не очень то объясним отклонением частоты, так как стартовый бит должен обнаруживаться, если байты следуют не в потоке. Так что ощущение ошибочное. 3. Судя по искажению информации, возникают лишние единицы. Такое не может сгенерировать UART в микроконтроллере. Выводы и предположения. 1. Причина в чем-то еще, например в физическом интерфейсе. УАРТы меняли как? По тому же физическому интерфейсу или по разным? Осциллографом посмотреть можно?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 6 2007, 14:36
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 4-12-04
Пользователь №: 1 322

|
Всем спасибо. Объяснение нашлось в Errata slaz018A. В контроллерах F169 Rev."B" и "C" присутствует неустранимая программно ошибка US14, которая заключается в пропуске стартового бита при UxBR0=3. При UxBR0>3 ошибка не наблюдается. Так что в своем макете я буду использовать скорость 4800 вместо 9600. Мой контроллер был куплен в 2004-2005 годах, а в более новых (Rev "D" и выше) этой ошибки нет. Цитата В таком случае могу посоветовать такой вариант в конечном устройтстве: тактировать от DCO, и корректировать последний, по часовому кварцу Shred, могу поспорить. Если калибровать DCO от часового кварца, в точности которого вы не уверены, то почему вы решили, что DCO, откалиброванный таким образом будет выдавать "правильную" частоту? В нем будет то же отклонение, плюс собственная нестабильность. Считаю, что такой прием хорош только тогда, когда требуется скорость обмена выше 9600, но нет высокочастотного кварца.
|
|
|
|
|
Mar 6 2007, 16:12
|
иногда заглядывающий
   
Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170

|
Цитата Shred, могу поспорить. Если калибровать DCO от часового кварца, в точности которого вы не уверены, то почему вы решили, что DCO, откалиброванный таким образом будет выдавать "правильную" частоту? В нем будет то же отклонение, плюс собственная нестабильность. Считаю, что такой прием хорош только тогда, когда требуется скорость обмена выше 9600, но нет высокочастотного кварца. Тут дело не в точности кварца-в ней сомнений нет. Другое дело, получить заданную скорость уарта, с заданной точностью. Попробуйте посчитать точность уарта, даже на 9600, при тактовой 32768кГц. Я пользую более шустрый порт, там вообще без вариантов, просто от часового никогда не попадает в нужную скорость. При этом прибор портативный, и у процессора 1121 нету порта, для второго осциллятора. Приходится обходиться чем, что есть. Программный FLL так сказать=)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|