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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Портится старший бит при приёме через UART, atmega1281
alex1979
сообщение Mar 7 2008, 10:13
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Цитата(xelax @ Feb 29 2008, 09:10) *
Используется бридж USB to UART СР2101 silabs.
Запускаю передачу файла через гипиертерминал. Файл состоит из последовательности ASCII цифорок.
На меге творится что-то странное. На 9600 иногда принимается нормально, иногда через байт то есть например передаю несколько раз 2. на приёме вижу 0х32 0хb2 0x32 0xb2 ... и т.д. со всеми цифрами.
Ситауация исправилась, когда на гипертерминале ставлю два стоп бита.
На скорости 38400 два стоп бита уже не спасают.

Мега работаёт на внутреннем RC генераторе на 4 Мгц. При старте программы генератор калибруется по внешнему часовому кварцу, который для асинхронного таймера.

бодрейт считается так.
Код
#define UART_DOUBLE_SPEED 1ul

enum
{
UART_BAUDRATE_9600 =  (unsigned)((F_CPU * (UART_DOUBLE_SPEED + 1ul)) / (16ul * 9600ul) - 1ul),
UART_BAUDRATE_38400 = (unsigned)((F_CPU * (UART_DOUBLE_SPEED + 1ul)) / (16ul * 38400ul) - 1ul)
}




Вообще что это такое может быть?

З.Ы.

Гоняю данные другой терминальной программой всё ок и на приём и на передачу.



недавно сам столкнулся с подобной проблеммой.
Решение: вместо вычистения скорости по формуле в регистр UBRR записал пердопределенную константу из даташита.

Пример:
u16 bauddiv = 51;
outb(UBRRL, bauddiv);
#ifdef UBRRH
outb(UBRRH, bauddiv>>8);
#endif

Сообщение отредактировал alex1979 - Mar 7 2008, 10:14
Go to the top of the page
 
+Quote Post
Lexdaw
сообщение Mar 11 2008, 12:08
Сообщение #17


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

Группа: Участник
Сообщений: 87
Регистрация: 5-02-08
Пользователь №: 34 772



А вот еще был случай...Короче опторазвязанный USART сбоил из-за оптрона - затягивал фронты.
Go to the top of the page
 
+Quote Post
xelax
сообщение Mar 11 2008, 13:33
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



wacko.gif Реально наблюдаю на осцилографе картинку, с писишки идут посылки через байт из посылки выкидывается последний бит, затем нормальная и т.д...

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

Я в шоке wacko.gif , похоже это первый и последний раз когда я использую гипертерминал.

З.Ы.
Один плюс из всего этого... Калибровку сделал нормальную smile.gif
Go to the top of the page
 
+Quote Post
alux
сообщение Oct 24 2008, 05:01
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(alex1979 @ Mar 7 2008, 13:13) *
Решение: вместо вычистения скорости по формуле в регистр UBRR записал пердопределенную константу из даташита.

У меня тоже были проблемы с передачей данных по UART, пока не сделал так:
Код
#define ROUND(f) (signed long)((f)+(((f)>0.0)?(0.5):(-0.5)))

// USART setting
#define baud_rate   115200
#define baud_select ROUND((double)f_cpu/(baud_rate*8L)-1)

int main()
{
uart_Init(baud_select);
...........
}

void uart_Init(unsigned int ubrr)
{
  UCSR1A = (1<<U2X1);               // Double the USART Transmission Speed
  UCSR1B |= (1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1); //Разрешить прием и передачу, прерывание "Прием завершен"
  UCSR1C |= (3<<UCSZ10);            //8-бит данных, 1 стоп-бит, no parity    
  UBRR1H = (unsigned char)(ubrr>>8);
  UBRR1L = (unsigned char)ubrr;     // f=7.3728 MHz, 115200 baud, error 0.0%
}
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 24 2008, 11:07
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



smile.gif Тема древняя...
Ну раз подняли снова, просто опишу итог, чтобы поставить точку.

Проблема в Hyperterminal, причём проявлется только на машинах DELL. Почему не знаю.

Только данная проблема проявляется не только на avr, точно так же не работают атмеловские армы через uart. И что меня окончательно убедило в том, что проблемы в писюке, так это то, что реализованный virtual com port на usb, получил такие же проблемы. Битые подобным образом байты наболюдал usb sniffer'ом SnoopyPro в bulk out канале.

На сим тему считаю завершённой.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 24 2008, 20:37
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(alex1979 @ Mar 7 2008, 12:13) *
недавно...

Moderator:
Не сочтите за труд не заниматься тупым ненужным цитированием постов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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