temich 0 2 апреля, 2015 Опубликовано 2 апреля, 2015 · Жалоба Здравствуйте! имеется контроллер Atmega32, в нем программа которая каждые полсекунды посылает символ по UART, который затем успешно принимается компьютером с помощью преобразователся USB-TTL на микросхеме PL-2303. Все бы ничего, если бы не одно НО: после выключения питания контроллера (GND остается) при подключенном UART (только TX) контроллер продолжает работать!!!! То есть по сути питается от UART!! Для наглядности даже подлючены светодиоды на порт B, которые продолжают мигать, но уже с меньшей яркостью. Кто может объяснить такое явление? в чем проблема? в неправильной настройке UART или может с преобразователем USB-TTL что-то не то? #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> void send_char(char data) { while(!(UCSRA & (1<<UDRE))); UDR = data; } int main(void) { /*PORTB на выход*/ DDRB = 0xFF; PORTB = 0x00; /*настройка UART*/ UBRRL = 0x33; //0x33 - Baud Rate = 9600 (при fosc = 8MHz) UCSRB = 0b00011000; //бит4 - RXEN, бит3 - TXEN UCSRC = 0b10000110; //бит7 - URSEL (Register Select: если 1 то UCSRC), бит2,1 - UCSZ1,UCSZ0 (формат кадра) PORTB |= (1<<PORTB2); while(1) { PORTB ^= (1<<PORTB2); PORTB ^= (1<<PORTB3); send_char('A'); _delay_ms(500); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 2 апреля, 2015 Опубликовано 2 апреля, 2015 · Жалоба То есть по сути питается от UART!! Да не от UART он питается, а от USB-порта. Скорее всего, Ubus (это +питания USB) где-то проходит на плату. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр С 0 2 апреля, 2015 Опубликовано 2 апреля, 2015 · Жалоба Контроллер Atmega32 скорее всего пропитывается через ногу ТХ от микросхемы PL-2303. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
temich 0 2 апреля, 2015 Опубликовано 2 апреля, 2015 (изменено) · Жалоба Да не от UART он питается, а от USB-порта. Скорее всего, Ubus (это +питания USB) где-то проходит на плату. Контроллер Atmega32 скорее всего пропитывается через ногу ТХ от микросхемы PL-2303. Разобрал USB-TTL. Точной схемы не нашел, есть похожая, но у меня контакты Rx и Tx подключаются через резисторы 68 Ом к RXD и TXD PL2303 соответственно. Напряжения на Rx Tx при неактивной передаче приблизительно 4.5 В (оно наверное и логично, т.к. стартовый бит в UART это ноль). Ну вот с какой радости контроллер запускается, если к нему подключены только только GND и Rx(он же Tx контроллера)? разве у UART есть функция запитывать устройство? Изменено 2 апреля, 2015 пользователем temich Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 апреля, 2015 Опубликовано 2 апреля, 2015 · Жалоба От Rx запитываться не должен, а от Tx через паразитные защитные диоды на входе Rx меги - может и будет. Либо ставьте диод, либо меняйте схему переходника, чтобы обеспечить режим self-powered device. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladivolt 0 2 апреля, 2015 Опубликовано 2 апреля, 2015 · Жалоба Ещё вариант -- выходной драйвер PL2303 запитать (вывод 4 VDD_232) от той же шины, что и контроллер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
temich 0 3 апреля, 2015 Опубликовано 3 апреля, 2015 · Жалоба Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART. Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите... Ещё вариант -- выходной драйвер PL2303 запитать (вывод 4 VDD_232) от той же шины, что и контроллер. наверное не получится... драйвер PL2303 сделан по подобию флешки втыкается в USB, а от него идут провада Rx Tx GND. А на Atmega32 уже почти собрано устройство, которое имеет отдельный блок питания, и управляется через, Rx Tx GND Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladivolt 0 3 апреля, 2015 Опубликовано 3 апреля, 2015 · Жалоба Если нет возможности "влезть" в сторонний переходник, то ... ставьте диод... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 3 апреля, 2015 Опубликовано 3 апреля, 2015 (изменено) · Жалоба Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART. Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите... Вот так лучше сделайте: Через диод будет "приходить" от PL2303 только лог."0", а лог."1" будет получаться с помощью подтягивающего резистора. Это стандартный способ для защиты от паразитной запитки. Резистор ставьте любой, в диапазоне 1к-10к. Я ставлю обычно 10к, и работает нормально на скоростях UART до 115200 (быстрее не испытывал). Диод тоже любой, годится самый маломощный. Скорости и токи тут минимальные. Изменено 3 апреля, 2015 пользователем controller_m30 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 3 апреля, 2015 Опубликовано 3 апреля, 2015 · Жалоба ......по сути питается от UART!!... не надо только пытаться запитывать свои девайсы таким образом. На рынке появились похожие фокусы. Оно работает только на определённых компах. Стоит воткнуть в какой нить ноут - привет семье... Обычно производители стыдливо указывают, что дескать работают девайсы только от стационарных компов (прикрывают пятую точку, от рекламаций).. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
temich 0 7 апреля, 2015 Опубликовано 7 апреля, 2015 · Жалоба Вот так лучше сделайте: Через диод будет "приходить" от PL2303 только лог."0", а лог."1" будет получаться с помощью подтягивающего резистора. Это стандартный способ для защиты от паразитной запитки. Резистор ставьте любой, в диапазоне 1к-10к. Я ставлю обычно 10к, и работает нормально на скоростях UART до 115200 (быстрее не испытывал). Диод тоже любой, годится самый маломощный. Скорости и токи тут минимальные. а на вторую линию ничего не нужно ставить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
controller_m30 1 7 апреля, 2015 Опубликовано 7 апреля, 2015 · Жалоба а на вторую линию ничего не нужно ставить? Если верить даташиту на PL2303, вторая линия (RXD) - это "чистый" вход, по схеме триггера Шмитта. Это может быть или база биполярного транзистора, или затвор полевого... в любом случае, взять с этой ножки какое-либо питание проблематично. Так что на вторую линию ничего ставить не нужно, запитки контроллера по ней не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться