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

 
 
 
Reply to this topicStart new topic
> UART Atmega32, проблема с UART
temich
сообщение Apr 2 2015, 09:15
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Здравствуйте! имеется контроллер Atmega32, в нем программа которая каждые полсекунды посылает символ по UART, который затем успешно принимается компьютером с помощью преобразователся USB-TTL на микросхеме PL-2303. Все бы ничего, если бы не одно НО: после выключения питания контроллера (GND остается) при подключенном UART (только TX) контроллер продолжает работать!!!! То есть по сути питается от UART!! Для наглядности даже подлючены светодиоды на порт B, которые продолжают мигать, но уже с меньшей яркостью.
Кто может объяснить такое явление? в чем проблема? в неправильной настройке UART или может с преобразователем USB-TTL что-то не то?

CODE
#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);
}
}
Go to the top of the page
 
+Quote Post
Xenia
сообщение Apr 2 2015, 09:26
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(temich @ Apr 2 2015, 12:15) *
То есть по сути питается от UART!!


Да не от UART он питается, а от USB-порта. Скорее всего, Ubus (это +питания USB) где-то проходит на плату.
Go to the top of the page
 
+Quote Post
Александр С
сообщение Apr 2 2015, 09:57
Сообщение #3





Группа: Участник
Сообщений: 6
Регистрация: 23-03-15
Из: Москва
Пользователь №: 85 850



Контроллер Atmega32 скорее всего пропитывается через ногу ТХ от микросхемы PL-2303.
Go to the top of the page
 
+Quote Post
temich
сообщение Apr 2 2015, 11:26
Сообщение #4





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Цитата(Xenia @ Apr 2 2015, 12:26) *
Да не от UART он питается, а от USB-порта. Скорее всего, Ubus (это +питания USB) где-то проходит на плату.

Цитата(Александр С @ Apr 2 2015, 12:57) *
Контроллер Atmega32 скорее всего пропитывается через ногу ТХ от микросхемы PL-2303.

Разобрал USB-TTL. Точной схемы не нашел, есть похожая, но у меня контакты Rx и Tx подключаются через резисторы 68 Ом к RXD и TXD PL2303 соответственно. Напряжения на Rx Tx при неактивной передаче приблизительно 4.5 В (оно наверное и логично, т.к. стартовый бит в UART это ноль). Ну вот с какой радости контроллер запускается, если к нему подключены только только GND и Rx(он же Tx контроллера)? разве у UART есть функция запитывать устройство?
Прикрепленное изображение


Сообщение отредактировал temich - Apr 2 2015, 11:27
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 2 2015, 11:44
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



От Rx запитываться не должен, а от Tx через паразитные защитные диоды на входе Rx меги - может и будет. Либо ставьте диод, либо меняйте схему переходника, чтобы обеспечить режим self-powered device.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Владивольт
сообщение Apr 2 2015, 18:30
Сообщение #6


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

Группа: Участник
Сообщений: 168
Регистрация: 14-02-10
Пользователь №: 55 490



Ещё вариант -- выходной драйвер PL2303 запитать (вывод 4 VDD_232) от той же шины, что и контроллер.


--------------------
#define TRUE (4==(2*2))
Go to the top of the page
 
+Quote Post
temich
сообщение Apr 3 2015, 08:22
Сообщение #7





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART.
Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите...
Прикрепленное изображение


Цитата(Владивольт @ Apr 2 2015, 21:30) *
Ещё вариант -- выходной драйвер PL2303 запитать (вывод 4 VDD_232) от той же шины, что и контроллер.

наверное не получится... драйвер PL2303 сделан по подобию флешки втыкается в USB, а от него идут провада Rx Tx GND.
А на Atmega32 уже почти собрано устройство, которое имеет отдельный блок питания, и управляется через, Rx Tx GND
Go to the top of the page
 
+Quote Post
Владивольт
сообщение Apr 3 2015, 08:49
Сообщение #8


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

Группа: Участник
Сообщений: 168
Регистрация: 14-02-10
Пользователь №: 55 490



Если нет возможности "влезть" в сторонний переходник, то
Цитата(Сергей Борщ @ Apr 2 2015, 15:44) *
... ставьте диод...



--------------------
#define TRUE (4==(2*2))
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Apr 3 2015, 14:56
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Цитата(temich @ Apr 3 2015, 11:22) *
Протестировал все это дело на USB-UART от плате Ардуино (без основного контроллера), там на Atmega16 реализован также и UART.
Так вот с ним все работает правильно. На каждой линии стоит резистор 1k, и если поставить на такие же резисторы на преобразователь PL2303, то проблема как бы решается... Но разве правильно будет решать эту проблему только с помощью резисторов? Профессионалы подскажите...

Вот так лучше сделайте:

Прикрепленное изображение

Через диод будет "приходить" от PL2303 только лог."0", а лог."1" будет получаться с помощью подтягивающего резистора. Это стандартный способ для защиты от паразитной запитки.
Резистор ставьте любой, в диапазоне 1к-10к. Я ставлю обычно 10к, и работает нормально на скоростях UART до 115200 (быстрее не испытывал).
Диод тоже любой, годится самый маломощный. Скорости и токи тут минимальные.

Сообщение отредактировал controller_m30 - Apr 3 2015, 15:13
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 3 2015, 21:19
Сообщение #10


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(temich @ Apr 2 2015, 12:15) *
......по сути питается от UART!!...


не надо только пытаться запитывать свои девайсы таким образом. На рынке появились похожие фокусы.
Оно работает только на определённых компах. Стоит воткнуть в какой нить ноут - привет семье...
Обычно производители стыдливо указывают, что дескать работают девайсы только от стационарных компов (прикрывают пятую точку,
от рекламаций)..
Go to the top of the page
 
+Quote Post
temich
сообщение Apr 7 2015, 07:39
Сообщение #11





Группа: Участник
Сообщений: 9
Регистрация: 4-02-14
Пользователь №: 80 326



Цитата(controller_m30 @ Apr 3 2015, 17:56) *
Вот так лучше сделайте:

Прикрепленное изображение

Через диод будет "приходить" от PL2303 только лог."0", а лог."1" будет получаться с помощью подтягивающего резистора. Это стандартный способ для защиты от паразитной запитки.
Резистор ставьте любой, в диапазоне 1к-10к. Я ставлю обычно 10к, и работает нормально на скоростях UART до 115200 (быстрее не испытывал).
Диод тоже любой, годится самый маломощный. Скорости и токи тут минимальные.

а на вторую линию ничего не нужно ставить?
Go to the top of the page
 
+Quote Post
controller_m30
сообщение Apr 7 2015, 12:46
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Цитата(temich @ Apr 7 2015, 10:39) *
а на вторую линию ничего не нужно ставить?

Если верить даташиту на PL2303, вторая линия (RXD) - это "чистый" вход, по схеме триггера Шмитта. Это может быть или база биполярного транзистора, или затвор полевого... в любом случае, взять с этой ножки какое-либо питание проблематично.
Так что на вторую линию ничего ставить не нужно, запитки контроллера по ней не будет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 02:49
Рейтинг@Mail.ru


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