Перейти к содержанию
    

UART Baud Generator. Регистр UxMCTL

Как правильно рассчитать значение регистра UxMCTL?

 

Pls, объясните почему нижеперечисленные источники дают разные результаты:

1. slau056g MSP430x4xx family User Guide (или slau049e)

2. slaa024 MSP430 Family Mixed-Signal Microcontroller Application Reports

3. Программа MSP430-UART v2005.02.06 by Alexander Konuzin

4. Своя программа, считающая как описано в slau056g (выдает такой же результат для рассмотренного в User Guide примера - 32768/2400) и минимизирующая максимальную ошибку каждого бита.

5. Несколько чужих example'ов, использующих для одинаковых "байтов" разные UxMCTL

 

Какая идея положена в основу, что оптимизируется?

Если предположить, что п.1-3 используют одинаковый алгоритм, тогда чем отличаются начальные условия для каждого случая?

 

ЗЫ. Раньше просто слепо верил источнику #3. А тут нарисовалось немного свободного времени, решил разобраться и накропать свою более функциональную утилитку. И наступил на грабли %(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЗЫ. Раньше просто слепо верил источнику #3. А тут нарисовалось немного свободного времени, решил разобраться и накропать свою более функциональную утилитку. И наступил на грабли %(
Александр сказал по этому поводу следующее: "пока программой пользуются не задумываясь - она всех устраивает, как только начинают думать - находят какието ошибки". Если есть дельные замечания можете пообщаться с ним по указанному в программе емайлу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю здесь главное чтобы отклонение длительности еденичного периода клока UART от точного значения попадало в указанные в даташите рамки. кто-то ищет самое оптимальное решение, а кто-то принимает первое попавшее в диапазон допустимых значений. сам писал в экселе программку нахождения самого лучшего значения регистра. если найду этот эксельник - выложу вечером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Александр сказал по этому поводу следующее: "пока программой пользуются не задумываясь - она всех устраивает, как только начинают думать - находят какието ошибки". Если есть дельные замечания можете пообщаться с ним по указанному в программе емайлу.

Ошибок я не нашел. Я нашел несоответствие.

А теперь я просто хочу выяснить когда чем пользоваться. Т.е. выяснить условия, при которых верен тот или иной результат.

 

 

сам писал в экселе программку нахождения самого лучшего значения регистра. если найду этот эксельник - выложу вечером.

Прикольно будет, если Ваш xls выдаст что-то свое, что-то новенькое. Тогда добавлю его шестым пунктом и пойду спокойно пить пиво, махнув на все рукой. Ведь работало же все и без этого "ковыряния в мозгах"

 

 

Проверил по памяти одно значение - с моей программой сходится, а с user guide'нет. Остальных значений под рукой сейчас нет (чужой компьютер). Проверю позже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Проверил 4 значения для 32768 Гц - 50% совпадения с расчетами по формулам. Разобрался: по ссылке учитывают только ошибки при передаче. Я же считал максимальную ошибку приема и передачи.

 

Нашел еще одну консольную программу bitshift - там считается суммарная ошибка при передаче байта. Результаты естественно отличаются

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значение модулятора можно подбирать по разным критериям.

1. минимальное отклонение битовой частоты приема

2. минимальное отклонение битовой частоты передачи

3. минимальная ошибка за время приема одного символа

4. минимальная ошибка за время передачи одного символа

В зависимости от выбранного критерия (для п.3 и 4 еще и от формата/длины символа) получаются различающиеся значения для модулятора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

моя реализация нахождения значения регистра.

Оптимизируется по минимуму максимумов отклонений в группах из интересуемого количества бит(максимум 13 бит)

UxMCTL.rar

Изменено пользователем anv0lk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значение модулятора можно подбирать по разным критериям.

1. минимальное отклонение битовой частоты приема

2. минимальное отклонение битовой частоты передачи

3. минимальная ошибка за время приема одного символа

4. минимальная ошибка за время передачи одного символа

В зависимости от выбранного критерия (для п.3 и 4 еще и от формата/длины символа) получаются различающиеся значения для модулятора.

Так вот в этом то и вопрос. Какой критерий в User Guide, какой в п.2 , а какой в п.3?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

моя реализация нахождения значения регистра.

Оптимизируется по минимуму максимумов отклонений в группах из интересуемого количества бит(максимум 13 бит)

Посмотрел, сравнил со своими результатами. Результаты совпадают для оптимизации передачи. Если необходимо оптимизировать прием, то не катит. Например, для 32768/1200, 11 бит значение UxMCTL=0xA4 (0x94) не самое лучшее.

 

Вопросы:

1. Имеет ли смысл использовать два значения UxMCTL - одно для передачи, одно для приема или лучше выбрать одно значение оптимальное для приема/передачи?

2. Вообще игра стоит свеч? Попробывал с разными UxMCTL для передачи 100000 байт разница для 32768/1200 с точки зрения вероятности ошибки приема/передачи (в моем случае) незначительная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...