Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Mega16 & UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Denisvak
Добрый день. Тут такой прикольчик у меня наблюдается:
Работаю с Mega16, запускаю у неё UART на любой скорости, посылаю с неё всего один байт 0x0D, а в терминалке получаю два байта 0x0D и 0x0A. Причем это наблюдается токо когда отсылаю именно 0x0D и всегда после него принимается 0x0A. Если слать скопом толпу байтов где нет байтов равных 0x0D то все Ок, сколько послал столько и принял и пакет правильный. А если с 0x0D то получаю пакет длиннее на столько байтов сколько раз встретился 0x0D в пакете. Что может быть за мистика? sad.gif
Мега работает с кварцем 16МГц и скорость UART никак не влияет на данный странный баг.
Инициализация выполнена так:
Код
  UCSRA=0x02;
  UCSRB=0x18;
  UCSRC=0x8E;
  UBRRH=0x00;
  UBRRL=0x22;


отправка так:
Код
void uart_send_char(unsigned char data){
  while ( !( UCSRA & (1<<5)) );
  UDR = data;
}


help.gif
Сергей Борщ
Цитата(Denisvak @ Mar 16 2008, 12:59) *
посылаю с неё всего один байт 0x0D, а в терминалке получаю два байта 0x0D и 0x0A.
Это одно из чудес виндового Гипертерминала. Ваш процессор работает правильно. В настройках (Propertities->Settings->ASCII-setup) есть галочка append line feeds to incoming line ends. Проверьте, стоит ли она. Помню, что иногда и она не помогает.
Denisvak
Цитата(Сергей Борщ @ Mar 16 2008, 14:23) *
Это одно из чудес виндового Гипертерминала. Ваш процессор работает правильно.


Я использую терминал который в CodeVisionAVR 07.gif и просматриваю данные в hex
Ну на всякий случай набросаю тогда кодик своей терминалки...
Aesthete Animus
Попрбуйте терминалку Zoc ( http://www.emtec.com/zoc/ ). С ней у меня никогда не было проблем.
sysel
Цитата(Denisvak @ Mar 16 2008, 14:29) *
Я использую терминал который в CodeVisionAVR 07.gif и просматриваю данные в hex
Ну на всякий случай набросаю тогда кодик своей терминалки...


В настройках кодывиженовской терминалки надо убрать 2 галочки:
Append LF On Reception
Append LF On Transmittion

В общем такое поведение терминалки своими корнями уходит глубоко в историю
0x0D - переход на след. строку
0x0A - перевод печатающей каретки в начало строки.
Denisvak
Цитата(sysel @ Mar 16 2008, 16:36) *
В настройках кодывиженовской терминалки надо убрать 2 галочки:
Append LF On Reception
Append LF On Transmittion

В общем такое поведение терминалки своими корнями уходит глубоко в историю
0x0D - переход на след. строку
0x0A - перевод печатающей каретки в начало строки.


Оппаньки и правда, Спасибо, никогда бы не подумал. Вопрос снят, всем спасибо ещё раз!!!
SasaVitebsk
Цитата(sysel @ Mar 16 2008, 17:36) *
В общем такое поведение терминалки своими корнями уходит глубоко в историю
0x0D - переход на след. строку
0x0A - перевод печатающей каретки в начало строки.


С точностью наоборот. smile.gif

0D - "ВК" по рос. терминологии (возврат каретки) "\r" по Си. "Enter"
0A - "ПС" по рос. терминологии (перевод строки) "\n" по Си. "LF"

Кстати иногда дополняется и наоборот. Кроме того, виндовый терминал имеет глюки, которые неустранялись практически с момента написания. smile.gif
AHTOXA
Цитата(SasaVitebsk @ Mar 17 2008, 00:26) *
0D - "ВК" по рос. терминологии (возврат каретки) "\r" по Си. "Enter"
0A - "ПС" по рос. терминологии (перевод строки) "\n" по Си. "LF"


Если быть совсем точным biggrin.gif , то

0D - "ВК" по рос. терминологии (возврат каретки) "\r" по Си. "CR" (Carriage Return)
0A - "ПС" по рос. терминологии (перевод строки) "\n" по Си. "LF" (Line Feed)

:-)
SasaVitebsk
Точно. smile.gif А то мозги отшибло и не смог вспомнить. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.