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

 
 
 
Reply to this topicStart new topic
> UART в F169
akostin
сообщение Mar 5 2007, 16:51
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
akostin
сообщение Mar 5 2007, 17:36
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 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              нет прерывания, ничего не принято

и т.д. и т.п.


Что может быть? Бракованный контроллер?
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 5 2007, 17:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Попробуйте не 0x4A, а 0xA4 в регистр модуляции записывать.
Go to the top of the page
 
+Quote Post
Shread
сообщение Mar 5 2007, 21:40
Сообщение #4


иногда заглядывающий
****

Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170



То, что компьютер принимает данные верно еще не говорит о точности установки скорости обмена.
Скорее даже может насторожить: если допустимый разброс по входным скоростям для компового порта будет больше, чем для такого же у системы-будет такой же результат. Чтобы исключить такой расклад, попробуйте поставить более высокочастотный резонатор, чтобы более корректно установить скорость обмена. Если эффект пропадет, значит дело именно в этом. В таком случае могу посоветовать такой вариант в конечном устройтстве: тактировать от DCO, и корректировать последний, по часовому кварцу(таймером считать количество тактов DCO на такт кварца), сам делал так на 1121, еще и с программным уартом.
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 6 2007, 00:46
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Насчет DCO совет вполне разумный, но при этом возможно придется еще и временнУю перекалибровку DCO в зависимости от температуры делать. Все-таки температурный дрейф DCO чуть ли не 0,5% на градус.
По поводу самого дефекта тоже не очень ясно. Раз даже с внутренним LOOPBACK не работает корректно.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 6 2007, 04:34
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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. Причина в чем-то еще, например в физическом интерфейсе.
УАРТы меняли как? По тому же физическому интерфейсу или по разным?
Осциллографом посмотреть можно?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Shread
сообщение Mar 6 2007, 14:22
Сообщение #7


иногда заглядывающий
****

Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170



Цитата(rezident @ Mar 6 2007, 00:46) *
Насчет DCO совет вполне разумный, но при этом возможно придется еще и временнУю перекалибровку DCO в зависимости от температуры делать. Все-таки температурный дрейф DCO чуть ли не 0,5% на градус.
По поводу самого дефекта тоже не очень ясно. Раз даже с внутренним LOOPBACK не работает корректно.

Я делаю так: посылки подкреплены контрольной суммой, если она не совпадает, перекалибровываю DCO. Протокол в этих девайсах-Modbus, потому проблем нет.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Mar 6 2007, 14:32
Сообщение #8


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



я так же пробовал UART на 9600 на 149 и 169 контроллерах. проблем не было
Go to the top of the page
 
+Quote Post
akostin
сообщение Mar 6 2007, 14:36
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 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, но нет высокочастотного кварца.
Go to the top of the page
 
+Quote Post
Shread
сообщение Mar 6 2007, 16:12
Сообщение #10


иногда заглядывающий
****

Группа: Свой
Сообщений: 900
Регистрация: 18-05-05
Из: Зеленоград
Пользователь №: 5 170



Цитата
Shred, могу поспорить. Если калибровать DCO от часового кварца, в точности которого вы не уверены, то почему вы решили, что DCO, откалиброванный таким образом будет выдавать "правильную" частоту? В нем будет то же отклонение, плюс собственная нестабильность. Считаю, что такой прием хорош только тогда, когда требуется скорость обмена выше 9600, но нет высокочастотного кварца.

Тут дело не в точности кварца-в ней сомнений нет. Другое дело, получить заданную скорость уарта, с заданной точностью. Попробуйте посчитать точность уарта, даже на 9600, при тактовой 32768кГц.
Я пользую более шустрый порт, там вообще без вариантов, просто от часового никогда не попадает в нужную скорость. При этом прибор портативный, и у процессора 1121 нету порта, для второго осциллятора. Приходится обходиться чем, что есть. Программный FLL так сказать=)
Go to the top of the page
 
+Quote Post

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

 


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


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