Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART в F169
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
akostin
В чем отличие 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;
akostin
Решил включить бит 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              нет прерывания, ничего не принято

и т.д. и т.п.


Что может быть? Бракованный контроллер?
rezident
Попробуйте не 0x4A, а 0xA4 в регистр модуляции записывать.
Shread
То, что компьютер принимает данные верно еще не говорит о точности установки скорости обмена.
Скорее даже может насторожить: если допустимый разброс по входным скоростям для компового порта будет больше, чем для такого же у системы-будет такой же результат. Чтобы исключить такой расклад, попробуйте поставить более высокочастотный резонатор, чтобы более корректно установить скорость обмена. Если эффект пропадет, значит дело именно в этом. В таком случае могу посоветовать такой вариант в конечном устройтстве: тактировать от DCO, и корректировать последний, по часовому кварцу(таймером считать количество тактов DCO на такт кварца), сам делал так на 1121, еще и с программным уартом.
rezident
Насчет DCO совет вполне разумный, но при этом возможно придется еще и временнУю перекалибровку DCO в зависимости от температуры делать. Все-таки температурный дрейф DCO чуть ли не 0,5% на градус.
По поводу самого дефекта тоже не очень ясно. Раз даже с внутренним LOOPBACK не работает корректно.
Dog Pawlowa
Цитата(akostin @ Mar 5 2007, 17:51) *
В чем отличие UART в F169 от UART в F149 ?
Все работало нормально на F149, на сотнях приборов, но когда я перешел на F169, UART стал некорректно работать на прием, искажает передаваемые ему байты, пропускает некоторые...

1. Я переходил дважды - с 149 на 169, а потом обратно, без всяких проблем, правда при синхронизации от часового кварца использую скорость передачи не больше 1200. То есть UARTы одинаковы.
2. Пропуск байтов не очень то объясним отклонением частоты, так как стартовый бит должен обнаруживаться, если байты следуют не в потоке. Так что ощущение ошибочное.
3. Судя по искажению информации, возникают лишние единицы. Такое не может сгенерировать UART в микроконтроллере.

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

Я делаю так: посылки подкреплены контрольной суммой, если она не совпадает, перекалибровываю DCO. Протокол в этих девайсах-Modbus, потому проблем нет.
jorikdima
я так же пробовал UART на 9600 на 149 и 169 контроллерах. проблем не было
akostin
Всем спасибо. Объяснение нашлось в Errata slaz018A.
В контроллерах F169 Rev."B" и "C" присутствует неустранимая программно ошибка US14, которая заключается в пропуске стартового бита при UxBR0=3.
При UxBR0>3 ошибка не наблюдается. Так что в своем макете я буду использовать скорость 4800 вместо 9600.
Мой контроллер был куплен в 2004-2005 годах, а в более новых (Rev "D" и выше) этой ошибки нет.

Цитата
В таком случае могу посоветовать такой вариант в конечном устройтстве: тактировать от DCO, и корректировать последний, по часовому кварцу

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

Тут дело не в точности кварца-в ней сомнений нет. Другое дело, получить заданную скорость уарта, с заданной точностью. Попробуйте посчитать точность уарта, даже на 9600, при тактовой 32768кГц.
Я пользую более шустрый порт, там вообще без вариантов, просто от часового никогда не попадает в нужную скорость. При этом прибор портативный, и у процессора 1121 нету порта, для второго осциллятора. Приходится обходиться чем, что есть. Программный FLL так сказать=)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.