CH340G - как работать с этим зверем?

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

CH340G - как работать с этим зверем?

Сообщение alex1126 »

Захотелось мне общаться с МК (атмега16) по юсб. Под рукой оказалась микросхема под именем CH340G. Припаял по быстрому туда кварц, D+, D-, питание и виндовс ее увидел, в сисетме появился КОМ3.
Решил пойти дальше - подключил МК (RX,TX), написал прошивку по чтению/записи из/в UART и программку на компе по отправке данных и приему из комп порта. И дальше какая то фигня затворилась.

В МК логика была задумана такая - при чтении байта этот байт отправляется в портB, куда подключены 8 светодиодов (к каждой ноге по одному) что бы увидеть что он получил. В ответ шлем 0.
При нажатии на кнопку зажигаем еще одни светодиод и шлем единичку, при отпускании - тушим и шлем двойку.
МК тактируется от кварца на 8 мегагерц. Скорость по уарту - 9600. Подключение примитивное, даже незнаю чего там описывать. Схема вот
Изображение

Программа на компе еще примитивней. Отправляет в порт $01, $02, $04, $08, $00. Ну что бы разные светодиоды загорались. Ну и раз в полсекунды читаем есть что в порту или нет. Программа на дельфях. Октрываю порт как файл

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

Com1:=CreateFile(PChar('Com1'),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
пытаюсь настроить

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

SetCommState
выдают ошибку. Ладно, фих с вами, пусть по дефолту все.
Пуржим. Пуржится.

А вот дальше начинается свистопляска.
В диспетчере устройств устройство сидит плотно, не пропадает, все стабильно. Но вот работает оно фих знает как.
Иногда при подключении начинают из ком порта литься данные. Ну по логике так ит должно быть, но оттуда льется 120 (десятичная) и шесть нулей. Когда я туда пытаюсь что то отправить, то светодиоды загораются, но как то "от балды", хотя всегда одинаково, но не в соответствии с тем что я посылаю.

а иногда вообще молчек, ничего не отправляется и не посылается, выдает ошибку записи в порт (ну не ошибку, а ничего не пишет).

В чем секрет? Кто работал с этим чудом китайской техники?
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: CH340G - как работать с этим зверем?

Сообщение Мурик »

Может дело не в микросхеме, а в программах?
Эта микросхема используется в Arduino и обмен данными производится нормально.
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: CH340G - как работать с этим зверем?

Сообщение alex1126 »

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

а эта микросхема да, много где используеться, весь интернет в ссылках на программатор, диагностический модуль для авто и андурину. А как работать саму с ней - две ссылки только и то, там без МК, поверхностно как то :)
Даташит на китайском нашел. Много думал :) Программу нашел тоже на китайском, кнопок больше чем иероглифов в их алфавите. Так и не понял как с ней работать :)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: CH340G - как работать с этим зверем?

Сообщение Мурик »

alex1126 писал(а):Так и не понял как с ней работать
Как с COM портом. :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: CH340G - как работать с этим зверем?

Сообщение YS »

Так вы бы свой код показали-то... :)

Но пока что попробую себя в роли экстрасенса: ваши проблемы смахивают на путаницу с ASCII-представлением и байтовым представлением данных.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: CH340G - как работать с этим зверем?

Сообщение alex1126 »

Нашел одну ошибку ( судя по всему не последнюю). Не подключил конденсатор на V3. Поставил. Ситуация изменилась незначительно. Вернее вообще не изменилась, разве что только более уверенно она включается и работает, но смысл не изменился - принимает непонятно что, отправляет непонятно что, теже же самые 120D и нули
Про представление аски и байтов я тоже думал, но там вообще никак не получается. Более того, я когда отправляю байт туда, который должен отправиться на портВ, то в порту все время принимается 0xFE. Если отправляю единицу (0x01) то приниматься 0xFF. Все остальное (0x02, 0x04, 0x08, 0x00) - на порту - 0xFE.
Обратно тоже фигня какая то.

Заметил тут другое - я когда конденсатор то припаял, то функция установки параметров ком порта (SetCommState) стала проходить без ошибок. но все данные - принятые и переданные - нули. Неважно что отправляю на МК или с МК - принимаются нули. Решил посмотреть какие параметры в порту по умолчанию (GetCommState) - а там оказывается скорость 1200, стоп битов нет, битов 7. И при этом мусор шлеться. В свойствах ком порта все как надо - 9600, стоп бит, 8 бит. На каких скоростях то она вообще работать должна?

Тут меня осенило еще - надо на ней Rx и Tx перемкнуть и посмотреть че там будет отправляться и приниматься.

Вообщем пообедаю сейчас и займусь. А вечерком кину исходники свои.
Реклама
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: CH340G - как работать с этим зверем?

Сообщение alex1126 »

Нашел ошибку. Подключил напрямую линии rx tx у ch340g и у мк - сами с собой они прекрасно общались. Полез копать прошивку МК. Оказалась ошибка в инициализации уарта. Модуль работы с уарта я брал из готового проекта, где он пошел в серию и прекрасно все работает. Там правда не совсем уарт был, а rs-485, но я подумал что это все фигня. А в модуле этом был включен асинхронный режим. После отключения этого режима все полетело.

Всем спасибо за участие :)
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: CH340G - как работать с этим зверем?

Сообщение YS »

А в модуле этом был включен асинхронный режим. После отключения этого режима все полетело.
Э-э-э, а вот с этого момента можно поподробнее? Асинхронный режим - это как раз нормальный, основной режим, используемый в 99% случаев. Режим с тактированием - это экзотика для U(S)ART'а.

Может быть там был включен не асинхронный режим, а режим удвоенной скорости (бит U2Xn)?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: CH340G - как работать с этим зверем?

Сообщение alex1126 »

Да, не асинхронный режим, это я что то не то сказал. В URSEL единичку не писал. Вообщем вот так:
было

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

void UART_Init(void)
{
	// Установка скорости обмена
	UBRRH = (F_CPU/(16*UART_BAUD)-1) >> 8;
	UBRRL = (F_CPU/(16*UART_BAUD)-1);

	UCSRB = 
		(1<<RXCIE) |	//RXCIE-разрешение прерывания по завершению приёма
		(1<<TXCIE) |	//TXCIE-разрешение прерывания по завершению передачи
		(0<<UDRIE) |	//UDRIE-разрешение прерывания при очистке регистра данных UDR
		(1<<RXEN) |		//RXEN-разрешение приёма
		(1<<TXEN) |		//TXEN-разрешение передачи
		(0<<UCSZ2) |	//UCSZ2-формат посылки (совместно с UCSZ1-UCSZ0 "0"-8 бит данных, "1"-9 бит данных)
		0;
	UCSRC = 				//Режим UART, 1 стоп-бит, 8 бит кадр, без паритета
		(1<<UCSZ1) |	//формат посылки UCSZ2-UCSZ0=0b011 - 8 бит в кадре
		(1<<UCSZ0) |
		(0<<UCPOL) |	//UCPOL - для асинхронного режима ДОЛЖЕН быть сброшен в 0
		0;
}

стало

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

void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0);
}
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: CH340G - как работать с этим зверем?

Сообщение YS »

Первое - запись
Не имеет смысла. Как ноль ни сдвигай, он нулем и останется...

Устанавливают бит № X так:

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

y|=(1<<X);
сбрасывают так:

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

y&=~(1<<X);
Это если мы не хотим трогать остальные биты. Если же мы просто инициализируем значение регистра присваиванием, то имеет смысл только установить нужные биты. Во всех остальных автоматически окажутся нули. :idea:

Далее, в приведенном изначальном коде при записи в UCSRC не учитывается бит URSEL. За счет этого портился UBRRH, и ничего не работало, т.к. сбивалась настройка скорости.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
alex1126
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Re: CH340G - как работать с этим зверем?

Сообщение alex1126 »

YS писал(а):Первое - запись
да это понятно. просто если потом понадобиться установить единичку, то берем и меняем ноль на единичку, а не дописываем новое выражения сдвига и не ищем названия регистра :)
котМатроскин
Нашел транзистор. Понюхал.
Сообщения: 193
Зарегистрирован: Сб фев 02, 2013 10:34:39

Re: CH340G - как работать с этим зверем?

Сообщение котМатроскин »

создал себе проблему и героически ее решает :)))
коротни rx и tx а на комп скачай программу терминал
то что шлёшь в пори тразу и примится.
всё
Ответить

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