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

 
 
> Mega16 & UART, Странное поведение
Denisvak
сообщение Mar 16 2008, 10:59
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



Добрый день. Тут такой прикольчик у меня наблюдается:
Работаю с 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Сергей Борщ
сообщение Mar 16 2008, 11:23
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Denisvak
сообщение Mar 16 2008, 11:29
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



Цитата(Сергей Борщ @ Mar 16 2008, 14:23) *
Это одно из чудес виндового Гипертерминала. Ваш процессор работает правильно.


Я использую терминал который в CodeVisionAVR 07.gif и просматриваю данные в hex
Ну на всякий случай набросаю тогда кодик своей терминалки...
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Mar 16 2008, 12:04
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Попрбуйте терминалку Zoc ( http://www.emtec.com/zoc/ ). С ней у меня никогда не было проблем.
Go to the top of the page
 
+Quote Post
sysel
сообщение Mar 16 2008, 13:36
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(Denisvak @ Mar 16 2008, 14:29) *
Я использую терминал который в CodeVisionAVR 07.gif и просматриваю данные в hex
Ну на всякий случай набросаю тогда кодик своей терминалки...


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

В общем такое поведение терминалки своими корнями уходит глубоко в историю
0x0D - переход на след. строку
0x0A - перевод печатающей каретки в начало строки.
Go to the top of the page
 
+Quote Post
Denisvak
сообщение Mar 16 2008, 16:03
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



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

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


Оппаньки и правда, Спасибо, никогда бы не подумал. Вопрос снят, всем спасибо ещё раз!!!
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 16 2008, 19:26
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



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


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

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

Кстати иногда дополняется и наоборот. Кроме того, виндовый терминал имеет глюки, которые неустранялись практически с момента написания. smile.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 17 2008, 16:04
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


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

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

:-)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 17 2008, 17:40
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Точно. smile.gif А то мозги отшибло и не смог вспомнить. smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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