Низкая скорость com-порта (CP2102)

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Сб дек 08, 2012 16:40:40

Сообщение Триод »

Спаял схему USB - UART на CP2102. Источником данных является Atmega8.

Инициализирую UART в меге следующим кодом:

Код: Выделить всё

USART_init(103);//Скорость 9600 при кварце 16 Мгц и U2X = 0

void USART_init(uint16_t ubrr_value)
{
	//Устанавливаем скорость передачи
	UBRRL=ubrr_value;
	UBRRH=(ubrr_value>>8);
	//Режим (регистр UCSRC):
	//Асинхронная передача UMSEL0=0; UMSEL1=0;
	cbi(UCSRC, UMSEL);
	//размер  символа данных 8 бит: UCSZ0=1; UCSZ1=1;
	sbi(UCSRC, UCSZ0);
	sbi(UCSRC, UCSZ1);
	//Один стоп-бит USBS=0;
	cbi(UCSRC, USBS);
	//Контроль чётности отключен UPM0=0; UPM1=0;
	cbi(UCSRC, UPM0);
	cbi(UCSRC, UPM1);
	//Нарастающий фронт сигнала XCK (на выводе TxD, ниспадающий фронт на выводе RxD) UCPOL=0;
	cbi(UCSRC, UCPOL);

	//Разрешаем приём и передачу (регистр UCSRB)
	sbi(UCSRB, RXEN);
	sbi(UCSRB, TXEN);
}
Драйвер встаёт без проблем. Винда видит порт, com-порт успешно устанавливается и управляется (на ногу SUSPEND повесил светодиод).
Скорость порта в CP2102 управляется виндой:
"The data format and baud rate programmed into the UART is set during COM port configuration on the PC."
Соответственно, в настройках порта в винде стиавлю скорость 9600, кадр 8 бит, 1 стоп-бит, чётности нет, Флоу контрол тоже "нет".

Включаю всё. Запускаю PuTTY, прописываю настройки аналогичные настройкам порта в винде. Результат - ноль.

Начинаю думать. Вижу что Атмега дёргает ногой (по изменению напряжения, скопа нет), тут нормально.
Порт активируется при запуске PuTTY, светодиод горит, тут тоже всё Ок. Смотрю под лупой на ноги CP2102 и на дорожки - непропая визуально не вижу. Начинаю уменьшать скорость порта в PuTTY, что-то начинает появляться. Дохожу до 600 бод, всё приходит в норму.
Но 600 это не 9600, которые я ожидал. Проверил инициализацию в Атмеге - ошибок не нашёл. Кварц внешний, задержки формируются правильно, а скорость не та.

Подскажите, где может быть затык?
Реклама
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Сб дек 08, 2012 16:40:40

Сообщение Триод »

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

Прошу закрыть тему.

P.s. Proteus, кстати, съел ошибку и не поморщился - в нём всё работало
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 508
Зарегистрирован: Ср дек 12, 2007 21:46:06
Откуда: Георгиевск

Сообщение PICmaker »

код в студию!
Нет повести печальнее на свете чем повесть о заклинившем ресете
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Сб дек 08, 2012 16:40:40

Сообщение Триод »

Код: Выделить всё

void USART_init( unsigned int ubrr)
{
	/* Set baud rate */
	UBRRH = (unsigned char)(ubrr>>8);
	UBRRL = (unsigned char)ubrr;
	/* Enable receiver and transmitter */
	UCSRB = (1<<RXEN)|(1<<TXEN);
	/* Set frame format: 8data, 1stop bit */
	UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

По большому счету "ничего" никак не может быть, если есть какие-то импульсы, пусть даже скорость не совпадает, то в терминал будет вываливаться мусор либо возникать ошибка FramingError, которую часто никто не обрабатывает и даже не выводят на экран. Не читайте советских газет, ага.
Контактная информация:
Реклама
Ответить

Вернуться в «Интеграция с ПК»