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

 
 
> USART
KIG
сообщение Jul 25 2007, 10:13
Сообщение #1


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

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Здравствуйте!
Пытаюсь передать цифру 5 через USART ATmega16 на компьютер в программу Terminal. На компьютере принамаю вместо одной цифры три, причем среди них нет ни одной пятерки. В программе Terminal установил скорость передачи в 115200 кбит/с, 2 стоповых бита, 8 бит в кадре. Код программы привел ниже. В чем причина, что я делаю неправильно?

#include <iom16v.h>
#include <macros.h>

void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UBRRL = 0x01; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRC = 0x8E;
UCSRB = 0x08;
}

void putchar(char ch)
{ while (!(UCSRA&(1<<UDRE)));
UDR=ch;
}

void main(void)
{CLI(); //disable all interrupts
uart0_init();
SEI(); //re-enable interrupts
putchar(5);
while(1);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
colombo_2007
сообщение Jul 27 2007, 05:50
Сообщение #2


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

Группа: Свой
Сообщений: 81
Регистрация: 19-07-07
Пользователь №: 29 221



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


--------------------
Все просто, но нам не заметно
Go to the top of the page
 
+Quote Post
KIG
сообщение Jul 27 2007, 16:45
Сообщение #3


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

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Цитата(colombo_2007 @ Jul 27 2007, 08:50) *
Я так и не понял решилась ли у вас проблема. Если не решилась проверьте фьюзы, контроллер может работать от внутреннего генератора с меньшей частотой.



Проблема решилась частично. Действительно МК работал от внутреннего генератора. Установив фьюзы, запитал от внешнего кварца. Решил проверить путем передачи цифры '5' одну за другой, но принять что хотел не удалось. В зависимости от момента подключения программы Terminal к COM-порту на экране появлялись разные цифры, но не '5' (пару раз все же удалось вовремя подключиться и принимать '5', но отключившись и снова подключившись принимал другие цифры). От проблемы избавился путем установки задержки по времени между отправками '5'. Почему все-таки не удавалось принимать пятерку при её отправлении без задержки? ( Пробовал разные Baude rate - всё также).
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 27 2007, 21:42
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(KIG @ Jul 27 2007, 16:45) *
В зависимости от момента подключения программы Terminal к COM-порту на экране появлялись разные цифры, но не '5' (пару раз все же удалось вовремя подключиться и принимать '5', но отключившись и снова подключившись принимал другие цифры). От проблемы избавился путем установки задержки по времени между отправками '5'. Почему все-таки не удавалось принимать пятерку при её отправлении без задержки?

Потому что вы передаёте байты, плотно пристыкованные друг к другу, используя UDRE. Поскольку вы включаете терминал в произвольный момент времени, вы попадаете на произвольный бит непрерывной последовательности. Если это нулевой бит, то программа терминал считает, что она зацепилась за старт-бит, ну и всё повторяется циклически.

Чтобы избежать подобного положения вещей, сначала включите программу терминал, затем подайте питание на МК. Приёмный уарт в ПК засинхронизируется от первого байта и вы получите то, что хотите.

Кстати, какой байт вы шлёте: 0х05 или 0х35?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KIG   USART   Jul 25 2007, 10:13
- - KRS   Цитата(KIG @ Jul 25 2007, 14:13) На компь...   Jul 25 2007, 10:19
|- - KIG   Цитата(KRS @ Jul 25 2007, 13:19) Так на м...   Jul 25 2007, 12:22
- - prottoss   По поводу baudrate : я делаю так Код#define CPU_C...   Jul 25 2007, 10:47
|- - Сергей Борщ   Цитата(prottoss @ Jul 25 2007, 13:47) Код...   Jul 25 2007, 12:21
|- - prottoss   Цитата(Сергей Борщ @ Jul 25 2007, 20:21) ...   Jul 25 2007, 12:46
- - =GM=   Цитата(KIG @ Jul 25 2007, 09:13) Пытаюсь ...   Jul 25 2007, 12:13
- - Igor26   А почему два стоп-бита?   Jul 25 2007, 12:59
|- - Сергей Борщ   Цитата(Igor26 @ Jul 25 2007, 15:59) А поч...   Jul 25 2007, 14:05
|- - =GM=   Цитата(Сергей Борщ @ Jul 25 2007, 13:05) ...   Jul 26 2007, 12:12
|- - Сергей Борщ   Цитата(=GM= @ Jul 26 2007, 15:12) Ну здес...   Jul 26 2007, 14:45
|- - =GM=   Цитата(Сергей Борщ @ Jul 26 2007, 13:45) ...   Jul 26 2007, 15:18
- - SasaVitebsk   Даже ещё усугублю немножко. Я тут хомутнул и на...   Jul 26 2007, 20:20
|- - prottoss   Цитата(KIG @ Jul 28 2007, 00:45) Проблема...   Jul 27 2007, 17:02
|- - Petka   Цитата(=GM= @ Jul 28 2007, 01:42) Чтобы и...   Jul 28 2007, 08:18
- - KIG   Спасибо за помощь! Постараюсь сегодня попробов...   Jul 30 2007, 07:50


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 14:22
Рейтинг@Mail.ru


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